安装kubernetes+docker集群,一篇文章搞定
1. 安装docker
1.1 前置工作
master节点和worker节点上都需要进行下面的操作。
# 关闭了防火墙,并取消了开机自启动。
hadoop@master:sudo ufw disable
#查看防火墙状态
hadoop@master:sudo ufw status
# 关闭selinux
hadoop@master:sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
hadoop@master:setenforce 0 # 临时
# 关闭swap分区
hadoop@master:swapoff -a # 临时
hadoop@master:sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
#永久关闭swap分区的另一种方法
hadoop@master:vim /etc/fstab
打开fstab文件,注释掉有swap的那一行,然后保存
1.2 安装
master节点和worker节点上都需要进行下面的操作。
我们要做的第一件事就是安装Docker。要安装docker,先要登录到Server上,输入并执行下面命令:
#在docker库中进行安装
hadoop@master:sudo apt-get install docker.io
一旦docker安装成功后,你需要将你的账号添加到docker组中(否则,每次运行docker命令,都需要带上sudo,这可能导致安全问题)。执行下面命令将你的账号添加到docker组中:我这儿安全组是docker,用户是hadoop
#添加至安全组
hadoop@master:sudo usermod -aG docker hadoop
#增加权限
hadoop@master:sudo chmod a+rw /var/run/docker.sock
#重启docker服务
hadoop@master:sudo systemctl restart docker.service
登出并重新登录,这样上述配置变化才能生效。
启动并使docker后台驻留程序:
hadoop@master:sudo systemctl start docker
hadoop@master:sudo systemctl enable docker
#验证
hadoop@master:/etc/docker$ docker --version
Docker version 19.03.6, build 369ce74a3c
参考链接:https://blog.csdn.net/u013948858/article/details/78429954
1.3 修改docker镜像源
master节点和worker节点上都需要进行下面的操作。
安裝好Docker后接下去便是开心的玩乐了,但是具体情况并不愉快
由于docker的默认设置镜像源国外,由于中国独特的互联网缘故浏览起來通常比较慢或是彻底浏览不上,幸亏中国有相近的镜像源能够应用。
国内亲测可用的几个镜像源:
Docker 官方中国区:https://registry.docker-cn.com
网易:http://hub-mirror.c.163.com
中国科技大学:https://docker.mirrors.ustc.edu.cn
阿里云:https://y0qd3iq.mirror.aliyuncs.com
增加Docker的镜像源配置文件 /etc/docker/daemon.json,如果没有配置过镜像该文件默认是不存的,在其中增加如下内容:
hadoop@master:sudo touch /etc/docker/daemon.json
hadoop@master:sudo vim /etc/docker/daemon.json
#加入以下内容,并保存 ESC -> : -> wq!
{
"registry-mirrors": ["https://y0qd3iq.mirror.aliyuncs.com"]
}
其中的URL就是指定的镜像源,可以将其设置为上面说的四个镜像源中的任何一个。
然后重启Docker服务:
hadoop@master:sudo systemctl restart docker.service
然后通过以下命令查看配置是否生效:
hadoop@master:docker info|grep Mirrors -A 1
可以看到如下的输出:
hadoop@master:/etc/docker$ docker info|grep Mirrors -A 1
WARNING: No swap limit support
Registry Mirrors:
https://y0qd3iq.mirror.aliyuncs.com/
#另一种验证docker镜像源是否更改成功的办法,因为前面已经把hadoop用户加入到docker组,所以这里可以直接用docker,而不用加sudo了
hadoop@master:/etc/docker$ docker info
Operating System: Ubuntu 18.04.5 LTS
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 7.526GiB
Name: master
ID: 5WNN:EZRK:ZE5Y:ZJRZ:QHN6:KY2Q:QXYQ:LZG3:BI6U:FZIW:7HA6:KY3Y
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://y0qd3iq.mirror.aliyuncs.com/
Live Restore Enabled: false
WARNING: No swap limit support
就表示镜像配置成功,然后再执行docker pull操作,就会很快了。
参考链接:https://blog.csdn.net/fenglibing/article/details/92090925
另一种更改docker镜像源的方法:
1.4 补充
- 启动docker service
hadoop@master:sudo systemctl enable docker
hadoop@master:sudo systemctl start docker
hadoop@master:sudo systemctl status docker
2. 安装K8S
2.1 安装kubeadm,kubelet和kubectl
阿里源 安装 kubelet kubeadm kubectl (master和node都需要)
# 安装依赖
hadoop@master:sudo apt-get update && apt-get install -y apt-transport-https
# 加载key
hadoop@master:sudo curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
# 添加源
hadoop@master:sudo touch /etc/apt/sources.list.d/kubernetes.list
加入下面这句话,并保存退出
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
# 安装
hadoop@master:sudo apt-get update
hadoop@master:sudo apt-get install -y kubelet kubeadm kubectl
关闭swap(交换区)和防火墙,否则会启动失败
sudo swapoff -a
上面命令是临时关闭交换区(立即生效),我们还需要永久关闭交换区,
vim /etc/fstab
打开fstab文件,注释掉有swap的那一行,然后保存
修改cgroupfs,否则会报错
打开如下文件
sudo vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
增加--cgroup-driver=cgroupfs
重启kubelet
hadoop@master:sudo systemctl daemon-reload
hadoop@master:sudo systemctl restart kubelet
2.2 部署Kubernetes Master
在master节点执行
在master节点执行init
hadoop@master:kubeadm init --apiserver-advertise-address=172.28.51.190 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.20.5 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16
# pod-network-cidr是指配置节点中的pod的可用IP地址,此为内部IP
# apiserver-advertise-address 为master的IP地址
# kubernetes-version 通过kubectl version 可以查看到
由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。
在master节点初始化后,会出现下图所示,记得把红线内的内容先复制下来,这个不可照搬我的,每个人都不一样
使用kubectl工具:
hadoop@master:mkdir -p $HOME/.kube
hadoop@master:sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
hadoop@master:sudo chown $(id -u):$(id -g) $HOME/.kube/config
2.3 加入Kubernetes Node
向集群添加新节点,将提示给的最后一行join命令记下来,然后在各个node节点执行。
hadoop@node:sudo kubeadm join 172.28.51.190:6443 --token mjunhb.z6022bi50abpb3f6 --discovery-token-ca-cert-hash sha256:dbc7b12a9862097bb99288acab06c539eaeed62e179d2f10df20b471be5346d4
2.4 部署CNI网络插件
安装flannel,这是k8s必须的一个插件,国外源无法直接下载(master和node都需要),sed命令修改为docker hub镜像仓库。
hadoop@master:wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 修改docker镜像地址
hadoop@master:sed 's/quay.io\/coreos/registry.cn-beijing.aliyuncs.com\/imcto/g'
# 安装flannel
hadoop@master:sudo kubectl apply -f kube-flannel.yml
如果实在下载不了,按照我下一篇博客,解决部署K8S集群时flannel无法下载问题进行操作。
2.5 验证,测试集群
查看node是否已经加入到k8s集群中(需要等一段时间才能ready):
#Running状态
hadoop@master:$ kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
kube-flannel-ds-amd64-2pc95 1/1 Running 0 72s
#Ready状态
hadoop@master:$ kubectl get nods
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 88m v1.20.5
slave1 Ready <none> 14m v1.20.5
slave2 Ready <none> 14m v1.20.5
slave3 Ready <none> 14m v1.20.5
在Kubernetes集群中创建一个pod,验证是否正常运行:
hadoop@master:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 12h v1.20.5
slave1 Ready <none> 11h v1.20.5
slave2 Ready <none> 11h v1.20.5
slave3 Ready <none> 11h v1.20.5
hadoop@master:~$ kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-7f89b7bc75-j6mtv 1/1 Running 1 12h
coredns-7f89b7bc75-lc96q 1/1 Running 1 12h
etcd-master 1/1 Running 1 12h
kube-apiserver-master 1/1 Running 1 12h
kube-controller-manager-master 1/1 Running 1 11h
kube-flannel-ds-amd64-6d24v 1/1 Running 1 10h
kube-flannel-ds-amd64-b7jzx 1/1 Running 1 10h
kube-flannel-ds-amd64-gkt8h 1/1 Running 1 10h
kube-flannel-ds-amd64-zg6dl 1/1 Running 1 10h
kube-proxy-4pgl9 1/1 Running 1 12h
kube-proxy-8v8d7 1/1 Running 1 11h
kube-proxy-rjfx2 1/1 Running 1 11h
kube-proxy-zx2kr 1/1 Running 1 11h
kube-scheduler-master 1/1 Running 1 11h
hadoop@master:~$ kubectl create deployment nginx --image=nginx
deployment.apps/nginx created
hadoop@master:~$ kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed
hadoop@master:~$ kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-6799fc88d8-w9zmt 1/1 Running 0 69s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 12h
service/nginx NodePort 10.1.234.254 <none> 80:32568/TCP 17s
访问地址:http://NodeIP:Port
我用的是阿里云服务器,其中,这里输入的是node节点而不是master节点的公网IP,port是上图中红线处
参考链接:https://zhuanlan.zhihu.com/p/148386967?utm_source=wechat_timeline
2.6 补充
拷贝配置文件到每个node:
scp /etc/kubernetes/admin.conf ubuntu@node1:/home/ubuntu/
scp /home/ubuntu/k8s/kube-flannel.yml ubuntu@node1:/home/ubuntu/
重启kubelet
hadoop@master:sudo systemctl enable kubelet
hadoop@master:sudo systemctl start kubelet
查看节点状态
kubectl get nodes
查看k8s版本
kubectl version