Prometheus 中的 container="POD" 标签是啥,为啥大多数示例都排除了它?
Posted
技术标签:
【中文标题】Prometheus 中的 container="POD" 标签是啥,为啥大多数示例都排除了它?【英文标题】:What is the container="POD" label in Prometheus and why do most examples exclude it?Prometheus 中的 container="POD" 标签是什么,为什么大多数示例都排除了它? 【发布时间】:2021-10-11 10:56:03 【问题描述】:我已经阅读了一堆指南,展示了如何使用 Prometheus 监控 Kubernetes 中 pod 的 cpu 和内存使用情况,其中大多数看起来像这样:
rate(container_cpu_usage_seconds_totalpod=~"compute-.*", image!="", container!="POD"[5m])
但我找不到任何关于容器标签为何存在的文档(似乎它会导致重复数据)以及为什么在许多监控示例中都避免使用它。 我知道这个指标来自 Kubernetes 的 cadvisor 组件,但我能找到的关于这些指标的唯一文档是代码 here 中提供的简短描述。
有谁知道这个标签是干什么用的,哪里有没有这些指标的更深入的文档?
【问题讨论】:
您能否提供有关指南的其他信息,您在哪里找到了这些信息? - 链接、屏幕截图……这将有助于更好地理解问题。 就是here描述的“暂停容器”。 【参考方案1】:正如@Ali Sattari 在评论中已经提到的那样,容器是暂停容器。
暂停容器
暂停容器首先启动,然后再调度其他 pod。 pause 容器 (container_name="POD"
) 的目的是为 pod 和其他容器提供网络命名空间,这些容器将分配给该 pod。 pause 容器的图像始终存在于 Kubernetes 中。因此,pod 资源的分配是即时的。暂停容器启动后,他就没有其他工作了。
默认情况下,暂停容器是隐藏的,但您可以通过运行下一条命令来查看它们:docker ps | grep pause
$ docker ps | grep pause
3bb5065dd9ba k8s.gcr.io/pause:3.2 "/pause" 3 minutes ago Up 3 minutes k8s_POD_kubernetes-bootcamp-fb5c67579-5rxjn_default_93ce94f8-b440-4b4f-9e4e-25f97be8196f_0
0627138518e1 k8s.gcr.io/pause:3.2 "/pause" 3 minutes ago Up 3 minutes k8s_POD_metrics-server-56c4f8c9d6-vf2zg_kube-system_93626697-8cd0-4fff-86d3-245c23d74a42_0
81ca597ed3ff k8s.gcr.io/pause:3.2 "/pause" 3 minutes ago Up 3 minutes k8s_POD_storage-provisioner_kube-system_dbdec6e5-d3ed-4967-a042-1747f8bdc39a_0
0d01130b158f k8s.gcr.io/pause:3.2 "/pause" 3 minutes ago Up 3 minutes k8s_POD_kubernetes-dashboard-968bcb79-pxmzb_kubernetes-dashboard_b1265ad7-2bce-46aa-8764-d06d72856633_0
d8a159b6215e k8s.gcr.io/pause:3.2 "/pause" 3 minutes ago Up 3 minutes k8s_POD_dashboard-metrics-scraper-f6647bd8c-hqm6k_kubernetes-dashboard_bde40acc-a8ca-451a-9868-26e86ccafecb_0
294e81edf0be k8s.gcr.io/pause:3.2 "/pause" 3 minutes ago Up 3 minutes k8s_POD_coredns-74ff55c5b-84vr7_kube-system_28275e83-613a-4a09-8ace-13d6e831c1bf_0
2b3bfad1201b k8s.gcr.io/pause:3.2 "/pause" 3 minutes ago Up 3 minutes k8s_POD_kube-proxy-zxjgc_kube-system_34f8158a-487e-4d00-80f1-37b67b72865e_0
d5542091730b k8s.gcr.io/pause:3.2 "/pause" 4 minutes ago Up 4 minutes k8s_POD_kube-scheduler-minikube_kube-system_6b4a0ee8b3d15a1c2e47c15d32e6eb0d_0
b87163ed2c0a k8s.gcr.io/pause:3.2 "/pause" 4 minutes ago Up 4 minutes k8s_POD_kube-controller-manager-minikube_kube-system_57b8c22dbe6410e4bd36cf14b0f8bdc7_0
c97ed96ded60 k8s.gcr.io/pause:3.2 "/pause" 4 minutes ago Up 4 minutes k8s_POD_etcd-minikube_kube-system_62a7db7bebf35458f2365f79293db6d3_0
4ab2d11317ed k8s.gcr.io/pause:3.2 "/pause" 4 minutes ago Up 4 minutes k8s_POD_kube-apiserver-minikube_kube-system_dc477bf6fc026f57469b47d9be68a88c_0
您可以阅读有关暂停容器的更多信息here。
在 Prometheus 中暂停容器
在为 Prometheus 提供的示例中,您经常可以看到下一个限制:container_name!="POD"
,因为仅针对当前工作的必要容器请求资源使用是很有用的,而不需要暂停容器的信息。
【讨论】:
以上是关于Prometheus 中的 container="POD" 标签是啥,为啥大多数示例都排除了它?的主要内容,如果未能解决你的问题,请参考以下文章
Prometheus kube_pod_container_status_waiting_reason 未捕获 pod CrashLoopBackOff 原因
无法启动服务 prometheus:oci 运行时错误:container_linux.go:235:启动容器进程导致“容器初始化过早退出”
cAdvisor Prometheus container_cpu_load_average_10s具有两个值