Pod 生命周期与钩子
Pod 从创建到销毁会经历若干阶段(Phase),容器进程在这些阶段中还可能被重启、被打探针检查、被钩子回调。搞清楚这套机制,才能解释"Pod 明明在 Running,为什么流量还是断了"这类现象。
Pod 的阶段
kubectl get pods 的 STATUS 列取自 Pod 的 phase:
| 阶段 | 含义 |
|---|---|
| Pending | 已被集群接受,但容器还没全部创建(等调度、拉镜像) |
| Running | Pod 已绑定节点,至少一个容器在运行 |
| Succeeded | 所有容器正常退出(0 码),一次性任务成功 |
| Failed | 容器以非 0 码退出,任务失败 |
| Unknown | apiserver 暂时拿不到 Pod 状态(如节点失联) |
kubectl get pods -w # -w 持续观察状态变化
# NAME READY STATUS RESTARTS AGE
# web-0 1/1 Running 0 5m
restartPolicy 重启策略
容器退出后是否重启、重启谁,由 restartPolicy 决定:
| 取值 | 行为 | 适用 |
|---|---|---|
| Always | 退出即重启(默认) | 常驻服务类 Pod |
| OnFailure | 非 0 码退出才重启 | 任务型 |
| Never | 退出后不重启 | 任务型 |
注意 Job 的 Pod 只允许 OnFailure 或 Never;而 restartPolicy 是 Pod 级别,会作用到 Pod 内所有容器。
initContainers 初始化容器
initContainers 在主容器启动前按顺序逐个执行,全部成功才轮到正式容器,适合做"等待依赖就绪、预置数据"等一次性工作:
apiVersion: v1
kind: Pod
metadata:
name: app-with-init
spec:
initContainers:
- name: wait-db # 等待数据库可连再启动主容器
image: busybox:1.36
command: ["sh", "-c", "until nc -z db-svc 3306; do sleep 2; done"]
containers:
- name: app
image: myapp:1.0
初始化容器失败会按 restartPolicy 重试,一直失败 Pod 就停在 Pending(Init:CrashLoopBackOff)。
探针:startup / liveness / readiness
探针让 kubelet 主动检查容器状态(完整细节见第 21 章),先记住三者分工:
| 探针 | 检查什么 | 失败后果 |
|---|---|---|
| startupProbe | 应用是否启动完成 | 失败则杀容器重启,保护慢启动应用 |
| livenessProbe | 进程是否还活着 | 失败则杀掉容器重启 |
| readinessProbe | 是否准备好接收流量 | 失败则从 Service 端点摘除,不杀容器 |
生命周期钩子 postStart / preStop
容器可在启动后、终止前各执行一次回调:
spec:
containers:
- name: app
image: myapp:1.0
lifecycle:
postStart:
exec:
command: ["sh", "-c", "echo started > /tmp/started"]
preStop: # 常用于优雅下线:先通知、再等流量排空
exec:
command: ["sh", "-c", "curl -X POST http://127.0.0.1:8080/shutdown"]
终止流程与 terminationGracePeriodSeconds
删除 Pod 时不是立刻杀掉,而是走"优雅终止":
- Pod 被打上删除标记,从 Service 端点摘除,不再接收新流量。
- 执行 preStop 钩子(如有),给应用发送 SIGTERM。
- 应用应在宽限期内自行退出;超时后 kubelet 发送 SIGKILL 强杀。
- 宽限期由 terminationGracePeriodSeconds 控制,默认 30 秒,可按应用需要调大:
spec:
terminationGracePeriodSeconds: 60 # 给优雅下线留 60 秒
小结:Pod 状态沿 Pending → Running → Succeeded/Failed 推进;initContainers 负责启动前置,三类探针负责健康把关,preStop 与宽限期负责优雅退出。把 restartPolicy 与 phases 对应起来看,排查"重启循环"会快很多。