问题描述
在尝试使用私有的Docker仓库和containerd运行时设置k8s 1.25.4时遇到了问题。他按照文档中的说明,在/etc/containerd/config.toml
中覆盖了沙箱镜像。然后重启了containerd服务和机器。但是,在使用kubeadm初始化k8s集群时(kubeadm init --config cluster-config.yml
),初始化失败,并且journalctl -exu containerd
显示了以下输出:
Dec 14 11:04:00 myhost containerd[866]: time="2022-12-14T11:04:00.911273848Z" level=info msg="trying next host" error="failed to do request: Head \"https://registry.k8s.io/v2/pause/manifests/3.6\": dial tcp 34.107.244.51:443: i/o timeout" host=registry.k8s.io
Dec 14 11:04:00 myhost containerd[866]: time="2022-12-14T11:04:00.927516068Z" level=error msg="RunPodSandbox for &PodSandboxMetadata{Name:myhost,Uid:c4ebaf5ac4e21e7bc99cda96857ec39e,Namespace:kube-system,Attempt:0,} failed, error" error="failed to get sandbox image \"registry.k8s.io/pause:3.6\": failed to pull image \"registry.k8s.io/pause:3.6\": failed to pull and unpack image \"registry.k8s.io/pause:3.6\": failed to resolve reference \"registry.k8s.io/pause:3.6\": failed to do request: Head \"https://registry.k8s.io/v2/pause/manifests/3.6\": dial tcp 34.107.244.51:443: i/o timeout"
这表明沙箱镜像的覆盖失败了。cluster-config.yml
配置为使用私有仓库,并且kubeadm可以成功拉取k8s镜像(包括沙箱镜像):
...imageRepository: my-private-registry:5000...
请问我在这里漏掉了什么?
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
根据用户的评论,尝试在/etc/containerd/config.toml
中添加version = 2
。
以下是具体的步骤:
1. 打开终端,使用文本编辑器打开/etc/containerd/config.toml
文件。
2. 在文件的开头添加以下行:
version = 2
3. 保存并关闭文件。
4. 重启containerd服务:
sudo systemctl restart containerd
5. 重启机器:
sudo reboot
尝试使用kubeadm初始化k8s集群,看看问题是否解决。
方案2
如果方案1没有解决问题,可以尝试更新containerd版本。可能存在与containerd版本不兼容的问题。
以下是更新containerd版本的步骤:
1. 打开终端,运行以下命令卸载旧版本的containerd:
sudo apt-get remove containerd
2. 安装新版本的containerd。可以从containerd的官方网站或适用于Ubuntu的软件源中获取最新版本的containerd。
3. 配置containerd。根据新版本的containerd的文档,按照需要进行配置。
4. 重启containerd服务:
sudo systemctl restart containerd
5. 重启机器:
sudo reboot
尝试使用kubeadm初始化k8s集群,看看问题是否解决。
如果以上解决方案都没有解决问题,请检查网络连接是否正常,并确保私有仓库的地址和端口正确。