如何使用kubectl统计命名空间内无名为main容器的Deployment数量
统计指定命名空间下无"main"容器的Deployment方案
你之前的命令直接打平了所有容器名,丢失了容器和上层Deployment的关联关系,只要在jq处理时保留Deployment维度做筛选即可。
前置说明
查询指定命名空间需要在kubectl命令中添加-n <目标命名空间>参数,不加则默认查询当前上下文的default命名空间。
常用命令
- 列出所有不包含名为"main"容器的Deployment名称
kubectl get deploy -n <目标命名空间> -o json | jq -r '.items[] | select(.spec.template.spec.containers | all(.name != "main")) | .metadata.name'
命令逻辑说明:
遍历每一个Deployment资源
筛选出「所有容器名称都不等于main」的Deployment
输出符合条件的Deployment名称,
-r参数用于去除结果的字符串引号,输出纯文本直接统计符合条件的Deployment总数量
kubectl get deploy -n <目标命名空间> -o json | jq '[.items[] | select(.spec.template.spec.containers | all(.name != "main"))] | length'
执行后会直接输出数字,就是需要的统计值。
- 排查容器归属(输出每个Deployment和其下所有容器名的对应关系)
如果需要核对每个容器属于哪个Deployment,执行以下命令即可:
kubectl get deploy -n <目标命名空间> -o json | jq -r '.items[] | "\(.metadata.name): \(.spec.template.spec.containers[].name)"'
输出格式为Deployment名称: 容器名称,每行一条记录,不会出现归属无法对应的问题。
如果你需要把初始化容器(initContainers)也纳入判断范围,只要在jq的判断条件里把initContainers的校验加上即可,比如判断普通容器和初始化容器里都没有名为main的容器时才计入统计。
内容的提问来源于stack exchange,提问作者James Cockbain
相关产品推荐
相关产品推荐

