本文介紹如何將Kubernetes羣集中的容器引擎從docker切換爲containerd node
官方文檔:https://kubernetes.io/zh/docs/setup/production-environment/container-runtimes/#containerdlinux
# 一、查看該node當前運行一個名爲web-96d5df5c8-s7lnq的pod # kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES web-96d5df5c8-s7lnq 1/1 Running 0 19m 10.244.58.195 k8s-node02 <none> <none> # 二、將該node標記爲不可被調度 # kubectl cordon k8s-node02 # 三、驅逐該node節點上的pod資源到集羣中的其它節點上去 # kubectl drain k8s-node02 --delete-local-data --force --ignore-daemonsets # 四、查看以前運行在該node上的pod被調度到了集羣中的哪一個節點 # kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES web-96d5df5c8-m8s7d 1/1 Running 0 57s 10.244.85.195 k8s-node01 <none> <none> 從以上信息來看能夠發現,以前k8s-node02節點上的pod資源被驅逐到了k8s-node01上運行 # 五、查看Kubernetes集羣中的node資源信息 # kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master01 Ready control-plane,master 4h20m v1.20.0 k8s-node01 Ready <none> 3h47m v1.20.0 k8s-node02 Ready,SchedulingDisabled <none> 3h47m v1.20.0 如上信息,k8s-node02節點已經不可被調度了,接下來開始切換容器引擎
# cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf overlay br_netfilter EOF # modprobe overlay # modprobe br_netfilter # 設置必需的 sysctl 參數,這些參數在從新啓動後仍然存在。 # cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF # sysctl --system
# yum install -y yum-utils device-mapper-persistent-data lvm2 # yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo # yum install -y containerd.io # mkdir -p /etc/containerd # containerd config default | sudo tee /etc/containerd/config.toml # systemctl restart containerd.service
# 一、搜索關鍵字"sandbox_image",將鏡像地址替換爲國內阿里雲的 57 sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.2" # 二、指定使用systemd做爲Cgroup的驅動程序 須要添加,這裏是在96後,也能夠搜素關鍵字"options",在其下一行添加以下內容 97 SystemdCgroup = true # 三、搜索關鍵字"endpoint",修改鏡像加速地址 106 endpoint = ["https://5uhltnnr.mirror.aliyuncs.com"] # 四、重啓containerd # systemctl restart containerd.service # systemctl enable containerd.service
# vim /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS="--container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock --cgroup-driver=systemd" # systemctl restart kubelet
從上圖能夠信息結果中,能夠發現k8s-node02這個節點當前使用的容器引擎爲containerd,至此,成功地將該節點使用的容器引擎從docker切換爲containerd,接下來。取消該節點不可被調度的標記,使其能夠被正常調度。 web
# kubectl uncordon k8s-node02 node/k8s-node02 uncordoned # kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master01 Ready control-plane,master 5h1m v1.20.0 k8s-node01 Ready <none> 4h28m v1.20.0 k8s-node02 Ready <none> 4h28m v1.20.4