Kubernetes Pod的生命周期

具体概念请阅读官方文档:https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/pod-lifecycle/

Pod 阶段

image-20221002001621554

取值 描述
Pending(悬决) Pod 已被 Kubernetes 系统接受,但有一个或者多个容器尚未创建亦未运行。此阶段包括等待 Pod 被调度的时间和通过网络下载镜像的时间。
Running(运行中) Pod 已经绑定到了某个节点,Pod 中所有的容器都已被创建。至少有一个容器仍在运行,或者正处于启动或重启状态。
Succeeded(成功) Pod 中的所有容器都已成功终止,并且不会再重启。
Failed(失败) Pod 中的所有容器都已终止,并且至少有一个容器是因为失败终止。也就是说,容器以非 0 状态退出或者被系统终止。
Unknown(未知) 因为某些原因无法取得 Pod 的状态。这种情况通常是因为与 Pod 所在主机通信失败。

Pod 相关状态解释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CrashLoopBackOff # 容器退出,kubelet正在将它重启
InvalidImageName # 无法解析镜像名称
ImageInspectError # 无法校验镜像
ErrImageNeverPull # 策略禁止拉取镜像
ImagePullBackOff # 镜像正在重试拉取
RegistryUnavailable # 连接不到镜像中心
ErrImagePull # 通用的拉取镜像出错
CreateContainerConfigError # 不能创建kubelet使用的容器配置
CreateContainerError # 创建容器失败
m.internalLifecycle.PreStartContainer # 执行hook报错
RunContainerError # 启动容器失败
PostStartHookError # 执行hook报错
ContainersNotInitialized # 容器没有初始化完毕
ContainersNotReady # 容器没有准备完毕
ContainerCreating # 容器创建中
PodInitializing # pod初始化中
DockerDaemonNotReady # docker还没有完全启动
NetworkPluginNotReady # 网络插件还没有完全启动

容器状态

  • Waiting (等待)
    如果容器并不处在 Running 或 Terminated 状态之一,它就处在 Waiting 状态。 处于 Waiting 状态的容器仍在运行它完成启动所需要的操作:例如,从某个容器镜像 仓库拉取容器镜像,或者向容器应用 Secret 数据等等。 当你使用 kubectl 来查询包含 Waiting 状态的容器的 Pod 时,你也会看到一个 Reason 字段,其中给出了容器处于等待状态的原因。
  • Running(运行中)
    Running 状态表明容器正在执行状态并且没有问题发生。 如果配置了 postStart 回调,那么该回调已经执行且已完成。 如果你使用 kubectl 来查询包含 Running 状态的容器的 Pod 时,你也会看到 关于容器进入 Running 状态的信息。
  • Terminated(已终止)
    处于 Terminated 状态的容器已经开始执行并且或者正常结束或者因为某些原因失败。 如果你使用 kubectl 来查询包含 Terminated 状态的容器的 Pod 时,你会看到 容器进入此状态的原因、退出代码以及容器执行期间的起止时间。

Pod 状况

1
2
3
# 查看Pod详细信息
kubectl describe pod nginx
# 输入以上命令,查看Conditions、Events

image-20221002001117663

Conditions:

  • PodScheduled:Pod 已经被调度到某节点;
  • PodHasNetwork:Pod 沙箱被成功创建并且配置了网络(Alpha 特性,必须被显式启用);
  • ContainersReady:Pod 中所有容器都已就绪;
  • Initialized:所有的 Init 容器 都已成功完成;
  • Ready:Pod 可以为请求提供服务,并且应该被添加到对应服务的负载均衡池中。
字段名称 描述
type Pod 状况的名称
status 表明该状况是否适用,可能的取值有 “True“, “False“ 或 “Unknown
lastProbeTime 上次探测 Pod 状况时的时间戳
lastTransitionTime Pod 上次从一种状态转换到另一种状态时的时间戳
reason 机器可读的、驼峰编码(UpperCamelCase)的文字,表述上次状况变化的原因
message 人类可读的消息,给出上次状态转换的详细信息