12·Pod 基础入门

Pod 生命周期

kubernetespodlifecycle

Pod 生命周期

学习目标

  1. 理解 Pod 的各个阶段(Phase)
  2. 理解容器的状态(State)
  3. 了解 Pod 的重启策略

核心概念

Pod 阶段(Phase)

Pod 的生命周期阶段:

Pending → Running → Succeeded/Failed
   ↓
  Unknown

Pending:    等待调度或拉取镜像
Running:    至少一个容器正在运行
Succeeded:  所有容器成功退出
Failed:     至少一个容器失败退出
Unknown:    无法获取 Pod 状态

Pod 阶段详解

阶段说明典型场景
Pending已创建但未运行调度中、拉取镜像
Running至少一个容器运行中正常服务中
Succeeded所有容器成功终止批量任务完成
Failed至少一个容器失败应用崩溃、OOM
Unknown状态未知节点通信故障

容器状态(State)

容器的三种状态:

Waiting     正在准备(拉取镜像、执行 Init)
Running     正在运行
Terminated  已终止(正常退出或被杀)
状态说明原因
Waiting等待启动拉取镜像、Init 容器
Running正在执行正常运行
Terminated已结束正常退出、OOM、信号杀死

容器终止原因

Terminated 状态的退出码:

Exit Code 0:    正常退出
Exit Code 1:    应用错误
Exit Code 137:  SIGKILL (OOM 或强制杀死)
Exit Code 143:  SIGTERM (优雅终止)

Pod 条件(Conditions)

Pod Conditions 表示更详细的状态:

Initialized:      所有 Init 容器完成
Ready:            可以提供服务
ContainersReady:  所有容器就绪
PodScheduled:     已调度到节点

类型: True / False / Unknown

重启策略(Restart Policy)

apiVersion: v1
kind: Pod
spec:
  restartPolicy: Always  # 默认值
策略行为适用场景
Always总是重启Web 服务器(默认)
OnFailure失败时重启批量任务
Never从不重启一次性任务

生命周期钩子

apiVersion: v1
kind: Pod
spec:
  containers:
  - name: app
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "echo started"]
      preStop:
        exec:
          command: ["/bin/sh", "-c", "echo stopping"]
钩子触发时机用途
postStart容器创建后立即初始化配置
preStop容器终止前优雅关闭、清理资源

完整生命周期流程

创建 Pod
    ↓
[PENDING]
    ├─ 调度到节点
    ├─ 拉取镜像
    └─ 运行 Init 容器
    ↓
[RUNNING]
    ├─ postStart 钩子
    ├─ 主容器运行
    ├─ 存活探针检查
    └─ 就绪探针检查
    ↓
[TERMINATING]
    ├─ preStop 钩子
    ├─ 发送 SIGTERM
    ├─ 等待优雅终止期
    └─ 发送 SIGKILL
    ↓
[SUCCEEDED] 或 [FAILED]

Init 容器

apiVersion: v1
kind: Pod
spec:
  initContainers:
  - name: init-db
    image: busybox
    command: ['sh', '-c', 'until nslookup mysql; do echo waiting; done']
  containers:
  - name: app
    image: my-app
特性说明
执行顺序按顺序依次执行
必须成功所有 Init 容器成功后才启动主容器
用途等待依赖服务、初始化配置

实践练习

练习 1:状态识别

给定以下场景,判断 Pod 处于哪个阶段:

  1. 正在拉取镜像
  2. 应用正在处理请求
  3. 批量任务执行完毕
  4. 内存溢出被杀死

练习 2:重启策略选择

为以下场景选择合适的重启策略:

  1. Web 服务器
  2. 数据处理任务
  3. 定时报告生成

练习 3:观察生命周期

运行一个 Pod 并观察其状态变化:

kubectl run test --image=nginx --restart=Never
kubectl get pod test -w

常见误解

1. Running 不代表健康

错误:Pod 是 Running 状态就一定正常
正确:Running 只表示容器在运行,不代表健康

需要配合探针(Liveness/Readiness)判断健康状态

2. 退出码的含义

错误:Exit Code 非 0 就是应用错误
正确:
- 137 (OOM) 是资源问题,不是应用问题
- 143 (SIGTERM) 是正常终止信号

小结

要点说明
Pod PhasePending / Running / Succeeded / Failed / Unknown
容器状态Waiting / Running / Terminated
重启策略Always / OnFailure / Never
生命周期钩子postStart / preStop
Init 容器主容器启动前的初始化容器
优雅终止SIGTERM → 等待 → SIGKILL

练习编辑器

bash
Loading...

继续学习

完成本课后,建议继续学习下一课「Pod YAML 配置」 以巩固所学知识。