kubectl系列(十二):查询pod的resource 配置
在 Kubernetes 中,可以通过 kubectl
命令快速查询 Pod 的资源请求(requests
)和限制(limits
)配置。以下是多种方法实现这一目标:
1. 查看 Pod 的资源请求和限制(基础版)
使用 kubectl describe
直接查看 Pod 的详细信息:
kubectl describe pod <pod-name> -n <namespace>
在输出中找到 Containers 部分,例如:
Containers:nginx:Image: nginx:alpineLimits:cpu: 1memory: 512MiRequests:cpu: 500mmemory: 256Mi
2. 使用自定义列显示资源信息
通过 kubectl get pod
的 --custom-columns
参数生成表格:
kubectl get pods -n <namespace> \--custom-columns="NAME:.metadata.name,CPU-REQUEST:.spec.containers[*].resources.requests.cpu,CPU-LIMIT:.spec.containers[*].resources.limits.cpu,MEMORY-REQUEST:.spec.containers[*].resources.requests.memory,MEMORY-LIMIT:.spec.containers[*].resources.limits.memory"
输出示例:
NAME CPU-REQUEST CPU-LIMIT MEMORY-REQUEST MEMORY-LIMIT
nginx-pod 500m 1 256Mi 512Mi
3. 通过 JSONPath 提取资源信息
使用 kubectl
结合 JSONPath 过滤关键字段:
kubectl get pod <pod-name> -n <namespace> -o jsonpath='{range .spec.containers[*]}{"Container: "}{.name}{"\nRequests: "}{.resources.requests}{"\nLimits: "}{.resources.limits}{"\n"}{end}'
输出示例:
Container: nginx
Requests: map[cpu:500m memory:256Mi]
Limits: map[cpu:1 memory:512Mi]
4. 查看 YAML 格式的完整资源配置
获取 Pod 的 YAML 定义并过滤 resources
字段:
kubectl get pod <pod-name> -n <namespace> -o yaml | grep -A 5 resources
输出示例:
resources:limits:cpu: "1"memory: 512Mirequests:cpu: 500mmemory: 256Mi
5. 批量导出所有 Pod 的资源配置
生成 CSV 报告:
kubectl get pods -n <namespace> -o jsonpath='{range .items[*]}{.metadata.name}{","}{.spec.containers[*].resources.requests.cpu}{","}{.spec.containers[*].resources.limits.cpu}{","}{.spec.containers[*].resources.requests.memory}{","}{.spec.containers[*].resources.limits.memory}{"\n"}{end}' > pod-resources.csv
文件内容示例:
nginx-pod,500m,1,256Mi,512Mi
redis-pod,100m,200m,128Mi,256Mi
6. 结合 jq
工具高级过滤
安装 jq
后解析 JSON 输出:
kubectl get pod <pod-name> -n <namespace> -o json | jq '.spec.containers[] | {name: .name, requests: .resources.requests, limits: .resources.limits}'
输出示例:
{"name": "nginx","requests": {"cpu": "500m","memory": "256Mi"},"limits": {"cpu": "1","memory": "512Mi"}
}
常见问题排查
Q1:资源字段为空
-
原因:Pod 未设置
requests/limits
。 -
解决:检查 Deployment 或 Pod 定义是否遗漏资源配置。
Q2:单位混淆
-
CPU:
1
= 1 核,500m
= 0.5 核。 -
内存:
1Gi
= 1024Mi,1G
= 1000MB(注意单位区分)。
Q3:资源配额冲突
若 Pod 因资源不足无法调度,检查命名空间的 ResourceQuota:
kubectl describe resourcequota -n <namespace>
总结
方法 | 场景 | 优点 | 缺点 |
---|---|---|---|
kubectl describe | 快速查看单个 Pod 详情 | 无需记忆复杂命令 | 信息冗余,需手动筛选 |
自定义列 | 批量生成清晰表格 | 适合导出和分享 | 需记忆列定义 |
JSONPath + jq | 高级过滤和结构化输出 | 灵活,适合自动化处理 | 依赖 jq 工具 |
根据需求选择合适的方法,快速定位资源瓶颈!