kubectl -o 输出格式是什么
-o 参数决定 kubectl get 等命令的输出形态:yaml 与 json 输出完整对象定义,适合查看结构与保存快照;jsonpath 与 custom-columns 用于精确取字段,写脚本或做批量检查时比 grep 稳定得多;name 输出 kind/name 形式,方便接管道进一步处理。日常取状态、IP、镜像版本这类信息,用 jsonpath 和自定义列比肉眼翻表格更可靠。
基本信息
| yaml / json | -o yaml 查看完整定义(含 status),适合对比与留档 |
|---|---|
| jsonpath | -o jsonpath='{.items[*].metadata.name}',支持 range 遍历 |
| custom-columns | -o custom-columns=名字:.metadata.name,节点:.spec.nodeName |
| name | -o name 输出 kind/name 形式,便于管道传递 |
| 排序与筛选 | --sort-by 配合字段使用,复杂需求交给 jq 处理 |
典型使用场景
- 批量导出资源清单留档,或对比变更前后的对象定义
- 脚本中稳定提取字段(Pod IP、节点、镜像版本)做巡检与报表
- 发布核对:确认 Deployment 中实际运行的镜像 tag 与预期一致
- 排查时挑出特定状态的资源清单,再逐个 describe 深入
- 把资源导出为 yaml 作为模板,修改后重新应用
实用示例
实用示例
kubectl get pods -o custom-columns=名字:.metadata.name,IP:.status.podIP,节点:.spec.nodeName
kubectl get deploy web -o jsonpath='{.spec.template.spec.containers[*].image}'
kubectl get pods -o name | head
kubectl get pods -o yaml > pods.yaml # 完整定义留档
kubectl get pods --sort-by=.status.startTime -o wide输出格式选择
| 格式 | 输出内容 | 适用场景 |
|---|---|---|
| -o wide | 表格加额外列(IP、节点) | 人工快速浏览 |
| -o yaml / json | 完整对象定义 | 留档、对比、改造成模板 |
| -o jsonpath | 按路径取字段 | 脚本提取单个或少量字段 |
| -o custom-columns | 自选列的输出表 | 巡检报表、多字段对照 |
| -o name | kind/name 列表 | 接管道做批量操作 |
jsonpath 里用 {range .items[*]}…{end} 做遍历,注意加 -n 指定命名空间;当需求变复杂(多字段组合、条件过滤)时,直接用 -o json 交给 jq 处理更省事。
用 -o name 或 jsonpath 得到清单后接批量删除时要格外谨慎:先不加 | xargs 跑一遍确认输出,再执行删除,选择器写宽一点就是一次批量误操作。
输出格式也能用于提交前的干跑校验:kubectl create -f x.yaml --dry-run=client -o yaml 会打印将要提交的对象内容,用来确认字段拼写与嵌套层级,避免带着错误字段直接打到集群上;结合 diff 还能对比线上对象与本地模板的差异。