【问题标题】:Difference between kubernetes metrics "/metrics/resource/v1alpha1" and "/metrics/cadvisor" endpointsKubernetes 指标“/metrics/resource/v1alpha1”和“/metrics/cadvisor”端点之间的区别
【发布时间】:2020-11-11 04:02:26
【问题描述】:

我正在使用 Prometheus(prometheus-operator Helm 图表)进行内存监控。 在调查值时,我注意到内存使用量 (container_memory_working_set_bytes ) 正在从两个端点抓取:

  • /metrics/cadvisor
  • /metrics/resource/v1alpha1(来自 kubernetes 1.18 的/metrics/resource

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

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

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

【问题讨论】:

    标签: kubernetes kubernetes-metrics


    【解决方案1】:

    答案不完整

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

    container_name=="POD" 是 Pod 的“暂停”容器。 pause container 是一个容器,其中包含 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)page 显示 cadvisor 和 metrics 资源监控之间的差异:

    Kubelet

    Kubelet 充当 Kubernetes 主节点和 节点。它管理机器上运行的 Pod 和容器。 Kubelet 将每个 pod 转换为它的组成容器,并 从容器中获取单个容器使用统计信息 运行时,通过容器运行时接口。对于遗产 docker 集成,它从 cAdvisor 获取此信息。那么它 通过 kubelet 资源指标 API。此 api 服务于 /metrics/resource/v1alpha1 在 kubelet 的认证和 只读端口。

    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/ 不会取代 google 的 cadvisor。只需在您的情况下禁用您不需要的东西。这仅取决于您的需求。例如,我发现了一篇文章Kubernetes: monitoring with Prometheus – exporters, a Service Discovery, and its roles,其中使用了 4 个 diff 工具来监控所有内容。

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

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

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

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

    在你的情况下,我相信监控内存就足够了 1 :)

    【讨论】:

    • 感谢您的出色回复和其他资源的链接。这是我第一次听说“暂停容器”,很高兴填补我的知识空白
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 2022-12-20
    • 2019-06-21
    • 2016-08-13
    相关资源
    最近更新 更多