一、镜像操作流程
1. 查看有哪些镜像
- 命令:
ctr -n k8s.io images ls
- 说明:列出
containerd
在k8s.io
命名空间下所有的镜像,确认是否有目标镜像(如docker.io/rancher/rancher-agent:v2.8.0
)。
2. 导出镜像
- 命令:
ctr -n k8s.io images export rancher-agent-v2.8.0.tar docker.io/rancher/rancher-agent:v2.8.0
- 说明:将镜像
docker.io/rancher/rancher-agent:v2.8.0
导出为文件rancher-agent-v2.8.0.tar
。执行后可以用ls -lh rancher-agent-v2.8.0.tar
检查文件是否存在。
3. 传输镜像到其他服务器
- 命令:
scp rancher-agent-v2.8.0.tar root@192.168.0.103:/root
- 说明:通过
scp
将导出的镜像文件传输到目标服务器(IP 为192.168.0.103
)的/root
目录。确保网络可达且目标服务器有足够空间。
4. 导入镜像
- 命令(在目标服务器
192.168.0.103
上执行):ctr -n k8s.io images import /root/rancher-agent-v2.8.0.tar
- 说明:在目标服务器上将镜像文件导入
containerd
。完成后可以用ctr -n k8s.io images ls
验证镜像是否正确导入。
二、验证 containerd 配置
1. 检查配置文件
- 文件路径:
/etc/containerd/config.toml
- 操作:
- 编辑文件:
vi /etc/containerd/config.toml
- 检查是否包含镜像仓库配置。
- 编辑文件:
2. 配置镜像仓库(可选)
- 示例配置(如果需要添加 Docker Hub 镜像仓库):
[plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] endpoint = ["https://registry-1.docker.io"]
- 说明:确保
containerd
可以访问docker.io
,如有网络限制,可在此添加镜像加速器地址。
3. 配置私有仓库认证(可选)
- 示例配置(如果 Rancher 使用私有仓库):
[plugins."io.containerd.grpc.v1.cri".registry.configs] [plugins."io.containerd.grpc.v1.cri".registry.configs."registry.example.com".auth] username = "your-username" password = "your-password"
- 说明:替换
registry.example.com
为实际私有仓库地址,并填入正确的用户名和密码。
4. 重启 containerd
- 命令:
systemctl restart containerd
- 说明:修改配置后重启
containerd
使配置生效。可以用systemctl status containerd
检查服务状态。
执行顺序建议
- 先完成镜像操作流程(步骤 1-4),解决当前
ImagePullBackOff
问题。 - 再验证 containerd 配置,确保未来镜像拉取不会再次失败(尤其是有网络或认证限制的情况下)。
验证结果
- 镜像导入后,检查目标服务器上的 Pod 状态:
kubectl get pod -n cattle-system -o wide
- 确认 Deployment 是否恢复正常:
kubectl get deployment cattle-cluster-agent -n cattle-system
如果有任何步骤失败或需要进一步调试,请提供相关输出,我会继续协助你!