如何在运行该pod的节点上获取pod名称和名称空间?



在cgroups kubepods下,节点有大量用于度量收集的信息。比如切片。但是为了完成这个度量,你必须把一个pod度量和一个pod名称联系起来。名称和名称空间本身是pod的一种静态度量,因此它们是与pod uid一起用来描述pod的第一件事。我如何从不使用kubectl和不访问远程kubernetes数据库的节点获得此信息?

我只能找到容器id/pod id作为cgroup结构的一部分。名称和名称空间在哪里?(理想情况下是一个完整的yaml清单,将它存储在运行pod的节点上并不难,对吧?)

如果它没有这个信息-为什么?这违反了收集实践,您不能将检测作为收集pod指标的单个程序来执行—您将需要外部进程来对这些指标进行后处理,为pod名称和名称空间提供相应的uid,当您可以在节点本身上运行1个小程序时,这绝对不是正确的方法

您可以使用dockerinspect:

docker inspect <container-id> --format='{{index .Config.Labels "io.kubernetes.pod.name"}
docker inspect <container-id> --format='{{index .Config.Labels "io.kubernetes.pod.namespace"}}'

下面的命令将列出该节点上运行的所有pod及其命名空间。你可以使用docker的data目录,它在那里维护pod信息。

find /var/lib/docker -name config.v2.json -exec perl -lnpe 's/.*pod.name"*s*:s*"*([^"]+).*pod.namespace"*s*:s*"*([^"]+).*/pod-name=$1 pod-namespace=$2/g' {} + |awk '!a[$0]++'|column -t

例子:

find /var/lib/docker -name config.v2.json -exec perl -lnpe 's/.*pod.name"*s*:s*"*([^"]+).*pod.namespace"*s*:s*"*([^"]+).*/pod-name=$1 pod-namespace=$2/g' {} + |awk '!a[$0]++'|column -t
pod-name=huha              pod-namespace=foo
pod-name=zoobar1           pod-namespace=default
pod-name=kube-proxy-l2hsb  pod-namespace=kube-system
pod-name=weave-net-rbbwf   pod-namespace=kube-system
pod-name=zoobar2           pod-namespace=default

IMO,解析可以用jq完成,我在这里使用regex来展示使用docker data dir.

获取这些值的可能性注意:对于crio,类似的json放在覆盖目录下。

相关内容

  • 没有找到相关文章

最新更新