摘要:Kubernetes 作为云原生领域的标准编排平台,对 Pod 生命周期的精确把控是确保应用稳定运行的关键。
Kubernetes 作为云原生领域的标准编排平台,对 Pod 生命周期的精确把控是确保应用稳定运行的关键。
1. Pending(等待中)当 Pod 被创建时,它首先进入 Pending 阶段。在此阶段,调度器会为 Pod 选择合适的节点。主要包含以下步骤:
• 资源配额检查
• 节点筛选(预选)
• 节点优先级排序(优选)
• 绑定节点
2. Running(运行中)一旦 Pod 被调度到某个节点并且所有容器都被成功创建,Pod 就会进入 Running 状态。这个阶段包括:
• Init Container 按序启动
• 主容器并行启动
• 健康检查开始执行
值得注意:即使 Pod 处于 Running 状态,也不意味着应用程序正常运行。需要配合就绪探针(Readiness Probe)来确保服务真正可用。
3. Succeeded(成功)适用于运行一次性任务的 Pod,当 Pod 中的所有容器都成功终止且不会重启时,进入此状态。典型应用场景:
• 批处理作业
• 数据迁移任务
• 初始化操作
4. Failed(失败)当 Pod 中的任何容器以非零状态退出且重启策略配置为 Never 时,Pod 进入 Failed 状态。常见原因:
• 应用程序崩溃
• 配置错误
• 资源不足
5. Unknown(未知)当 kubelet 无法获取 Pod 的状态信息时,会报告 Unknown 状态。通常由以下原因导致:
• 网络通信问题
• 节点故障
• kubelet 异常
1. 重启策略Pod 的重启策略(RestartPolicy)决定了容器失败时的处理方式:
• Always(默认):始终尝试重启
• OnFailure:仅在失败时重启
• Never:从不重启
2. 生命周期钩子Kubernetes 提供了两个生命周期钩子:
lifecycle:postStart:
exec:
command: ["/bin/sh", "-c", "echo Starting"]
preStransform: translateY(
exec:
command: ["/bin/sh", "-c", "echo Stopping"]
重要提示:postStart 不保证在容器 ENTRYPOINT 之前运行,但一定在容器变成 Running 状态之前执行完成。
3. 终止流程Pod 终止时会经历以下步骤:
1. Pod 标记为 Terminating
2. 执行 preStop 钩子
3. 发送 SIGTERM 信号
4. 等待宽限期(默认 30 秒)
5. 发送 SIGKILL 信号
来源:opendotnet