kubectl get 是什么
kubectl get 是 Kubernetes 里使用频率最高的查询命令,作用是列出某一类资源对象的摘要行。它向 API Server 发起一次 LIST 请求,默认只覆盖当前 context 的命名空间,再把返回的对象渲染成列名固定的表格。它的定位是「先看清有哪些、状态对不对」的第一步,确认目标之后再换专门的命令下钻。
与 describe 的分工
get 看列表与摘要,describe 看单个对象的完整状态与事件,logs 看容器进程自己的输出。三者不是替代关系:巡检查全貌用 get,判断某个对象为什么异常用 describe,确认应用内部报错用 logs。只靠 get 会出现「对象全都显示 Running、但服务其实是坏的」这类误判。
基本信息
| 适用环境 | 任何 Kubernetes 发行版,需要可用的 kubeconfig |
|---|---|
| 语法 | kubectl get <资源类型> [名称] [选项] |
| 默认范围 | 当前 context 指向的命名空间,跨命名空间加 -A 或 -n |
| 权限要求 | 对目标资源类型具备 get 与 list 权限,由 RBAC 决定 |
| 数据来源 | API Server 的实时对象列表,不是本地缓存快照 |
| 常用缩写 | po、deploy、svc、ns、no、sts、ds、cm、ing、pvc |
典型使用场景
- 快速巡检:确认某个命名空间里 Pod、Service、Deployment 的数量与状态是否正常
- 发布前后对比:发布前记录副本数与镜像版本,发布后核对新版本是否全部就绪
- 跨命名空间排查:加 -A 一次看清全集群哪些 Pod 不在 Running 或 Completed
- 脚本取值:配合 -o name 或 jsonpath 把资源名交给下一个命令处理,避免手工复制
- 定位归属:查看 Pod 所在节点、IP 与重启次数,判断是单点异常还是大面积问题
- 配合标签筛选:用 -l 只列出某个应用的一组对象,把观察范围缩小到相关资源
- 容量核对:看节点列表与状态,确认集群里没有 NotReady 的机器被忽略
常用示例
常用示例
kubectl get pods # 列出当前命名空间的 Pod 概况
kubectl get pods -A # 所有命名空间,排障第一步常用
kubectl get deploy,rs,pod -n prod # 一次看多层对象,理清控制器层级
kubectl get svc web -o yaml # 导出单个 Service 的完整定义
kubectl get pods -l app=web -w # 按标签筛选并持续观察变化
kubectl get nodes --show-labels # 节点列表带标签,核对调度约束用
kubectl get pods --field-selector status.phase!=Running -A # 只看相位异常的对象
kubectl get events --sort-by=.lastTimestamp | tail -20 # 顺带看最近事件输出逐列读法
| 列 | 含义 | 异常时的表现 |
|---|---|---|
| NAME | Pod 名称,通常由控制器名加模板哈希组成 | 哈希段变化说明刚发过版或模板被改过 |
| READY | 就绪容器数比总容器数 | 出现 0/1、1/2 表示有容器未通过就绪探针 |
| STATUS | 当前状态,如 Running、Pending、Error | Pending、CrashLoopBackOff 需立即下钻 |
| RESTARTS | 容器重启次数累计值 | 持续增长代表反复崩溃或被探针重启 |
| AGE | 对象创建至今的时长 | 很短说明刚被重建,控制器可能在反复拉起 |
| IP 与 NODE | 加 -o wide 后出现,表示 Pod 地址与落点 | 同一节点上的 Pod 集体异常说明是节点级问题 |
常用输出格式
| 格式 | 适用场景 |
|---|---|
| -o wide | 补充 IP、所在节点、运行时等定位字段,一眼看清落点 |
| -o yaml 与 -o json | 取完整对象用于分析、备份或改造成清单 |
| -o jsonpath | 脚本中精确提取单个字段值 |
| -o name | 只要资源名,直接交给下一个命令处理 |
| -o custom-columns | 自定义列,把关心的字段拼成自己的表格 |
资源类型支持缩写,写错时 kubectl 会列出可用资源名提示;列表查询的 jsonpath 用 .items[*],单对象查询直接从 {.field} 开始。
排查顺序上先 get 看现象、再 describe 看条件与事件:摘要列读不出容器退出原因,需要 describe 或 -o yaml 补充。
get 的结果只说明对象存在,不等同于服务可用:端点为空、探针不通过、应用自身报错都不会体现在摘要列里。