Kubemetes 集群中如何监控资源的使用情况?
Kubemetes 集群中,应用程序的执行情况可 以在不同的级别上监测到,这些级别包括:
容器、
Pod
、
Service
整个集群。
作为 Kubemetes 集群的 一部分 Kubemetes 望提供给用户 详细的各个级别的资源使用信息,这将使用户能够深入地了解应用的执行情况,并找到应用中可能的瓶颈。
kubelet 作为连接 Kubemetes Master 和各节点机之间的桥梁,管理运行在节点机上的 Pod容器。 kubelet 将每个 Pod 转换成它的成员容器,同时从 cAdvisor 获取单独的容器使用统计信息, 然后通过该阻STAPI 暴露这些聚合后的 Pod 资源使用的统计信息。
容器监控
说到容器监控我们自然会想到cAdvisor
,我们前面也说过cAdvisor
已经内置在了 kubelet 组件之中,所以我们不需要单独去安装,cAdvisor
的数据路径为/api/v1/nodes/<node>/proxy/metrics
,同样我们这里使用 node 的服务发现模式,因为每一个节点下面都有 kubelet,自然都有cAdvisor
采集到的数据指标,配置如下:
- job_name: 'kubernetes-cadvisor'
kubernetes_sd_configs:
- role: node
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
relabel_configs:
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
- target_label: __address__
replacement: kubernetes.default.svc:443
- source_labels: [__meta_kubernetes_node_name]
regex: (.+)
target_label: __metrics_path__
replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor
上面的配置和我们之前配置 node-exporter 的时候几乎是一样的,区别是我们这里使用了 https 的协议,另外需要注意的是配置了 ca.cart 和 token 这两个文件,这两个文件是 Pod 启动后自动注入进来的,通过这两个文件我们可以在 Pod 中访问 apiserver,比如我们这里的__address__
不在是 nodeip 了,而是 kubernetes 在集群中的服务地址,然后加上__metrics_path__
的访问路径:/api/v1/nodes/${1}/proxy/metrics/cadvisor
,现在同样更新下配置,然后查看 Targets 路径:
然后我们可以切换到 Graph 路径下面查询容器相关数据,比如我们这里来查询集群中所有 Pod 的 CPU 使用情况,这里用的数据指标是 container_cpu_usage_seconds_total,然后去除一些无效的数据,查询1分钟内的数据,由于查询到的数据都是容器相关的,最好要安装 Pod 来进行聚合,对应的promQL
语句如下:
sum by (pod_name)(rate(container_cpu_usage_seconds_total{image!="", pod_name!=""}[1m] ))
prometheus cadvisor graph
我们可以看到上面的结果就是集群中的所有 Pod 在1分钟之内的 CPU 使用情况的曲线图。