从dockershim迁移到containerd – kubectl仍然显示docker运行时

59次阅读
没有评论

问题描述

正在按照文档中的指导进行操作,目标是将集群升级到1.24及更高版本。在运行kubectl get nodes -o wide命令时,期望看到运行时为’containerd’(参考链接),但实际上看到的是’docker://23.0.1’。其他节点显示的是’docker://1.13.1’,所以这算是一个改进吗?在节点上,我看到了许多/usr/bin/containerd-shim-runc-v2的实例,而在其他节点上,我看到的是/usr/bin/docker-containerd-shim-current,所以它们肯定是不同的。请问我错过了哪些步骤?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

步骤1

首先,检查kubelet的日志,可以使用以下命令:

journalctl -u kubelet

步骤2

根据我的经验,解决方法是在/etc/containerd/config.toml文件的插件部分中,将systemdcgroup设置为true。可以按照以下步骤进行操作:
1. 打开/etc/containerd/config.toml文件。
2. 找到[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]部分。
3. 将SystemdCgroup设置为true
以下是一个示例:

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true

步骤3

在修改配置文件后,需要重启containerd服务,可以使用以下命令:

systemctl restart containerd

步骤4

如果在日志中看到类似于”server http response to https client”的错误信息,说明containerd无法拉取镜像。解决方法是启用TLS跳过验证。可以按照以下步骤进行操作:
1. 打开/etc/containerd/config.toml文件。
2. 找到[plugins."io.containerd.grpc.v1.cri".registry.configs."<MASTERIP>:5000".tls]部分。
3. 将insecure_skip_verify设置为true
以下是一个示例:

[plugins."io.containerd.grpc.v1.cri".registry.configs."<MASTERIP>:5000".tls]
insecure_skip_verify = true

步骤5

如果还有一个重要的设置是将grpc.mirrors的端点设置为http。可以按照以下步骤进行操作:
1. 打开/etc/containerd/config.toml文件。
2. 找到[plugins."io.containerd.grpc.v1.cri".registry.mirrors."<MASTERIP>:5000"]部分。
3. 将endpoint设置为["http://<MASTERIP>:5000"]
以下是一个示例:

[plugins."io.containerd.grpc.v1.cri".registry.mirrors."<MASTERIP>:5000"]
endpoint = ["http://<MASTERIP>:5000"]

请注意,这两个步骤中的<MASTERIP>应替换为实际的主机IP地址。

步骤6

完成上述步骤后,重新运行kubectl get nodes -o wide命令,应该能够看到CRI为containerd的结果。

请注意,这些解决方案可能因版本差异而有所不同。根据您的实际情况进行调整。

希望这些解决方案能帮助您解决问题!

正文完