正文
一、安装
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"