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。
感谢您对此主题的任何澄清!
答案是片面的
我知道 /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 个差异工具来监控所有内容。
指标服务器 – 集群的 CPU、内存、文件描述符、磁盘等
cAdvisor – 一个 Docker 守护进程指标 – 容器监控
kube-state-metrics – 部署、pod、节点
node-exporter:EC2 实例指标——CPU、内存、网络
在您的情况下,要监视内存,我相信就足够了 1 :)
| 归档时间: |
|
| 查看次数: |
1575 次 |
| 最近记录: |