【问题标题】:How to get a pod name and namespace on a node running that pod?如何在运行该 pod 的节点上获取 pod 名称和命名空间?
【发布时间】:2021-12-06 17:12:11
【问题描述】:

一个节点有大量的指标收集信息,例如在 cgroups kubepods.slice 下。但要完成指标,您必须将 pod 指标与 pod 名称相关联。名称和命名空间本身是 pod 的一种静态度量,因此它们与 pod uuid 一起是描述 pod 的首要任务。如何从不使用 kubectl 且不访问 pod 的远程 kubernetes 数据库的节点获取此信息?

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

如果它没有此信息 - 为什么?这违反了收集实践,您不能将检测作为一个单独的程序来收集 pod 指标 - 您将需要外部进程来后处理此类指标、对应 uuid 到 pod 名称和命名空间,这绝对不是正确的方法,当您节点本身可以​​运行1个小程序

【问题讨论】:

  • 试试这个find /var/lib/kubelet/pods -name etc-hosts -exec grep -ohP '^\d+\.\d+\.\d+\.\d+\s+\K.*' {} + |grep -vE "localhost|$(hostname)"这只是部分或部分答案。
  • @ChinHuang no.我想在运行 kubelet 的节点上获取所有 pod 名称
  • @P.... 是的,它有一个 pod 名称 + 容器文件夹包含所有容器名称,这非常好。唯一的问题 - 是否可以获得命名空间?
  • 您使用的是哪个容器运行时?

标签: kubernetes cri-o


【解决方案1】:

您可以使用docker 检查:

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 的数据目录来维护 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 被放置在 overlay 目录下。请参阅下面的 OP 评论。

【讨论】:

  • 不错的收获!如果我使用 crio 是一样的吗?
  • 你应该可以在/var/lib/containers 找到类似的信息,我不确定数据的结构,因为我没有环境来测试crio
  • 你是对的。在 crio 中它更容易 - 您在覆盖文件夹中只有 1 个 json 文件,其中包含所需的所有信息,要收集的系统调用要少得多。感谢您的想法挽救了我们的生命)
猜你喜欢
  • 2022-12-21
  • 2020-09-12
  • 2020-06-17
  • 2018-02-13
  • 2017-12-11
  • 2022-08-23
  • 1970-01-01
  • 2019-04-24
  • 2022-01-27
相关资源
最近更新 更多