首先,查看k8s和docker的版本对应关系
从版本对应关系可以看到我们要安装哪个版本的docker和k8s,本案例,我安装的docker是20.10.24 , k8s安装的是 1.22.17。注意,版本要对应,否则 执行 kubeadm init 的时候会报错!
1、修改节点主机名
hostnamectl --static set-hostname k8s-master
修改hosts
vim /etc/hosts
添加的内容如下 :
- 192.168.0.107 k8s-master
- 192.168.0.106 k8s-node1
- 192.168.0.108 k8s-node2
2、关闭swap分区
临时关闭
swapoff -a
永久关闭:
sed -ri 's/.*swap.*/#&/' /etc/fstab
3、关闭防火墙
ufw disable
4、安装docker
1)首先删除电脑之前安装的docker
apt-get purge docker-buildx-plugin docker-ce docker-ce-cli docker-ce-rootless-extras docker-compose-plugin containerd.io
2)执行以下命令安装docker
- apt update
-
- apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
-
- sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
-
- add-apt-repository \
- "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
- $(lsb_release -cs) \
- stable"
-
- apt update
-
- apt install -y docker-ce=5:20.10.24~3-0~ubuntu-focal docker-ce-cli=5:20.10.24~3-0~ubuntu-focal
-
- docker version
切换docker下载源为国内镜像站 以及 修改cgroups
vim /etc/docker/daemon.json
打开后输入以下内容:
- {
- "registry-mirrors": ["https://zfzbet67.mirror.aliyuncs.com"],
- "exec-opts": [ "native.cgroupdriver=systemd" ]
- }
重启docker服务
service docker restart
5、安装k8s
- apt update && apt install apt-transport-https
-
- curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
-
- add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"
-
- apt-cache madison kubelet kubectl kubeadm |grep '1.22.17-00'
-
- apt install -y kubelet=1.22.17-00 kubectl=1.22.17-00 kubeadm=1.22.17-00
配置禁用 swap
vim /etc/default/kubelet
添加以下内容:
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
重启服务:
systemctl daemon-reload && systemctl restart kubelet
默认是pause:3.7 在kubeadm init 初始化会爆粗,所以需要pause:3.6
- ctr -n k8s.io image pull registry.aliyuncs.com/google_containers/pause:3.6
- ctr -n k8s.io image tag registry.aliyuncs.com/google_containers/pause:3.6 k8s.gcr.io/pause:3.6
6、添加master节点和node节点
注意 master节点和 node节点都是需要 执行 1-5一遍的
1)master 节点初始化节点
- kubeadm init \
- --kubernetes-version=v1.22.17 \
- --image-repository registry.aliyuncs.com/google_containers \
- --pod-network-cidr=10.244.0.0/16 \
- --ignore-preflight-errors=Swap
当你看到如下字样是,就说明初始化成功了,请把最后那行以kubeadm join
开头的命令复制下来,之后安装工作节点时要用到的,如果你不慎遗失了该命令,可以在master
节点上使用kubeadm token create --print-join-command
命令来重新生成一条。
接着,执行以下 命令:
- mkdir -p $HOME/.kube
- sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- sudo chown $(id -u):$(id -g) $HOME/.kube/config
部署flannel网络
flannel
是什么?它是一个专门为 k8s 设置的网络规划服务,可以让集群中的不同节点主机创建的 docker 容器都具有全集群唯一的虚拟IP地址。想要部署flannel
的话直接执行下述命令即可:
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
输出如下内容即为安装完成:
- clusterrole.rbac.authorization.k8s.io/flannel created
- clusterrolebinding.rbac.authorization.k8s.io/flannel created
- serviceaccount/flannel created
- configmap/kube-flannel-cfg created
- daemonset.extensions/kube-flannel-ds-amd64 created
- daemonset.extensions/kube-flannel-ds-arm64 created
- daemonset.extensions/kube-flannel-ds-arm created
- daemonset.extensions/kube-flannel-ds-ppc64le created
- daemonset.extensions/kube-flannel-ds-s390x created
查看namespace为 kube-flannel的pod的运行状态,如果都是 Running状态,则flannel网络就安装成功,如下图:
kubectl get pods --all-namespaces
或者 kubectl get pods -n kube-flannel 查看kube-flannel命名空间的pod,如下图:
kubectl get pods -n kube-flannel
2)添加node到集群
将master的/etc/kubernetes/admin.conf拷贝到node上 (拷贝完成需要到node节点进行检查)
scp -r -P22 /etc/kubernetes/admin.conf zengyanhui@192.168.0.106:/etc/kubernetes/
集群初始化时打印出来的命令,在所有node节点上输入命令:
- kubeadm join 192.168.0.107:6443 --token 5eyukl.0wjrcu9c9tvg5273 \
- --discovery-token-ca-cert-hash sha256:c6eb9ffcdbf458c9d40df9d8b0258a254db16da64f8feb9dc1a947165729e3fb
如果执行 kubectl get nodes 报The connection to the server localhost:8080 was refused - did you specify the right host or port 则在在master和node都执行以下命令:
- echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
-
- source /etc/profile
kubectl get nodes
7、注意事项
如果在kubeadm init的时候报错 ,则 清理上次执行产生的数据
kubeadm reset