我在Grafana仪表板中查看Prometheus指标,但我对一些面板感到困惑,这些面板根据我不熟悉的ID显示指标。我假设/kubepods/burstable/pod99b2fe2a-104d-11e8-baa7-06145aa73a4c指向单个 pods ,并且我假定/kubepods/burstable/pod99b2fe2a-104d-11e8-baa7-06145aa73a4c/<another-long-string>解析为 pods 中的一个容器,但是我如何将该ID解析为 pods 名称和一个容器,即如何将该ID映射到我的 pods 名称看到我何时运行kubectl get pods吗?

我已经尝试运行kubectl describe pods --all-namespaces | grep "99b2fe2a-104d-11e8-baa7-06145aa73a4c",但是没有打开任何东西。

此外,/kubepods中有几个子路径,例如/kubepods/burstable/kubepods/besteffort。这些是什么意思,给定的 pods 如何落入这些子路径中的一个或另一个?

最后,在哪里可以了解有关如何管理/kubepods的更多信息?

普罗米修斯查询:

sum (container_memory_working_set_bytes{id!="/",kubernetes_io_hostname=~"^$Node$"}) by (id)

/ kubernetes - 如何将/kubepods/besteffort/pod &lt;uuid&gt;解析为 pod 名称?-LMLPHP

谢谢阅读。

埃里克

最佳答案

好的,既然我已经做了一些挖掘工作,那么我将尝试回答我自己的所有3个问题。我希望这可以帮助其他人。

如何将该ID映射到运行kubectl get pods时看到的pod名称?

给定以下/kubepods/burstable/pod99b2fe2a-104d-11e8-baa7-06145aa73a4c,最后一位是容器UID,可以通过查看容器 list 上的metadata.uid属性将其解析为容器:

kubectl get pod --all-namespaces -o json | jq '.items[] | select(.metadata.uid == "99b2fe2a-104d-11e8-baa7-06145aa73a4c")'

将UID解析为Pod之后,我们可以将第二个UID(容器ID)解析为容器,方法是将其与Pod list 中的.status.containerStatuses[].containerID匹配:
~$ kubectl get pod my-pod-6f47444666-4nmbr -o json | jq '.status.containerStatuses[] | select(.containerID == "docker://5339636e84de619d65e1f1bd278c5007904e4993bc3972df8628668be6a1f2d6")'

此外,/ kubepods中有几个子路径,例如/ kubepods / burstable和/ kubepods / besteffort。这些是什么意思,给定的 pods 如何落入这些子路径中的一个或另一个?

突发性,最佳努力和保证性是Kubernetes根据Pod规范中的内存和cpu分配分配给Pod的服务质量(QoS)类。有关QoS类的更多信息,请参见https://kubernetes.io/docs/tasks/configure-pod-container/quality-service-pod/

报价:



最后,我在哪里可以了解有关管理/ kubepods的内容的更多信息?
/kubepods/burstable/kubepods/besteffort/kubepods/guaranteed都是cgroups层次结构的一部分,位于/ sys / fs / cgroup目录中。 Cgroups管理容器进程(例如CPU,内存,磁盘I / O和网络)的资源使用情况。每个资源在cgroup层次结构文件系统中都有自己的位置,并且在每个资源子目录中都是/ kubepods子目录。有关cgroup和Docker容器的更多信息,请参见:https://docs.docker.com/config/containers/runmetrics/#control-groups

07-24 13:02