Kubernetes集羣容器引擎切換

本文介紹如何將Kubernetes羣集中的容器引擎從docker切換爲containerd node

官方文檔:https://kubernetes.io/zh/docs/setup/production-environment/container-runtimes/#containerdlinux

環境

  • OS: CentOS 7.8
  • Container runtime: Docker CE 19.03.9
  • Kubernetes: v1.20

一、查看Kubernetes集羣中當前使用的容器引擎

Kubernetes集羣容器引擎切換

二、將k8s-node02這個node的容器引擎從docker切換爲containerd

二、1 將該node標記爲不可被調度,而且驅逐該node上的pod資源

# 一、查看該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節點已經不可被調度了,接下來開始切換容器引擎

2.二、切換容器引擎

2.2.1 配置先決條件

# 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

2.2.2 安裝containerd

# 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

2.2.3 修改配置文件

# 一、搜索關鍵字"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

2.2.4 配置kubelet使用containerd

# vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock --cgroup-driver=systemd"

# systemctl restart kubelet

三、驗證容器引擎是否成功切換爲containerd

Kubernetes集羣容器引擎切換

從上圖能夠信息結果中,能夠發現k8s-node02這個節點當前使用的容器引擎爲containerd,至此,成功地將該節點使用的容器引擎從docker切換爲containerd,接下來。取消該節點不可被調度的標記,使其能夠被正常調度。 web

四、取消k8s-node02節點不可被調度標記

# 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

Kubernetes集羣容器引擎切換

相關文章
相關標籤/搜索