当前位置: 首页 > news >正文

【运维实战】解决 K8s 节点无法拉取 pause:3.6 镜像导致 API Server 启动失败的问题

目录

【运维实战】解决 K8s 节点无法拉取 pause:3.6 镜像导致 API Server 启动失败的问题

🔍 问题分析

✅ 解决方案:替代拉取方式导入 pause 镜像

Step 1. 从私有仓库拉取 pause 镜像

Step 2. 重新打 tag 为 Kubernetes 默认命名

Step 3. 导出镜像为 tar 包

Step 4. 拷贝镜像到目标节点

Step 5. 在目标节点导入镜像到 containerd 的 k8s.io 命名空间

Step 6. 验证镜像是否导入成功

📌 注意事项

📎 总结

【运维实战】解决 K8s 节点无法拉取 pause:3.6 镜像导致 API Server 启动失败的问题

在使用 Kubernetes 部署集群过程中,控制面组件 kube-apiserver 启动失败,多个节点处于 NotReady 状态。查看 kubelet 日志发现如下错误:

failed to get sandbox image "registry.k8s.io/pause:3.6": failed to pull image ...
dial tcp 173.194.202.82:443: i/o timeout

这说明节点无法从默认的 registry.k8s.io 拉取 pause:3.6 镜像,直接导致 Pod Sandbox 创建失败,从而影响整个控制平面组件运行。


🔍 问题分析

Kubernetes 默认使用 pause:3.6 镜像作为 Pod 的基础运行环境容器(Pod Sandbox),当节点访问公网受限或 GFW 屏蔽时,将无法拉取该镜像,导致所有 Pod 无法启动。

尽管可以通过修改 kubeletsandboxImage 参数绕过此问题,但某些环境中限制修改 kubelet 配置或容器运行时行为。因此本文采用 镜像替换 + 标准命名空间导入 的方式解决此问题。


✅ 解决方案:替代拉取方式导入 pause 镜像

我们通过手动拉取私有仓库中的 pause 镜像,并转换为标准命名,导入 containerd 默认命名空间,解决拉取失败问题。

Step 1. 从私有仓库拉取 pause 镜像

docker pull 10.130.135.145:30500/pause:3.6

Step 2. 重新打 tag 为 Kubernetes 默认命名

docker tag 10.130.135.145:30500/pause:3.6 registry.k8s.io/pause:3.6

Step 3. 导出镜像为 tar 包

docker save -o pause-3.6.tar registry.k8s.io/pause:3.6

Step 4. 拷贝镜像到目标节点

scp pause-3.6.tar root@<node-ip>:/tmp/

Step 5. 在目标节点导入镜像到 containerd 的 k8s.io 命名空间

sudo ctr -n k8s.io images import /tmp/pause-3.6.tar

Step 6. 验证镜像是否导入成功

sudo ctr -n k8s.io images ls | grep "pause:3.6"

输出如下表示成功:

registry.k8s.io/pause:3.6   ...   linux/amd64

📌 注意事项

  • 若使用 containerd,请确保命令中使用了 -n k8s.io 命名空间;

  • 若使用的是 crictl 工具,也可使用 crictl pull registry.k8s.io/pause:3.6 进行验证;

  • pause 镜像是所有 Pod 的基础容器,缺失将影响整个集群功能;

  • 建议在所有节点均完成此操作。


📎 总结

通过将 pause:3.6 镜像从私有仓库拉取并导入到 Kubernetes 标准命名,成功绕过公网拉取失败问题。这种方法无需修改 kubelet 配置,适用于限制场景,是生产环境中一个高效可靠的实战技巧。

http://www.lryc.cn/news/583910.html

相关文章:

  • Spring boot整合dubbo+zookeeper
  • IDEA 安装AI代码助手GitHub Copilot和简单使用体验
  • 【科研绘图系列】R语言探索生物多样性与地理分布的可视化之旅
  • Jekyll + Chirpy + GitHub Pages 搭建博客
  • 微服务架构的演进:迈向云原生——Java技术栈的实践之路
  • 基于springboot的美食文化和旅游推广系统
  • 通过 .NET Aspire 使用本地 AI 模型
  • kotlin中集合的用法
  • 《信号与系统》学习笔记——第八章(补充部分)
  • Java多线程:核心技术与实战指南
  • 前端本地化存储数据方案详解
  • React 实现五子棋人机对战小游戏
  • 【TCP/IP】11. IP 组播
  • mvn能只test单独一个文件吗
  • Unity插件——ABC详解
  • pyqt-3(QSS、读取带qrc的ui、信号与槽函数)
  • 从面向对象编程语言PHP转到Go时的一些疑惑?
  • 文心一言4.5开源部署指南及文学领域测评
  • Go语言教程-变量、常量、命名规则
  • GO启动一个视频下载接口 前端可以边下边放
  • Django中序列化与反序列化
  • 实现源图像到目标图像的转换(提示:RGB值互换,新R=旧G,新G=旧B,新B=旧R)
  • Redis数据库基础
  • JSZip 使用详解
  • vue3 td 标签优化时间显示
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | DoubleVerticalSlider(双垂直滑块)
  • JavaScript 树形菜单总结
  • SoC程序如何使用单例模式运行
  • vue3 el-table 列汉字 排序时排除 null 或空字符串的值
  • 第二章-AIGC入门-AI视频生成:几款实用AI视频生成工具全解析(7/36)