kubernetes 指标“/metrics/resource/v1alpha1”和“/metrics/cadvisor”端点之间的区别

Nav*_*Nav 5 kubernetes kubernetes-metrics

我正在使用 Prometheus(prometheus-operator Helm chart)进行内存监控。在调查值时,我注意到内存使用 ( container_memory_working_set_bytes ) 从两个端点被刮掉:

  • /metrics/cadvisor
  • /metrics/resource/v1alpha1/metrics/resource来自 Kubernetes 1.18)

我已经想出了如何禁用图表中的端点之一,但我想了解两者的目的。
我知道/metrics/cadvisor返回三个值 - pod 的容器(如果 pod 有多个容器,则更多),一些特殊容器POD(运行 POD 服务是否使用了一些内部内存?)和所有容器的总和(然后结果有空标签container="")。
另一方面,/metrics/resource/v1alpha1仅返回 pod 容器的内存使用情况(没有container="POD"和没有这些的总和container=""

/metrics/resource/v1alpha1那么是否计划更换/metrics/cadvisor为单一的指标来源?看到两个端点(都在 中默认启用prometheus-operator)返回相同的指标,任何sum()查询都可以返回与实际内存使用量一样大的值 2。

感谢您对此主题的任何澄清!

Vit*_*Vit 5

答案是片面的

我知道 /metrics/cadvisor 返回三个值 - pod 的容器(如果 pod 有多个容器,则返回更多)、一些特殊的容器 POD(运行 POD 服务是否需要使用一些内部内存?)和所有容器的总和(然后结果有空标签容器="")。

container_name=="POD"是 Pod 的“暂停”容器。该暂停容器是保存用于该吊舱的网络名称空间的容器。Kubernetes 创建暂停容器以获取相应 Pod 的 IP 地址,并为加入该 Pod 的所有其他容器设置网络命名空间。这个容器是整个生态系统的一部分,它首先在 Pod 中启动,在调度另一个 Pod 之前首先配置 POD 网络。Pod 启动后 - 暂停容器无事可做。

暂停容器代码供大家参考:https : //github.com/kubernetes/kubernetes/tree/master/build/pause

暂停容器示例:

docker ps |grep pause
k8s_POD_etcd-master-1_kube-system_ea5105896423fc919bf9bfc0ab339888_0
k8s_POD_kube-scheduler-master-1_kube-system_155707e0c19147c8dc5e997f089c0ad1_0
k8s_POD_kube-apiserver-master-1_kube-system_fe660a7e8840003352195a8c40a01ef8_0
k8s_POD_kube-controller-manager-master-1_kube-system_807045fe48b23a157f7fe1ef20001ba0_0
k8s_POD_kube-proxy-76g9l_kube-system_e2348a94-eb96-4630-86b2-1912a9ce3a0f_0
k8s_POD_kube-flannel-ds-amd64-76749_kube-system_bf441436-bca3-4b49-b6fb-9e031ef7513d_0
Run Code Online (Sandbox Code Playgroud)

container_name!=="POD" 它过滤掉暂停容器的指标流,而不是通常的元数据。大多数人,如果他们想在他们的 pod 中绘制容器的图形,不希望看到 pause 容器的资源使用情况,因为它没有做太多事情。暂停容器的名称是一些容器运行时的实现细节,但并不适用于所有,也不能保证一直存在。

官方(过时的 v1.14)页面显示了 cadvisor 和 metrics 资源监控之间的差异:

库贝莱特

Kubelet 充当 Kubernetes 主节点和节点之间的桥梁。它管理在机器上运行的 Pod 和容器。Kubelet 将每个 pod 转换为其组成容器,并通过容器运行时接口从容器运行时获取单个容器使用统计信息。对于旧版 docker 集成,它从 cAdvisor 获取此信息。然后它通过 kubelet 资源指标 api 公开聚合的 pod 资源使用统计信息。这个 api 在 kubelet 的认证和只读端口上的 /metrics/resource/v1alpha1 处提供。

顾问

cAdvisor 是一个开源的容器资源使用和性能分析代理。它专为容器而构建,并在本机支持 Docker 容器。在 Kubernetes 中,cAdvisor 集成到 Kubelet 二进制文件中。cAdvisor 自动发现机器中的所有容器并收集 CPU、内存、文件系统和网络使用统计信息。cAdvisor 还通过分析机器上的“根”容器来提供整体机器使用情况。

此外,您应该知道 kubelet 在 /metrics/cadvisor、/metrics/resource 和 /metrics/probes 端点中公开指标。这 3 个指标没有相同的生命周期。

根据helm prometheus values yaml - 有 3 个选项,您可以禁用不需要的选项

    ## Enable scraping /metrics/cadvisor from kubelet's service
    ##
    cAdvisor: true

    ## Enable scraping /metrics/probes from kubelet's service
    ##
    probes: true

    ## Enable scraping /metrics/resource from kubelet's service
    ##
    resource: true
    # From kubernetes 1.18, /metrics/resource/v1alpha1 renamed to /metrics/resource
    resourcePath: "/metrics/resource/v1alpha1" 
Run Code Online (Sandbox Code Playgroud)

我的意见/metrics/resource/不会取代谷歌的 cadvisor。只需在您的情况下禁用您不需要的内容。这仅取决于您的需求。例如,我发现了一篇文章Kubernetes:使用 Prometheus 进行监控 – 导出器、服务发现及其角色,其中使用 4 个差异工具来监控所有内容。

  1. 指标服务器 – 集群的 CPU、内存、文件描述符、磁盘等

  2. cAdvisor – 一个 Docker 守护进程指标 – 容器监控

  3. kube-state-metrics – 部署、pod、节点

  4. node-exporter:EC2 实例指标——CPU、内存、网络

在您的情况下,要监视内存,我相信就足够了 1 :)

  • 感谢您的精彩回复和其他资源的链接。这是我第一次听说“暂停容器”,很高兴填补我的知识空白 (2认同)