用 ctr 将 Docker 镜像导入 K8s 集群并使用本地镜像
2026/8/30 15:17:08 网站建设 项目流程

文章目录

  • 用 ctr 将 Docker 镜像导入 K8s 集群并使用本地镜像
    • 一、核心原理
    • 二、第一步:在 master 上用 Docker 导出镜像
      • 2.1 导出两个镜像(基础镜像 + 构建好的 httpd 镜像)
      • 2.2 (可选)合并为一个 tar 包
    • 三、第二步:分发到所有节点
      • 3.1 用 scp 分发到两个 node
      • 3.2 master 自己也导入(虽然 master 有污点不调度,但以防万一)
    • 四、第三步:在每个节点用 ctr 导入到 containerd
      • 4.1 在 master 上导入
      • 4.2 在 node01 上导入
      • 4.3 在 node02 上导入
      • 4.4 一键批量导入脚本(推荐)
    • 五、第四步:验证 containerd 中的镜像
      • 5.1 查看 k8s.io namespace 下的所有镜像
      • 5.2 查看镜像详细信息
      • 5.3 用 crictl 验证(更贴近 K8s 视角)
    • 六、第五步:修改 Deployment 使用本地镜像
      • 6.1 关键配置:imagePullPolicy
      • 6.2 最终的 Deployment YAML
      • 6.3 创建并验证
    • 七、第六步:完整测试(Service + 访问)
      • 7.1 创建 Service
      • 7.2 测试访问
    • 八、常见问题排查
      • Q1:ctr import 成功,但 Pod 还是 ImagePullBackOff?
      • Q2:ctr: command not found?
      • Q3:导入后镜像名变成了 docker.io/library/...?
      • Q4:如何删除 containerd 里的镜像?
      • Q5:如何确认 kubelet 用的是 containerd?
    • 九、一键完整脚本(从构建到部署)
    • 十、总结:3 个关键点

用 ctr 将 Docker 镜像导入 K8s 集群并使用本地镜像

你的集群是v1.24.17 + containerddocker build的镜像存在 Docker 的存储里,containerd(ctr)看不到,必须导出再导入。下面是完整流程。


一、核心原理

Docker 守护进程(master 上) containerd(kubelet 用的) ┌─────────────────────┐ ┌─────────────────────┐ │ centos-httpd:v1 │ docker save │ │ │ centos:7.7.1908 │ ──────────► │ tar 包 │ │ (docker 的存储) │ │ │ └─────────────────────┘ └──────────┬──────────┘ │ ctr import ▼ ┌──────────

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询