在Kubernetes集群中,Pod是最小的调度单元,节点是实际运行负载的计算资源。无论是应用发布后的健康检查,还是集群异常时的快速定位,第一步往往都是查看Pod与节点的状态。kubectl是管理Kubernetes集群的核心命令行工具,通过它可以获取集群资源的概况和详细信息。本文以最常用的 get 和 describe 命令为主线,介绍如何查看Pod和节点的状态字段、常用过滤参数以及排查思路。

使用 kubectl get pods 查看 Pod 状态
执行 kubectl get pods 会列出当前命名空间下所有Pod的基本信息。默认情况下,kubectl连接的是default命名空间,输出表格包含NAME、READY、STATUS、RESTARTS和AGE五个字段。NAME对应Pod的名称,通常由控制器名称加上随机后缀组成;READY表示就绪容器数与期望容器数的比值,例如1/1表示全部就绪;STATUS是Pod的生命周期阶段;RESTARTS记录了容器重启次数;AGE则是从创建到当前时刻的存活时间。理解这些字段是判断应用是否正常的基础。
以下命令演示了最基本的Pod列表查询:
kubectl get pods
除了默认输出,-o wide参数可以显示更多实用信息,例如Pod IP、所在的节点名称以及容器ID等。运维人员常常希望跨命名空间查看全部Pod,这时可以使用 kubectl get pods -A 或 kubectl get pods --all-namespaces。如果需要按标签筛选Pod,可以使用 -l 参数,例如 kubectl get pods -l app=nginx 只显示带有 app=nginx 标签的Pod。监听模式 -w 则会持续输出Pod状态的变更事件,适合在发布过程中实时观察容器重启和就绪变化。
# 查看所有命名空间的Pod并显示更多列 kubectl get pods -A -o wide # 按标签过滤 kubectl get pods -l app=nginx # 持续监听状态变化 kubectl get pods -w
当Pod的STATUS不是Running时,需要重点关注。常见的异常状态包括Pending、ImagePullBackOff、CrashLoopBackOff、Error等。Pending通常说明调度失败或资源不足,ImagePullBackOff表示镜像拉取失败,CrashLoopBackOff则是容器启动后反复崩溃。RESTARTS列如果数字持续增长,说明容器可能因为探针失败或进程退出而不断重启。此时仅靠get命令无法定位根本原因,需要借助describe查看详细事件。
使用 kubectl get nodes 查看节点状态
节点是承载所有Pod运行的计算单元,节点状态异常会直接影响其上的应用。执行 kubectl get nodes 可以查看集群中所有节点的基本信息,输出列包括NAME、STATUS、ROLES、AGE和VERSION。NAME是节点的主机名,STATUS表示节点是否就绪,ROLES显示节点角色,例如control-plane、master或worker,VERSION则是kubelet的版本号。
kubectl get nodes
节点STATUS字段最常见的值是Ready,表示节点上的kubelet能够正常上报状态并接受调度。如果出现NotReady,说明节点与API server之间的心跳出现异常,可能涉及网络故障、kubelet进程停止、证书过期或磁盘故障等。Unknown状态较少见,通常表示API server暂时无法获取该节点的信息。还可以看到某些节点带有 SchedulingDisabled 标记,这表示节点被手动隔离,不再接受新的Pod调度,常见于维护操作。
使用 -o wide 可以展示节点的内部IP、外部IP、操作系统和内核版本等信息。例如:
kubectl get nodes -o wide
如果集群节点数量较多,可以结合标签筛选或 --show-labels 参数查看节点上的标签。节点标签通常用于Pod的节点选择器或污点容忍设置。对于节点状态异常的初步排查,可以先查看节点是否为Ready,再通过describe命令了解详细的状态条件和事件。
使用 kubectl describe 深入排查
kubectl get 命令适合快速浏览,而 kubectl describe 会输出资源对象的详细描述,包括事件列表、状态条件、关联的卷和容器信息等。对于Pod来说,describe命令的Events部分是排查问题的核心。下面是一个典型的Pod查看命令:
kubectl describe pod nginx-deployment-7c5ddbdf54-abcde
在Pod的describe输出中,可以先看Containers段中的State和Last State字段。State如果是Waiting,会显示Reason,例如ImagePullBackOff或CrashLoopBackOff;如果是Terminated,会给出Exit Code和原因。Last State则记录了上一次容器的运行结果,有助于判断容器是否反复崩溃。Events部分按时间顺序记录了调度、镜像拉取、容器启动和探针失败等关键事件。例如若出现Failed to pull image,说明镜像地址错误或仓库权限不足;若出现Back-off restarting failed container,则说明容器启动后立即退出,需要结合应用日志进一步分析。
节点同样可以使用describe命令查看详细信息:
kubectl describe node worker-01
节点describe输出中,Conditions字段是最重要的部分,包括Ready、MemoryPressure、DiskPressure、PIDPressure等条件。如果MemoryPressure为True,表示节点内存资源紧张,新的Pod可能无法调度;DiskPressure为True表示磁盘空间不足;PIDPressure为True则说明进程数接近上限。Capacity和Allocatable字段分别表示节点的总资源量和可分配资源量,运维人员可以据此判断资源是否被过度分配。除此之外,System Info展示了内核、容器运行时和kubelet版本,方便排查版本兼容问题。
输出格式化与常见查看技巧
手动查看表格虽然直观,但在编写脚本或提取特定字段时,可以使用 -o 输出格式。例如 -o jsonpath 可以提取Pod的镜像名称:
kubectl get pods -o jsonpath='{.items[*].spec.containers[*].image}'
如果希望按某个字段排序,可以使用 --sort-by 参数。例如按Pod启动时间倒序排列,可以快速找到最近创建的Pod:kubectl get pods --sort-by=.status.startTime。自定义列功能还允许自由组合输出字段,例如 kubectl get pods -o custom-columns=NAME:.metadata.name,NODE:.spec.nodeName,STATUS:.status.phase。这些技巧在批量运维和自动化监控中非常实用。
# 按启动时间排序 kubectl get pods --sort-by=.status.startTime # 自定义输出列 kubectl get pods -o custom-columns=NAME:.metadata.name,NODE:.spec.nodeName,STATUS:.status.phase
对于资源使用情况,如果集群中部署了metrics-server,还可以使用 kubectl top pods 和 kubectl top nodes 查看CPU和内存的实时消耗。结合前面的状态查看命令,可以形成一条完整的排查链路:先通过get pods确认哪个Pod异常,再用get nodes检查对应节点是否健康,随后用describe pod查看事件,必要时查看容器日志定位应用错误。命名空间是区分环境的重要维度,执行命令时建议明确指定 -n 参数,避免在default命名空间中遗漏其他环境的资源。
掌握这些基础但实用的查看方法,可以大幅提升Kubernetes日常运维和故障排查效率。命令行输出看似简单,但每个字段背后都对应着Kubernetes控制器、调度器和kubelet的协作逻辑,熟悉它们有助于更快找到问题根因。
Kubernetes Pod节点查看kubectl命令修改时间:2026-10-07 01:49:50