安装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镜像源的方法:

https://blog.csdn.net/u011483658/article/details/95012034?utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-1.control&dist_request_id=1328740.40197.16170147553043935&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-1.control

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
posted @ 2021-03-30 09:42  wanpi  阅读(909)  评论(0编辑  收藏  举报