背景
由于k8s从1.24版本开始已经不支持常用的docker的容器运行时,虽说目前使用的是1.22版本,但为了以后切换的时候不至于太被动,自己提前踩一下坑还是有必要的,下面开始操作过程
驱逐节点上的pod
kubectl drain k8s-node1-10.10.10.234 --ignore-daemonsets --delete-emptydir-data
停止节点上的docker服务和kubelet服务
systemctl stop kubelet
systemctl disable docker.service --now
安装并配置containerd
由于containerd在docker-ce安装的时候是一并安装的,这里就不再安装了,只是生成配置
mkdir -p /etc/containerd
containerd config default | tee /etc/containerd/config.toml
systemctl restart containerd
修改Kubelet的容器运行时
vi /var/lib/kubelet/kubeadm-flags.env
修改成
KUBELET_KUBEADM_ARGS="--network-plugin=cni --container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock --pod-infra-container-image=k8s.gcr.io/pause:3.5"
修改节点的容器运行时
kubectl edit node k8s-node1-10.10.10.234
将
/var/run/dockershim.sock
修改为
unix:///run/containerd/containerd.sockc
重启kubelet
systemctl restart kubelet
验证是否变更
查看节点状态是否正常
查看运行时是否变更
踩到的坑如下
1、如果不能科学上网,需要修改containerd配置文件的sandbox_image地址为
sandbox_image = "registry.aliyuncs.com/k8sxio/pause:3.5"
否则查看/var/log/message会一直提示要下载镜像k8s.gcr.io/pause:3.5
2、需要修改containerd的私有仓库地址,否则会跟docker一样提示https问题,如下:
在这一段
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://registry-1.docker.io"]
底下添加私有仓库地址
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."harbor.china-harmony.com"]
endpoint = ["http://harbor.china-harmony.com"]
[plugins."io.containerd.grpc.v1.cri".registry.configs]
[plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.china-harmony.com".tls]
insecure_skip_verify = true
3、在修改master容器运行时,必须先使用kubectl edit node修改容器里面的运行时,再做其他的操作,否则如果先停止Kubelet后master的api-server已经连接不上了
4、需要使用ctr重新导入原来k8s.gcr.io下载的镜像
998 docker save -o kube-apiserver.tar k8s.gcr.io/kube-apiserver:v1.22.2
1000 docker save -o kube-controller-manager.tar k8s.gcr.io/kube-controller-manager:v1.22.2
1002 docker save -o kube-scheduler.tar k8s.gcr.io/kube-scheduler:v1.22.2
1004 docker save -o kube-proxy.tar k8s.gcr.io/kube-proxy:v1.22.2
1013 docker save -o etcd.tar k8s.gcr.io/etcd:3.5.0-0
1027 docker save -o coredns.tar k8s.gcr.io/coredns/coredns:v1.8.4
999 ctr -n k8s.io images import kube-apiserver.tar
1001 ctr -n k8s.io images import kube-controller-manager.tar
1003 ctr -n k8s.io images import kube-scheduler.tar
1005 ctr -n k8s.io images import kube-proxy.tar
1014 ctr -n k8s.io images import etcd.tar
1028 ctr -n k8s.io images import coredns.tar