Este artículo describe cómo cambiar el motor de contenedor en un clúster de Kubernetes de Docker a containerd
Documento oficial: https://kubernetes.io/zh/docs/setup/production-environment/container-runtimes/#containerd
alrededores
- SO: CentOS 7.8
- Tiempo de ejecución del contenedor: Docker CE 19.03.9
- Gobernadores: v1.20
1. Ver el motor de contenedores que se usa actualmente en el clúster de Kubernetes
2. Cambie el motor de contenedor del nodo k8s-node02 de Docker a containerd
2. 1 Marque el nodo como no programable y expulse los recursos del pod en el nodo
# 1、查看该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>
# 2、将该node标记为不可被调度
# kubectl cordon k8s-node02
# 3、驱逐该node节点上的pod资源到集群中的其它节点上去
# kubectl drain k8s-node02 --delete-local-data --force --ignore-daemonsets
# 4、查看之前运行在该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上运行
# 5、查看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, cambiar el motor del contenedor
2.2.1 Requisitos previos de configuración
# 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 Instalar contenedord
# 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 Modificar el archivo de configuración
# 1、搜索关键字"sandbox_image",将镜像地址替换为国内阿里云的
57 sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.2"
# 2、指定使用systemd作为Cgroup的驱动程序
需要添加,这里是在96后,也可以搜素关键字"options",在其下一行添加如下内容
97 SystemdCgroup = "true"
# 3、搜索关键字"endpoint",修改镜像加速地址
106 endpoint = ["https://5uhltnnr.mirror.aliyuncs.com"]
# 4、重启containerd
# systemctl restart containerd.service
2.2.4 Configurar kubelet para usar containerd
# vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock --cgroup-driver=systemd"
# systemctl status kubelet
3. Verifique si el motor del contenedor se cambió correctamente a contenedord
A partir de los resultados de la información en la figura anterior, se puede encontrar que el motor de contenedor que utiliza actualmente el nodo k8s-node02 está en contenedor. Hasta ahora, el motor de contenedor que utiliza el nodo se ha cambiado correctamente de la ventana acoplable a la de contenedor. Siguiente. Cancele la marca no programable del nodo para que pueda programarse normalmente.
4. Cancele la marca no programable del nodo 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