天天看點

kubernetes環境從docker遷移到containerd

     ▲ 點選上方"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