▲ 點選上方"DevOps和k8s全棧技術"關注公衆号
1、實驗環境
本實驗共兩台節點,xianchaomaster1是master,xianchaonode1是worker
kubernetes版本是v1.23.1
系統版本是 centos7.6
具體如下:
[root@xianchaomaster1 ~]# kubectl get nodes -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
xianchaomaster1 Ready control-plane,master 52d v1.23.1 192.168.40.180 <none> CentOS Linux 7 (Core) 3.10.0-1160.11.1.el7.x86_64 docker://20.10.16
xianchaonode1 Ready <none> 52d v1.23.1 192.168.40.181 <none> CentOS Linux 7 (Core) 3.10.0-1160.11.1.el7.x86_64 docker://20.10.16
[root@xianchaomaster1 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
wordpress-54fc87d546-gqvc2 1/1 Running 0 18d
wordpress-mysql-f59cd675f-xkwsp 1/1 Running 0 18d
2、遷移master
(1)對k8s控制節點xianchaomaster1進行drain
[root@xianchaomaster1 ~]# kubectl drain xianchaomaster1--delete-emptydir-data --force --ignore-daemonsets
備注:
drain:驅逐節點
首先,驅逐node上的pod,其他節點重新建立,接着,将節點調為** SchedulingDisabled**
drain的參數
--force
當一些pod不是經ReplicationController, ReplicaSet, Job, DaemonSet 或者StatefulSet 管理的時候,就需要用--force來強制執行 (例如:kube-proxy)
--ignore-daemonsets
驅逐daemonset管理的pod
--delete-emptydir-data
如果有mount local volumn的pod,會強制驅逐pod
(2)關閉并解除安裝Docker
[root@xianchaomaster1 ~]# systemctl disable docker --now
[root@xianchaomaster1 ~]# yum remove docker-ce docker-ce-cli -y
(3)安裝并配置containerd
[root@xianchaomaster1 ~]# yum install containerd.io cri-tools -y
[root@xianchaomaster1 ~]# crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock
生成配置檔案
[root@xianchaomaster1 ~]# containerd config default > /etc/containerd/config.toml
使用vim編輯器打開/etc/containerd/config.toml
第一步:搜素mirrors,把
改成:
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://rsbud4vc.mirror.aliyuncs.com"]
第二步:搜尋sandbox,把
改成:sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.7"
第三步:搜尋SystemdCgroup,把
改成:
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
儲存退出
(4)重新開機containerd服務
[root@xianchaomaster1 ~]# systemctl enable containerd ; systemctl restart containerd
3、配置并啟動kubelet
設定kubelet啟動參數
[root@xianchaomaster1 ~]# vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--container-runtime=remote --runtime-request-timeout=15m --container-runtime-endpoint=unix:///run/containerd/containerd.sock"
重新開機kubelet服務
[root@xianchaomaster1 ~]# systemctl restart kubelet
4、對master節點進行uncordon
[root@xianchaomaster1 ~]# kubectl uncordon xianchaomaster1
5、驗證是否把容器運作時由docker遷移到containerd
[root@xianchaomaster1 ~]# kubectl get nodes -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
xianchaomaster1 Ready control-plane,master 52d v1.23.1 192.168.40.180 <none> CentOS Linux 7 (Core) 3.10.0-1160.11.1.el7.x86_64 containerd://1.6.6
xianchaonode1 Ready <none> 52d v1.23.1 192.168.40.181 <none> CentOS Linux 7 (Core) 3.10.0-1160.11.1.el7.x86_64 docker://20.10.16
4、遷移work節點
(1)對k8s工作節點xianchaonode1進行drain
[root@xianchaomaster1 ~]# kubectl drain xianchaonode1 --delete-emptydir-data --force --ignore-daemonsets
(2)關閉并解除安裝Docker
[root@xianchaonode1 ~]# systemctl disable docker --now
[root@ xianchaonode1 ~]# yum remove docker-ce docker-ce-cli -y
(3)安裝并配置containerd
[root@ xianchaonode1 ~]# yum install containerd.io cri-tools -y
[root@ xianchaonode1 ~]# crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock
生成配置檔案
[root@ xianchaonode1 ~]# containerd config default > /etc/containerd/config.toml
使用vim編輯器打開/etc/containerd/config.toml
第一步:搜素mirrors,把
改成:
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://rsbud4vc.mirror.aliyuncs.com"]
第二步:搜尋sandbox,把
改成:sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.7"
第三步:搜尋SystemdCgroup,把
改成:
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
儲存退出
(4)重新開機containerd服務
[root@ xianchaonode1 ~]# systemctl enable containerd ; systemctl restart containerd
3、配置并啟動kubelet
設定kubelet啟動參數
[root@ xianchaonode1 ~]# vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--container-runtime=remote --runtime-request-timeout=15m --container-runtime-endpoint=unix:///run/containerd/containerd.sock"
重新開機kubelet服務
[root@ xianchaonode1 ~]# systemctl restart kubelet
4、對master節點進行uncordon
[root@ xianchaonode1 ~]# kubectl uncordon xianchaonode1
5、驗證是否把容器運作時由docker遷移到containerd
[root@xianchaomaster1 ~]# kubectl get nodes -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
xianchaomaster1 Ready control-plane,master 52d v1.23.1 192.168.40.180 <none> CentOS Linux 7 (Core) 3.10.0-1160.11.1.el7.x86_64 containerd://1.6.6