在K8S中,Pod声明周期有哪些?

在Kubernetes中,Pod的生命周期是从创建到终止的完整过程,包含多个阶段(Phase)状态(Condition),其流转受到容器状态、健康检查、重启策略等因素影响。核心生命周期阶段及关键节点如下:

一、Pod的核心阶段(Phase)

Pod的status.phase字段定义了其生命周期的宏观阶段,共5种核心状态,反映Pod在集群中的整体状态:

1. Pending( pending )

  • 含义:Pod已被API Server创建(记录到etcd中),但尚未完成调度或容器启动。
  • 常见原因
    • 未被调度到节点(如资源不足、节点亲和性不满足、污点未容忍);
    • 容器镜像正在拉取(网络慢或镜像体积大);
    • 初始化容器(Init Containers)正在运行(未完成)。

2. Running( running )

  • 含义:Pod已被调度到节点,且满足以下条件:
    • 所有初始化容器(Init Containers)已成功执行完毕;
    • 至少有一个应用容器处于运行状态(或正在启动/重启)。
  • 注意:此阶段不代表应用“可用”(需通过就绪探针验证),仅表示Pod在节点上正常运行。

3. Succeeded( succeeded )

  • 含义:Pod中所有容器均已成功终止(退出码为0),且不会被重启。
  • 适用场景:一次性任务(如Job创建的Pod),任务完成后进入此状态。

4. Failed( failed )

  • 含义:Pod中所有容器均已终止,但至少有一个容器是非正常终止(退出码非0)。
  • 常见原因:应用崩溃、容器启动失败、存活探针检测失败导致容器被杀死等。

5. Unknown( unknown )

  • 含义:API Server无法获取Pod的状态(通常是kubelet与API Server通信中断)。
  • 常见原因:节点故障(如宕机、网络分区)导致kubelet无法上报Pod状态。

二、Pod生命周期中的关键节点

除了宏观阶段,Pod的生命周期还包含多个关键过程,影响其状态流转:

1. 初始化阶段(Init Containers)

  • 作用:在应用容器启动前运行的“前置任务容器”,用于初始化配置(如拉取配置文件、等待依赖服务就绪)。
  • 特点
    • 按定义顺序串行执行,前一个Init容器成功终止后,下一个才会启动;
    • 若Init容器失败,kubelet会根据Pod的重启策略(RestartPolicy)重启Pod或终止;
    • 初始化完成后,Init容器会被标记为“已完成”,不会再运行。

2. 应用容器的状态

Pod的阶段由其内部容器的状态决定,容器有3种核心状态(containerStatuses.state):

  • Waiting:容器正在等待启动(如镜像拉取中、依赖未满足),会包含reason说明原因(如ImagePulling)。
  • Running:容器已启动并正常运行(触发started事件)。
  • Terminated:容器已终止,包含exitCode(0表示成功,非0表示失败)和终止原因(如ErrorCompleted)。

3. 健康检查与探针(Probe)

Kubernetes通过探针监控容器状态,直接影响Pod是否“可用”及是否重启,是生命周期的重要调控机制:

  • 存活探针(Liveness Probe):检测容器是否“存活”,失败会触发容器重启(受重启策略控制)。
  • 就绪探针(Readiness Probe):检测容器是否“就绪”(可接收请求),失败会将Pod从Service的Endpoints中移除(不影响容器运行)。
  • 启动探针(Startup Probe):针对启动慢的应用,成功前会屏蔽存活/就绪探针,避免误判为故障。

4. 重启策略(RestartPolicy)

控制容器终止后是否重启,影响Pod状态流转:

  • Always(默认):容器终止后总是重启(即使正常终止),适用于长期运行的服务(如Web应用)。
  • OnFailure:仅当容器非正常终止(exitCode≠0)时重启,适用于批处理任务。
  • Never:容器终止后从不重启,适用于一次性任务。

5. 终止过程(Termination)

当删除Pod(kubectl delete pod)或Pod因故障被终止时,会经历以下步骤:

  1. 标记为Terminating:API Server将Pod状态更新为Terminating,并停止将新请求转发到该Pod(如从Service中移除)。
  2. 发送终止信号:kubelet向容器发送SIGTERM信号(默认优雅终止时间30秒,可通过spec.terminationGracePeriodSeconds调整),通知应用“即将终止”。
  3. 强制终止:若优雅时间内容器未退出,kubelet发送SIGKILL信号强制杀死容器。
  4. 清理资源:删除Pod的网络规则、挂载卷等,最终从API Server中移除Pod记录。

三、生命周期流转示例

一个典型的Pod生命周期流转如下:
Pending(调度中→拉取镜像→执行Init容器) → Running(应用容器启动→存活/就绪探针通过) → (若为长期服务)持续Running;(若为任务)容器完成→Succeeded;(若应用崩溃)容器终止→Failed(或因Always策略重启→回到Running)。

总结

Pod的生命周期是“阶段(Phase)+ 容器状态 + 调控机制(探针、重启策略)”的综合体现,核心阶段包括Pending、Running、Succeeded、Failed、Unknown,关键节点涉及初始化容器、健康检查、终止过程等。理解这些阶段有助于排查Pod故障(如Pending原因、启动失败等)和管理应用生命周期。

posted @ 2025-08-11 10:20  天道酬勤zjh  阅读(14)  评论(0)    收藏  举报