【3.2】pod详解—— Pod的相位(phase)状态(status)
文章目录
- Pod的相位(phase)&状态(status)
- Pod 的相位
- Pod的status
Pod的相位(phase)&状态(status)
通过前面的学习,我们已经知道了,容器的服务是运行在Pod中的,那么我们如何知道这个Pod目前的状态是什么呢,这个pod是否启动成功了,我们会想到这肯定会有一个什么标识来确定,那么现在我们就来看看。
为什么这里的标题是用“&”而不是“/”连接的呢?事实上这两个名词代表的并不一样,但很多时候我们可能会混淆,为了让初学的我们能够正确理解,索性放在一起了。确保不要将 Status(kubectl 用于用户直觉的显示字段)与 Pod 的 phase
混淆。 Pod 阶段(phase)是 Kubernetes 数据模型和 Pod API 的一个明确的部分
- 我可以提前告诉你,
Pod Phase (status.phase)
是 Pod 一个“摘要状态”,而Pod Status (.status 对象)
是 Pod 所有运行时状态的“详细总表”。它们不是对立的,是包含关系。- 没错,
.status.phase
和.status
都是用来描述 Pod 状态的,只是它们描述的“层级”不同、用途不同。
✅ 主播你说的“层级不同”我还是没完全听懂?
那我这样解释你就明白了:
容器运行时会生成一个详细的“状态报告”,这就是
status
,里面记录了容器是否准备就绪、有没有报错、是否被杀死、重启了几次等等。然后 Kubernetes 会从这个详细报告中总结一句话,归纳成几个词,比如 “正在运行”、“运行失败”、“正在调度中” —— 这就是
phase
。类比一下人类健康:
- 我们说这个人在几时几分由于什么病引起什么贷方衰竭后死亡,这就是
status
- 那么这时候
phase
就是简单的两个字"死亡"这还听不懂那就站着听课吧😋
Pod 的相位
Pod的相位(phase),看似高大上的名字,说白了phase就是对Pod的状态进行描述的
下面是 phase 可能的值:
取值 | 描述 |
---|---|
Pending (悬决) | Pod 已被 Kubernetes 系统接受,但有一个或者多个容器尚未创建亦未运行。此阶段包括等待 Pod 被调度的时间和通过网络下载镜像的时间。 |
Running (运行中) | Pod 已经绑定到了某个节点,Pod 中所有的容器都已被创建。至少有一个容器仍在运行,或者正处于启动或重启状态。 |
Succeeded (成功) | Pod 中的所有容器都已成功结束,并且不会再重启。 |
Failed (失败) | Pod 中的所有容器都已终止,并且至少有一个容器是因为失败终止。也就是说,容器以非 0 状态退出或者被系统终止,且未被设置为自动重启。 |
Unknown (未知) | 因为某些原因无法取得 Pod 的状态。这种情况通常是因为与 Pod 所在主机通信失败。 |
具体来说,Pod 遵循预定义的生命周期,起始于
Pending
阶段, 如果至少其中有一个主要容器正常启动,则进入Running
,之后取决于 Pod 中是否有容器以失败状态结束而进入Succeeded
或者Failed
阶段。
Pod的status
Pod 有一个 PodStatus 对象,其中包含一个 PodCondition 数组。 PodCondition 数组的每个元素都有一个 type 字段和一个 status 字段。type 字段是字符串,可能的值有PodScheduled、Ready、Initialized 和 Unschedulable。status 字段是一个字符串,可能的值有 True、False 和 Unknown。
所以,你已经知道了,首先status
是一个结构体,不是单一的“状态值”,所以我们刚刚的phase
也是他的一个字段
字段名 | 类型 | 含义 | 举例 |
---|---|---|---|
phase | 字符串 | Pod 的生命周期阶段 | Running 、Pending |
conditions | 数组 | Pod 的各类布尔状态判断 | Ready, Initialized 等 |
containerStatuses | 数组 | 每个容器的详细运行状态 | Running, Waiting |
hostIP | 字符串 | Pod 所在节点的 IP 地址 | 192.168.1.101 |
podIP | 字符串 | Pod 本身的 IP 地址 | 10.244.0.5 |
startTime | 时间戳 | Pod 启动的时间 | 2025-04-23T… |
message | 字符串 | Pod 状态说明文字 | 容器拉取失败 |
reason | 字符串 | 状态产生的原因(可供判断或排错) | CrashLoopBackOff |
我们再看一个status字段(重点关注里面的phase
字段)
status:phase: Running # 🟢 Pod 当前生命周期阶段的“总结性状态” 表示容器至少已启动成功过一次conditions: # 🔍 Pod 的各种布尔状态- type: Ready # 类型:Pod 是否就绪status: False # ❌ 当前不就绪containerStatuses: # 🔎 每个容器的详细状态- name: myapp # 容器名state: # 当前状态结构waiting: # 容器现在处于 waiting 状态reason: CrashLoopBackOff # 等待原因是崩溃重启回退restartCount: 5 # 容器已经重启了 5 次
听懂掌声👏