准确--k8s离线导入镜像

发布于:2025-03-05 ⋅ 阅读:(19) ⋅ 点赞:(0)

一、镜像操作流程

1. 查看有哪些镜像
  • 命令
    ctr -n k8s.io images ls
    
  • 说明:列出 containerdk8s.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. 先完成镜像操作流程(步骤 1-4),解决当前 ImagePullBackOff 问题。
  2. 再验证 containerd 配置,确保未来镜像拉取不会再次失败(尤其是有网络或认证限制的情况下)。

验证结果

  • 镜像导入后,检查目标服务器上的 Pod 状态:
    kubectl get pod -n cattle-system -o wide
    
  • 确认 Deployment 是否恢复正常:
    kubectl get deployment cattle-cluster-agent -n cattle-system
    

如果有任何步骤失败或需要进一步调试,请提供相关输出,我会继续协助你!