7

我正在使用 Prometheus(prometheus-operator Helm 图表)进行内存监控。在调查值时,我注意到内存使用量 ( 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。

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

4

1 回答 1

6

答案是片面的

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

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

暂停容器代码供您参考: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

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

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" 

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

  1. metrics-server – 集群的 CPU、内存、文件描述符、磁盘等

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

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

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

就您而言,要监视内存,我相信就足够了 1 :)

于 2020-08-21T09:59:42.450 回答