腾空节点
kubectl drain <node-to-drain> --ignore-daemonsets
停止 Docker
systemctl stop kubelet
systemctl disable docker.service --now
安装 Containerd
yum install containerd
配置 containerd:
生成配置文件
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
修改配置文件详见
vi /etc/containerd/config.toml
修改SystemdCgroup配置
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
重载沙箱(pause)镜像(k8s.gcr.io无法访问 必须重置国内镜像)
[plugins."io.containerd.grpc.v1.cri"]
sandbox_image = "xxx.xxx.xxx/k8s.gcr.io/pause:3.6"
私有仓库配置
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."xxx.xxx.xxx.xxx"]
endpoint = ["http://xxx.xxx.xxx.xxx"]
重启 containerd:
sudo systemctl enable containerd
sudo systemctl restart containerd
配置 kubelet 使用 containerd 作为其容器运行时
编辑文件 /var/lib/kubelet/kubeadm-flags.env,将 containerd 运行时添加到标志中:
vi /var/lib/kubelet/kubeadm-flags.env
--container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock
kubectl 配置节点属性
kubectl edit no <node-name>
metadata:
annotations:
kubeadm.alpha.kubernetes.io/cri-socket: unix:///run/containerd/containerd.sock
重启 kubelet
systemctl start kubelet
验证节点处于健康状态
kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
node-03 Ready,SchedulingDisabled control-plane,master 480d v1.21.12 172.16.1.73 <none> CentOS Linux 7 (Core) 3.10.0-1160.62.1.el7.x86_64 containerd://1.6.8
移除 Docker Engine
sudo yum remove docker-ce docker-ce-cli
恢复调度