在 Kubernetes 中,Pod 有以下主要状态,每个状态都反映了 Pod 在其生命周期中的特定阶段:
状态 | 描述 | 触发条件 |
---|---|---|
Pending | Pod 已被系统接受,但容器尚未启动 | 调度完成但容器启动过程尚未完成,一般是已经分配了节点,但节点上的资源(比如 cpu、memory 不够用) |
Running | Pod 已绑定到节点,至少一个容器在运行 | 所有容器已创建,至少一个容器在运行状态 |
Succeeded | Pod 中所有容器已成功终止且不再重启 | Job/CronJob 任务完成 |
Failed | Pod 中所有容器已终止,且至少一个容器失败退出 | 容器异常退出(非0退出码) |
Unknown | 无法获取 Pod 状态 | 节点通信故障或 kubelet 问题 |
含义:Pod 已被调度到节点,但尚未完全运行
常见原因:
kubectl describe pod <name> # 查看Events确定具体原因
含义:Pod 已绑定到节点,所有容器已创建
关键特征:
kubectl get pods -l app=my-app # 查看运行状态
含义:Pod 中所有容器成功终止且不再重启
典型场景:
kubectl get jobs # 查看完成的任务
含义:所有容器终止,至少一个容器异常退出
常见原因:
kubectl logs <pod-name> --previous # 查看上次崩溃日志
含义:无法获取 Pod 状态
根本原因:
kubectl get nodes # 检查节点状态
触发动作:删除操作后
含义:Pod 关闭过程中
阶段:
kubectl delete pod <name> --grace-period=0 --force # 强制删除
状态转换路径:
Pending → ContainerCreating → Running → Terminating
Pending → ImagePullBackOff
或 Running → CrashLoopBackOff
查看完整状态链:
kubectl get pods -o wide
kubectl describe pod <pod-name>
状态诊断三要素:
# 1. Pod事件
kubectl describe pod <name>
# 2. 容器日志
kubectl logs <pod-name> -c <container-name>
# 3. 节点状态
kubectl describe node $(kubectl get pod <name> -o jsonpath='{.spec.nodeName}')
理解这些状态及其转换关系,是诊断 K8s 应用问题的关键基础。当 Pod 出现异常状态时(如 Pending 或 CrashLoopBackOff),应结合事件(Events)、容器日志和节点状态进行综合分析。