繁体   English   中英

列出 kubernetes 中每个命名空间的 pod

[英]List pods per namespace in kubernetes

我的集群中有几个命名空间,并且想要一个类似的日志:

NAMESPACE            NAME                                          PODS  
MY_NAMESPACE         my_ns6446f67599-25g7f                         10   

你也可以试试这个:

kubectl get pods --all-namespaces | awk '{print $1}' | sort | uniq -c | sort -k1 -n -r

这将产生:

136 some-ns
133 kube-system
119 other-ns

稍微解释一下:

  • kubectl get pods --all-namespaces将在第一列列出所有具有命名空间的 pod。
  • awk { print $1 }将“过滤掉”作为命名空间的第一列
  • sort将按字母顺序对命名空间的名称进行排序
  • uniq -c将计算每个命名空间出现的次数,并将计数作为第一列进行聚合(例如, 136 some-ns表示some-ns出现了 136 次)。
  • sort -k1 -n -r这个将从出现最多的命名空间(即拥有最多 pod)到出现最少的命名空间进行排序。 -k1表示我正在使用第一列进行排序, -n表示我正在使用数字比较, -r表示我正在执行反向排序。

您可以使用--all-namespaces标志来获取 pod。

kubectl get pods --all-namespaces

从您的输出来看,您似乎正在尝试打印replicaset集,因为输出中有一个 PODs 计数列。

kubectl get replicaset --all-namespaces

如果要限制结果列,我们可以使用--0 custom-columns=参数,如下所示。

$ kubectl get replicaset --all-namespaces -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name,PODS:.status.replicas     
NAMESPACE            NAME                                          PODS  
MY_NAMESPACE         my_ns6446f67599-25g7f                         10  

该解决方案结合了kubectl get podskubectl get namespaces的 json 输出,以便同时显示未部署 pod 的命名空间。

kubectl get pods -o json --all-namespaces | jq --argjson ns "$(kubectl get namespaces -o json)" '.items | group_by(.metadata.namespace) | map({namespace: .[].metadata.namespace, count: . | length}) | . += ($ns.items | map({namespace: .metadata.name, count: 0})) | unique_by(.namespace) | sort_by(.count)'

该解决方案提供了一个按 pod 数量升序排序的 json 对象数组,并且可以轻松扩展以获得所需的输出。

当我们将包含命名空间的$ns变量的内容添加到 count=0 的数组末尾时,就会发生“魔术”。 如果之前已经找到命名空间,则这些条目将被unique_by丢弃-这意味着它包含 pod-。

注意:该解决方案依赖于 jq 的unique_by函数来丢弃具有相同键值的对象的第二次出现,对于文档而言,它没有被授予,但它恰好以这种方式实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM