k8s中pod有哪些状态?

在 Kubernetes 中,Pod 有以下主要状态,每个状态都反映了 Pod 在其生命周期中的特定阶段:

Pod 核心状态列表

状态 描述 触发条件
Pending Pod 已被系统接受,但容器尚未启动 调度完成但容器启动过程尚未完成,一般是已经分配了节点,但节点上的资源(比如 cpu、memory 不够用)
Running Pod 已绑定到节点,至少一个容器在运行 所有容器已创建,至少一个容器在运行状态
Succeeded Pod 中所有容器已成功终止且不再重启 Job/CronJob 任务完成
Failed Pod 中所有容器已终止,且至少一个容器失败退出 容器异常退出(非0退出码)
Unknown 无法获取 Pod 状态 节点通信故障或 kubelet 问题

详细状态解释

1️⃣ Pending (挂起)
  • 含义:Pod 已被调度到节点,但尚未完全运行

  • 常见原因:

    • 下载容器镜像中
    • 分配存储卷(如 PVC 绑定中)
    • 资源不足(CPU/内存)
    • 等待端口释放
    bash 复制代码
    kubectl describe pod <name> # 查看Events确定具体原因
2️⃣ Running (运行中)
  • 含义:Pod 已绑定到节点,所有容器已创建

  • 关键特征:

    • 至少一个容器仍在运行(可能包括重启中的容器)
    • 容器可能未准备好(Readiness Probe 尚未通过)
    bash 复制代码
    kubectl get pods -l app=my-app # 查看运行状态
3️⃣ Succeeded (成功)
  • 含义:Pod 中所有容器成功终止且不再重启

  • 典型场景:

    • Job/CronJob 任务成功完成
    • 一次性数据处理 Pod 完成工作
    bash 复制代码
    kubectl get jobs # 查看完成的任务
4️⃣ Failed (失败)
  • 含义:所有容器终止,至少一个容器异常退出

  • 常见原因:

    • 应用程序崩溃(非0退出码)
    • OOM 内存溢出
    • 启动命令执行失败
    bash 复制代码
    kubectl logs <pod-name> --previous # 查看上次崩溃日志
5️⃣ Unknown (未知)
  • 含义:无法获取 Pod 状态

  • 根本原因:

    • 节点网络问题(kubelet 不可达)
    • Kubelet 进程崩溃
    • API Server 与节点通信中断
    bash 复制代码
    kubectl get nodes # 检查节点状态

子状态和特殊状态(非核心状态)

📦 ContainerCreating
  • 父状态:Pending 的子状态
  • 含义:容器创建过程中
  • 典型耗时点:
    • 拉取大尺寸容器镜像
    • 挂载网络存储卷
    • 创建容器运行时环境
♻️ CrashLoopBackOff
  • 父状态:Running 的异常状态
  • 含义:容器反复崩溃重启
  • 重启模式:指数退避策略(10s, 20s, 40s...)
  • 常见原因:
    • 应用配置错误
    • 资源不足(CPU/内存)
    • 依赖服务不可用
🚫 ImagePullBackOff
  • 父状态:Pending 的子状态
  • 含义:拉取容器镜像失败后的重试状态
  • 常见原因:
    • 镜像名称/标签错误
    • 私有镜像认证失败
    • 镜像仓库不可访问
Terminating
  • 触发动作:删除操作后

  • 含义:Pod 关闭过程中

  • 阶段:

    1. 发送 SIGTERM 信号
    2. 等待优雅关闭(默认30秒)
    3. 强制终止(SIGKILL)
    bash 复制代码
    kubectl delete pod <name> --grace-period=0 --force # 强制删除
🔄 Error
  • 含义:容器无法正常启动(非崩溃状态)
  • 常见错误:
    • 启动命令执行错误
    • 不兼容的运行时环境
    • 挂载路径不存在

Pod 生命周期示意图

镜像拉取/资源分配 容器创建完成 容器异常退出 容器正常退出 容器非零退出 镜像拉取失败 删除请求 节点通信失败 Pod创建 Pending ContainerCreating Running CrashLoopBackOff Succeeded Failed ImagePullBackOff Terminating 删除完成 Unknown

关键运维要点

  1. 状态转换路径

    • Pending → ContainerCreating → Running → Terminating
    • 异常路径:Pending → ImagePullBackOffRunning → CrashLoopBackOff
  2. 查看完整状态链

    bash 复制代码
    kubectl get pods -o wide
    kubectl describe pod <pod-name>
  3. 状态诊断三要素

    bash 复制代码
    # 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)、容器日志和节点状态进行综合分析。

相关推荐
armcsdn5 小时前
基于Docker Compose部署Traccar容器与主机MySQL的完整指南
mysql·docker·容器
铅笔侠_小龙虾7 小时前
Docker 实战 -- Mysql
mysql·docker·容器
阿里云云原生8 小时前
Higress MCP 服务管理,助力构建私有 MCP 市场
云原生
IvanCodes8 小时前
三、Docker常用命令
docker·容器
zzywxc7879 小时前
云原生 Serverless 架构下的智能弹性伸缩与成本优化实践
云原生·架构·serverless
海星船长丶10 小时前
基于docker进行渗透测试环境的快速搭建(在ubantu中docker设置代理)
运维·docker·容器
KubeSphere 云原生10 小时前
Higress 上架 KubeSphere Marketplace,助力企业构建云原生流量入口
云原生
AKAMAI14 小时前
在Akamai平台上进行VOD转码的参考架构
后端·云原生·云计算