命令定位
-o custom-columns 让 kubectl get 按你指定的列名与取值路径输出表格,列名自己起、字段可以跨层级取(比如同时列出命名空间、Pod 名、IP、节点、QoS 类)。适用平台是 Kubernetes。它比 -o wide 固定的那几列灵活,比 jsonpath 更适合直接给人看和留档,是日常巡检、写报告、输出到工单时最顺手的一种输出格式。
基本信息
| 适用平台 | Kubernetes,任意 kubectl 版本 |
|---|---|
| 语法 | kubectl get <资源> -o custom-columns='<列名>:<jsonpath>,...' |
| 取值路径 | JSONPath 写法,不支持过滤与循环,只做取值 |
| 权限要求 | 与普通 get 一致,只需对应资源的读权限 |
典型使用场景
- 巡检留档:一次列出 Pod 名、节点、IP、QoS、重启次数,贴进日报或工单
- 容量盘点:列 Deployment 的期望副本、就绪副本与镜像版本,快速找出没就绪的工作负载
- 跨命名空间清点:加 -A 后把命名空间作为第一列,全局视角看资源分布
- 对接脚本:输出结果稳定、字段可控,适合再喂给 awk 或 Excel 做二次处理
- 核对标签与注解:把关键注解拉成表,检查各环境是否对齐
常用示例
常用示例
kubectl get pods -o custom-columns='NAME:.metadata.name,IP:.status.podIP,NODE:.spec.nodeName'
kubectl get deploy -o custom-columns='NAME:.metadata.name,READY:.status.readyReplicas,IMAGE:.spec.template.spec.containers[0].image'
kubectl get pods -A -o custom-columns='NS:.metadata.namespace,NAME:.metadata.name,QOS:.status.qosClass'
kubectl get pvc -A -o custom-columns='NS:.metadata.namespace,NAME:.metadata.name,SC:.spec.storageClassName,SIZE:.spec.resources.requests.storage'
kubectl get pods -o custom-columns='NAME:.metadata.name,RESTARTS:.status.containerStatuses[0].restartCount,PHASE:.status.phase' | sort -t' ' -k2 -n输出逐列读法
| 现象 | 含义 | 排查方向 |
|---|---|---|
| 显示 <none> | 该路径在对象里不存在(或数组下标越界) | 确认字段名与下标,多容器要逐个列 |
| 整列空白 | 路径拼写错误但语法合法 | 先用 -o yaml 对照实际结构 |
| 数值为 0 或缺失 | 字段尚未被控制器写入 | 对象可能刚创建或未就绪 |
| 列名乱掉 | 列名里含逗号或冒号 | 列名改用下划线,避免解析被破坏 |
取值只查第一层匹配:容器列表写 containers[0] 就只取第一个容器,多容器场景建议用 -o jsonpath 配合 range 循环,或直接看 describe 输出。
custom-columns 不做过滤与排序,需要筛选时配合 --field-selector、-l 选择器或管道后的 sort、awk 使用,组合起来比单独写脚本更省事。