1. 课程导论:镜像拉取失败对 K8s 集群稳定性的影响、课程目标与受众、故障排查思维模型
1.1 镜像拉取失败——集群稳定性的“隐形杀手”
在 Kubernetes 生产环境中,镜像拉取失败是最常见、影响面最广的故障类型之一。它不像节点宕机那样瞬间触发告警,却会以“Pod 一直处于 ImagePullBackOff 或 ErrImagePull 状态”的方式,逐步侵蚀集群的可用性与自愈能力。
⚠️ 关键影响面:一次镜像拉取失败可能导致整个工作负载的滚动更新卡死、HPA 扩容失效、甚至级联影响下游服务的健康检查。
| 影响维度 | 具体表现 | 严重等级 |
|---|---|---|
| Pod 调度阻塞 | 新 Pod 无法启动,Pending 队列堆积 | 高 |
| 滚动更新卡死 | Deployment 更新进度停滞,新旧 Pod 共存 | 高 |
| HPA 扩容失效 | 负载上升时无法创建新副本,服务过载 | 高 |
| 节点资源浪费 | 反复拉取失败占用磁盘 I/O 与网络带宽 | 中 |
| 监控告警风暴 | 大量 Pod 处于 CrashLoopBackOff,告警淹没 | 中 |
1.2 课程目标与受众
本课程旨在帮助运维与开发人员建立一套系统化的镜像拉取故障排查体系,从现象到根因,从单节点到集群维度,覆盖所有常见场景。
🎯 课程核心目标:
- 掌握
kubectl describe pod与kubelet 日志的故障定位技巧 - 理解镜像拉取的全链路:kubelet → CRI → containerd → registry
- 能够独立排查认证、网络、磁盘、配置、镜像仓库等 5 大类问题
- 学会使用
crictl、nerdctl、journalctl等工具进行现场诊断
| 目标受众 | 前置知识要求 | 期望收获 |
|---|---|---|
| K8s 运维 / SRE | 熟悉 kubectl 基本操作 | 建立故障排查 SOP,缩短 MTTR |
| 平台开发工程师 | 了解容器与镜像概念 | 掌握自建镜像仓库的排障方法 |
| K8s 初学者 | 完成过集群搭建 | 理解镜像拉取机制与常见坑点 |
1.3 故障排查思维模型
面对镜像拉取失败,切忌盲目重启 Pod 或清空节点镜像缓存。我们推荐使用 “现象 → 分层 → 根因 → 验证” 的四步思维模型,确保每次排查都有迹可循。
💡 思维模型要点:
- 现象收集:使用
kubectl describe pod <pod-name>查看 Events 字段,获取Failed to pull image的原始错误信息。 - 分层定位:区分是 kubelet 层(如磁盘满)、CRI 层(如 containerd 配置错误)、还是网络层(如 DNS 解析失败)。
- 根因分析:针对错误类型,逐一排查认证凭证、镜像仓库可达性、节点磁盘空间、镜像名称格式等。
- 验证修复:修复后通过
kubectl delete pod触发重建,并观察kubectl get pods -w确认状态变为 Running。
1.4 课程内容概览
本课程共 30 章,覆盖从基础概念到高级排障的完整知识体系。以下是前 10 章的内容规划,帮助您快速了解课程结构:
| 章节 | 主题 | 核心知识点 |
|---|---|---|
| 第 1 章 | 课程导论 | 影响分析、思维模型、课程目标 |
| 第 2 章 | 镜像拉取流程详解 | kubelet → CRI → containerd → registry 全链路 |
| 第 3 章 | 常见错误码与含义 | ImagePullBackOff / ErrImagePull / ManifestUnknown |
| 第 4 章 | 认证与凭证问题 | imagePullSecrets / dockerconfigjson / 私有仓库 |
| 第 5 章 | 网络与 DNS 问题 | 镜像仓库可达性 / 代理配置 / CoreDNS 解析 |
| 第 6 章 | 磁盘空间与 inode 问题 | 节点磁盘满 / 镜像垃圾清理 / 临时存储 |
| 第 7 章 | 镜像名称与标签问题 | latest 标签陷阱 / 镜像格式 / 多架构 |
| 第 8 章 | 镜像仓库限流与配额 | Docker Hub 限流 / 自建仓库配额 / 镜像缓存 |
| 第 9 章 | CRI 运行时配置问题 | containerd 配置 / 镜像加速 / sandbox 镜像 |
| 第 10 章 | kubelet 配置与日志 | kubelet 参数 / 日志级别 / 事件采集 |
从第 11 章开始,我们将进入实战排障环节,结合真实案例与现场日志,手把手演示如何快速定位并修复镜像拉取失败问题。