Pod 生命周期与状态
了解 Pod 经历的不同阶段,以及如何监控其状态。
Pod 生命周期与状态 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。
容器组:生命周期之旅
容器组并不是静态不变的;它们会经历不同阶段,就像一段旅程。了解这一“生命周期”是有效管理 Kubernetes 应用的关键。
这能帮助您判断应用是健康、正在启动,还是遇到了问题。

容器组的五个生命周期阶段
Kubernetes 将容器组分为五个主要阶段。这些阶段从较高层次概括了容器组的当前状态:
- Pending:容器组已被 Kubernetes 接受,但其中的容器尚未启动。
- Running:容器组中至少有一个容器正在运行或正在启动。
- Succeeded:容器组中的所有容器都已成功完成,并且不会重新启动。
- Failed:所有容器都已终止,且至少有一个容器失败(例如以非零代码退出)。
- Unknown:无法确定容器组的状态,通常是由于通信问题。
阶段 1:Pending 容器组
当容器组已被 Kubernetes API 服务器接受,但其中一个或多个容器尚未创建或配置时,容器组处于 Pending 阶段。
常见原因包括:
- 容器镜像仍在下载。
- 集群没有足够的资源(CPU/内存)来调度容器组。
- 存储卷仍在配置或挂载。
观察 Pending 容器组
让我们看一个示例。如果您尝试使用不存在的镜像部署容器组,它可能会卡在“Pending”状态,或显示镜像拉取错误。
下面是一个容器组定义示例:
apiVersion: v1
kind: Pod
metadata:
name: pending-pod-demo
spec:
containers:
- name: my-container
image: non-existent-image:latest
ports:
- containerPort: 80要检查其状态,您可以使用 kubectl get pod。您可能会看到类似以下内容:
$ kubectl get pod pending-pod-demo
NAME READY STATUS RESTARTS AGE
pending-pod-demo 0/1 ErrImagePull 0 5sErrImagePull 表示无法获取镜像,因此容器组无法进入 Running 状态。
阶段 2:运行中的 Pod
运行中阶段表示 Pod 已绑定到某个节点,并且其中的所有容器都已成功创建。至少有一个容器正在运行,或正在启动或重启。
请注意,Pod 处于运行中并不自动表示其中的应用运行状况良好或功能完整。这只表示容器处于活动状态。
让 Pod 运行起来
下面是一个 Nginx Web 服务器的标准 Pod 定义。应用此定义后,您的 Pod 应会很快进入“运行中”状态。
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80部署完成后,使用 kubectl get pod 应会显示:
$ kubectl get pod nginx-pod
NAME READY STATUS RESTARTS AGE
nginx-pod 1/1 Running 0 10sREADY 中的 1/1 表示已定义的一个容器中有一个已就绪。
阶段 3 和 4:成功与失败
这些阶段表示 Pod 的终止状态:
- 成功:当 Pod 中的所有容器都已成功终止且不会重启时,Pod 会进入此阶段。这通常适用于运行一次性任务或批处理作业的 Pod。
- 失败:当 Pod 中的所有容器都已终止,且至少有一个容器以失败状态终止时,Pod 处于失败阶段(例如,以非零状态码退出)。
理解这些阶段有助于您诊断作业完成情况或应用错误。
神秘的未知阶段
未知阶段表示无法确定 Pod 的状态。这是一个少见但很关键的阶段。
当 Pod 所在节点上的 Kubelet(代理程序)停止与 Kubernetes API 服务器通信时,通常会发生这种情况。原因可能是网络问题、Kubelet 崩溃或节点本身出现故障。
Pod 中的容器状态
Pod 虽然有整体阶段,但其中的各个容器也有更细粒度的状态。这些状态会直接影响 Pod 的整体阶段:
- 等待中:容器当前正在等待启动。原因可能包括拉取镜像、分配资源或等待初始化容器完成。
- 运行中:容器正在正常执行。
- 已终止:容器已完成执行,可能是成功完成,也可能是失败。
Pod 状态检查
假设您刚刚部署了一个新的 Pod。您运行 kubectl get pod my-app 后看到以下输出:
NAME READY STATUS RESTARTS AGE
my-app 0/1 Pending 0 12smy-app Pod 处于 Pending 状态,且就绪容器数为 0/1,最可能的原因是什么?
生命周期回顾与后续步骤
您已经了解到,Kubernetes Pod 会经历不同的阶段:Pending、Running、Succeeded、Failed 和 Unknown。这些阶段可以从较高层面反映 Pod 的运行状态。
我们还介绍了各个容器状态(Waiting、Running、Terminated),它们共同影响 Pod 的整体阶段。使用 kubectl get pod 和 kubectl describe pod 监控这些状态(稍后您会进一步学习它们),对于了解应用的运行状况至关重要。
接下来,我们将深入学习高级 Pod 模式,探索如何使用边车模式在单个 Pod 中运行多个共置容器!
常见问题解答
「Pod 生命周期与状态」课时是免费的吗?
是的 — 「Pod 生命周期与状态」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。
「Pod 生命周期与状态」这节课中我会学到什么?
了解 Pod 经历的不同阶段,以及如何监控其状态。 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 DevOps Bootcamp 需要有经验吗?
无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「Pod 生命周期与状态」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 DevOps Bootcamp 课中编写并运行代码吗?
能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Pod:最小单元
- Pod 生命周期与状态
- 多容器 Pod(Sidecar)
- Init 容器与启动顺序