kubernetes Command

kubectl 排查 Pod 状态常用命令

kubectl 排查 Pod 异常的核心命令组合,kubectl get pod 看状态与重启次数、describe pod 看调度/拉镜像/探针/OOM 事件、logs --tail=200 读近期日志,CrashLoopBackOff 场景加 --previous 读上一轮崩溃日志,exec -it 进容器复现问题。

Pod 异常优先 get 看状态、describe 看事件、logs 看应用错误,CrashLoop 场景记得加 --previous。

适用环境Kubernetes / kubectl / 容器运行时
风险等级
最后验证2026-06-30
建议权限普通用户

Scenario

什么时候用这组命令

这组命令适合在处理“kubectl 排查 Pod 状态常用命令”时作为第一轮检查模板。使用时先替换占位符,再在目标机器或目标 namespace 中执行,避免在错误环境里得到误导结论。

Input

你需要先准备什么

  • 先确认 namespace、资源名、节点、镜像和最近一次变更。
  • 按 Pod → Service/Endpoint → Ingress/外部入口的顺序定位,不要跳层。
  • 优先看 describe events 和上一轮容器日志,它们通常比状态字段更接近根因。

Risk Notes

执行风险

  • 不要直接删除有状态 Pod 或 PVC 来“试试”,先确认控制器和数据卷策略,避免数据丢失。
  • 不要只看当前容器日志,CrashLoop 场景必须看 --previous 获取上一轮崩溃的完整输出。
  • 不要在 production 集群上随意修改资源配额或节点标签,这类变更可能触发级联 Pod 调度。

Commands

命令详解

命令 1: 读取 Kubernetes 状态

用于读取 Kubernetes 当前资源状态和 Events。重点看 STATUS、RESTARTS 和 Events 中的调度、探针、镜像错误。

  • 先替换尖括号占位符,不要原样执行。
  • 确认命令运行位置正确。
  • 保留关键输出,方便和修复后对比。
命令 1: 读取 Kubernetes 状态
kubectl get pod -n <namespace> -o wide

命令 2: 读取 Kubernetes 状态

用于读取 Kubernetes Events、状态变化和资源引用关系。排查 Pod、Service、Ingress 时,它通常能直接暴露调度、拉镜像、探针或后端错误。

  • 先替换尖括号占位符,不要原样执行。
  • 确认命令运行位置正确。
  • 保留关键输出,方便和修复后对比。
命令 2: 读取 Kubernetes 状态
kubectl describe pod <pod> -n <namespace>

命令 3: 读取 Kubernetes 状态

用于读取容器应用日志。CrashLoop 场景优先加 --previous,因为当前轮日志可能还没来得及输出。

  • 先替换尖括号占位符,不要原样执行。
  • 确认命令运行位置正确。
  • 保留关键输出,方便和修复后对比。
命令 3: 读取 Kubernetes 状态
kubectl logs <pod> -n <namespace> --tail=200

命令 4: 读取 Kubernetes 状态

用于读取容器应用日志。CrashLoop 场景优先加 --previous,因为当前轮日志可能还没来得及输出。

  • 先替换尖括号占位符,不要原样执行。
  • 确认命令运行位置正确。
  • 保留关键输出,方便和修复后对比。
命令 4: 读取 Kubernetes 状态
kubectl logs <pod> -n <namespace> --previous

命令 5: 读取 Kubernetes 状态

用于补充“kubectl 排查 Pod 状态常用命令”的排查证据链。kubectl 的输出需要结合上下文其他命令交叉验证,不要单独依赖某一条结果下结论。

  • 先替换尖括号占位符,不要原样执行。
  • 确认命令运行位置正确。
  • 保留关键输出,方便和修复后对比。
命令 5: 读取 Kubernetes 状态
kubectl exec -it <pod> -n <namespace> -- sh

命令 6: 读取 Kubernetes 状态

用于读取 Kubernetes 当前资源状态和 Events。重点看 STATUS、RESTARTS 和 Events 中的调度、探针、镜像错误。

  • 先替换尖括号占位符,不要原样执行。
  • 确认命令运行位置正确。
  • 保留关键输出,方便和修复后对比。
命令 6: 读取 Kubernetes 状态
kubectl get events -n <namespace> --sort-by=.lastTimestamp

Workflow

建议执行顺序

按顺序执行,不要跳过确认类命令

先用只读命令确认状态,再执行会改变状态的命令。Pod 异常优先 get 看状态、describe 看事件、logs 看应用错误,CrashLoop 场景记得加 --previous。

  • 用 get pod 看状态、重启次数和节点。
  • 用 describe 看调度、拉镜像、探针和 OOM 事件。
  • 用 logs 查看当前容器日志,重启后用 --previous。
  • 需要进容器检查网络或文件时用 exec。
  • 结合 events 按时间线还原问题发生顺序。
按顺序执行,不要跳过确认类命令
kubectl get pod -n <namespace> -o wide
kubectl describe pod <pod> -n <namespace>
kubectl logs <pod> -n <namespace> --tail=200

把命令输出变成结论

命令本身不是结论。每次执行后要回答:目标是否存在、状态是否异常、异常是否能解释用户看到的现象。

  • 记录关键字段,而不是整屏复制
  • 把正常路径和异常路径输出对比
  • 输出为空也要解释:是确实没有,还是权限/过滤条件不对
把命令输出变成结论
kubectl describe pod <pod> -n <namespace>
kubectl logs <pod> -n <namespace> --tail=200
kubectl logs <pod> -n <namespace> --previous

执行前替换占位符并控制影响范围

包含 <service>、<pod>、<namespace>、<pid>、<container> 的命令必须先替换。涉及 reload、restart、KILL、vacuum、prune 的命令要确认影响范围。

  • 优先在测试环境或只读模式验证
  • 生产执行前保留回滚路径
  • 把最终可用命令写入工单或 runbook
执行前替换占位符并控制影响范围
kubectl exec -it <pod> -n <namespace> -- sh
kubectl get events -n <namespace> --sort-by=.lastTimestamp

Verification

怎么判断命令有效

  • 命令已在正确机器、正确用户、正确 namespace 或正确仓库下执行。
  • 输出能支撑明确判断:正常、异常、权限不足、目标不存在或需要下一跳排查。
  • 对有副作用的命令,已确认执行窗口、影响范围和回滚方式。

Prevention

沉淀到日常流程

  • 发布模板中强制包含 probes、资源限制和回滚策略,确保所有工作负载都有存活和就绪检查。
  • 把 Service selector、端口名和 labels 做成约定,减少手写漂移导致的网络断链问题。
  • 为镜像拉取、Pod 重启和 Ingress 5xx 建立基础告警,第一时间发现异常。
  • 定期用 kubectl cluster-info dump 和容器运行时检查集群健康状态,提前发现调度和资源问题。

常见问题

多容器 Pod 怎么看指定容器日志?

给 kubectl logs 增加 -c <container>,否则可能默认到第一个容器。

Long-tail SEO

你可能正在搜索这些报错

下面这些错误原文、场景词和中英文搜索词,都是排查同类问题时常见的入口。

  • kubectl 查看 pod 日志
  • kubectl describe pod
  • kubectl exec 进入容器
  • kubectl logs 查看日志
  • kubectl 调试 pod
  • k8s pod 排查命令