Pod生命周期全解析:从创建到终止,你不得不知的关键阶段

开发 前端
即使 Pod 处于 Running 状态,也不意味着应用程序正常运行。需要配合就绪探针(Readiness Probe)来确保服务真正可用。

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 终止时会经历以下步骤:

  •  Pod 标记为 Terminating
  •  执行 preStop 钩子
  • 发送 SIGTERM 信号
  • 等待宽限期(默认 30 秒)
  • 发送 SIGKILL 信号

注意事项总结

  • 配置合适的探针:根据应用特点选择合适的存活、就绪和启动探针
  • 设置合理的资源限制:避免因资源不足导致 Pod 无法调度或被驱逐
  • 正确处理终止信号:应用程序要能够优雅处理 SIGTERM 信号
责任编辑:武晓燕 来源: 架构师修行之路
相关推荐

2017-08-16 18:03:12

Docker安全工具容器

2020-10-21 09:36:40

Vue项目技巧

2010-08-27 10:40:55

Android

2011-03-31 10:46:54

LinuxCLI软件

2022-10-27 09:55:00

2009-06-23 09:06:32

2018-05-09 11:15:59

服务器缓存技巧

2019-11-27 14:20:27

Redis数据库C语言

2020-09-22 08:16:20

软件开发原则

2022-08-30 23:54:42

MySQL数据库工具

2020-06-04 13:52:00

CRM选型

2024-06-05 11:36:28

2020-07-09 12:50:29

JVM内存管理Java

2012-07-17 11:19:12

Office2013

2020-02-13 18:05:18

数组reduce前端

2023-08-29 08:41:42

2017-08-10 16:54:47

MySQL优化MySQL

2016-03-30 09:56:37

5G

2013-12-06 17:52:08

2010-02-06 10:42:41

Android Ser生命周期
点赞
收藏

51CTO技术栈公众号