正文
一、安装 containerd
kubernetes 1.24 版之后,就正式移除 dockershim 了,因此,这里第一步就是安装另一个容器运行时:containerd
二、基于过往教程调整
去年我写过一个系列的二进制文件方式安装 kubernetes 集群的文章,可以参考以往的文章,链接见文章末。
这次只说调整的地方:
- 原先安装的 docker 改成现在的 containerd.
- 原先安装 kubelet 时写的配置文件中,去除
--network-plugin
参数,加上--container-runtime
和--container-runtime-endpoint
参数,详细操作接着往下看。 - 原先添加cni 插件时拉取镜像和给镜像打标签的两条命令改一下:改成:
nerdctl -n k8s.io pull registry.aliyuncs.com/google_containers/pause:3.6
和nerdctl -n k8s.io tag registry.aliyuncs.com/google_containers/pause:3.6 registry.k8s.io/pause:3.6
- [2022-11-25更新] 原先配置 kubelet 的systemd 服务时用的
/usr/lib/systemd/system/kubelet.service
里的After=docker.service
改成containerd.service
三、验证
验证安装成功
可以看到,安装的 kubernetes版本是 v1.25.4
,节点数是 3
,还成功运行了一个 mysql pod。
附加1: 原先教程的 kubelet 报错
报错信息:
Nov 19 08:35:12 k8s_master kubelet[3041]: E1118 16:35:12.786441 3041 run.go:74] "command failed" err="failed to parse kubelet flag: unknown flag: --network-plugin" Nov 19 08:35:12 k8s_master systemd[1]: kubelet.service: main process exited, code=exited, status=1/FAILURE Nov 19 08:35:12 k8s_master systemd[1]: Unit kubelet.service entered failed state. Nov 19 08:35:12 k8s_master systemd[1]: kubelet.service failed.
报错截图
解决步骤
修改 /etc/kubernetes/kubelet
配置文件,将里面的 --network-plugin=cni \
一行删掉,增加两行 --container-runtime=remote \
和 --container-runtime-endpoint=unix:///run/containerd/containerd.sock \
下面是我用的最新的配置文件:
KUBELET_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig \ --config=/etc/kubernetes/kubelet.config \ --hostname-override=192.168.0.200 \ --container-runtime=remote \ --container-runtime-endpoint=unix:///run/containerd/containerd.sock \ --v=0"