prometheus监控k8s集群系列之cadvisor篇

本文介绍如何利用cAdvisor结合Prometheus实现Kubernetes集群的容器基础设施监控,包括配置抓取任务、常用监控指标及查询语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过cadvisor结合prometheus监控k8s集群容器基础设施(container)

简介

cAdvisor可以对Node机器上的资源及容器进行实时监控和性能数据采集,包括CPU、内存使用情况、网络吞吐量及文件系统使用情况,1.7.3版本以前,cadvisor的metrics数据集成在kubelet的metrics中,在1.7.3以后版本中cadvisor的metrics被从kubelet的metrics独立出来了,每个Node机器上都会有一个aAdvisor对这台机器进行监控。

操作

从简介中我们可以知道,在k8s集群中,每个node节点都会有一个cAdvisor对当前主机进行监控

# prometheus对接k8s的服务发现
https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config

从Prometheus的官方文档中,我们可以知道,Prometheus支持对k8s的自动服务发现,支持以下几个角色

  • node
  • service
  • pod
  • endpoints
  • ingress

新版本的标准配置,kubelet中的cadvisor是没有对外开放4194端口的。所以,我们只能通过apiserver提供的api做代理获取监控指标

cAdvisor的metrics地址: /api/v1/nodes/[节点名称]/proxy/metrics/cadvisor

metrics地址中的节点名称参数可以通过prometheus的kubernetes_sd_config中的node角色自动发现k8s集群中的所有node节点

抓取任务配置如下:

- job_name: 'kubernetes-cadvisor'
  scheme: https
  tls_config:
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  kubernetes_sd_configs:
  - role: node
  relabel_configs:
  - target_label: __address__
    replacement: kubernetes.default.svc:443
  - source_labels: [__meta_kubernetes_node_name]
    regex: (.+)
    replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor
    target_label: __metrics_path__
  - action: labelmap
    regex: __meta_kubernetes_node_label_(.+)
  - source_labels: [__meta_kubernetes_node_name]
    action: replace
    target_label: node
  - source_labels: [__meta_kubernetes_node_label_node]
    action: replace
    target_label: node_name

将以上配置添加到configmap prometheus-config中,详见“k8s环境下搭建prometheus”一文,更新configmap和pod

## 更新configmap
kubectl create configmap prometheus-config --from-file=prometheus.yaml -n monitoring -o yaml --dry-run | kubectl replace -f -

## 更新pod
kubectl apply -f prometheus-deploy.yaml

## 热更新配置
curl -XPOST http://localhost:30090/-/reload

页面查看prometheus,可以看到相应的metrics。

常用指标

#cpu使用时间
container_cpu_usage_seconds_total
#分配cpu limit数
container_spec_cpu_quota
#内存使用量
container_memory_usage_bytes
#分配内存 limit数
container_spec_memory_limit_bytes
#网络接收流量
container_network_receive_bytes_total
#网路发送流量
container_network_transmit_bytes_total
#磁盘使用量
container_fs_usage_bytes
#磁盘写
container_fs_writes_bytes_total
#磁盘读
container_fs_reads_bytes_total

基本查询语句

## 容器cpu使用率
sum by(pod_name, namespace) (rate(container_cpu_usage_seconds_total{image!=""}[5m])) / (sum by(pod_name, namespace) (container_spec_cpu_quota{image!=""} / 100000)) * 100

## 容器内存使用率
sum by(pod_name, namespace) (container_memory_rss{image!=""}) / sum by(pod_name, namespace) (container_spec_memory_limit_bytes{image!=""}) * 100 != +Inf

## 磁盘使用量
sum by(pod_name, namespace) (container_fs_usage_bytes{image!=""}) / 1024 / 1024 / 1024

欢迎关注我的个人微信公众号,一个菜鸟程序猿的技术分享和奔溃日常

一个菜鸟程序猿的技术技术分享和奔溃日常

### 如何配置 Prometheus 使用 cAdvisor 监控 Kubernetes 集群 #### 安装和配置 cAdvisorPrometheus 为了实现对 Kubernetes 集群的有效监控cAdvisor 是一个重要的组件,它默认嵌入在 kubelet 中运行,并收集容器的资源使用情况和其他性能指标。Prometheus 可以直接抓取这些由 cAdvisor 提供的数据。 要使 Prometheus 能够访问并采集来自 cAdvisor 的数据,需确保以下几点: - **启用 Kubelet 认证**:由于安全原因,默认情况下 Kubelet 不允许外部未经认证的服务请求其暴露的信息端口(通常是 `/metrics`)。因此,在启动 Kubelet 时应设置 `--authentication-token-webhook=true --authorization-mode=Webhook` 参数[^1]。 - **配置 Prometheus 抓取目标**:编辑 Prometheus 的配置文件 (`prometheus.yml`) 来指定从哪些地址获取度量信息。对于每个节点上的 cAdvisor 数据源来说,通常会定义一组静态 IP 地址或 DNS 名称列表,或者是利用 Service Discovery 功能动态发现新的实例[^2]。 ```yaml scrape_configs: - 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: - source_labels: [__meta_kubernetes_node_label beta.kubernetes.io/os] action: keep regex: linux ``` 这段 YAML 片段展示了如何让 Prometheus 自动找到所有正在运行中的节点并通过 HTTPS 协议连接至它们所托管的 cAdvisor 实例来拉取统计数据[^3]。 #### 设置 Grafana 进行可视化展示 完成上述步骤之后,可以进一步借助于 Grafana 将收集到的数据转换成易于理解的形式。这涉及到导入预先构建好的仪表板模板或是自定义查询语句以适应特定需求。 通过这种方式,不仅能够实时跟踪整个集群内各个 Pod 或者命名空间级别的 CPU、内存消耗状况;还可以深入分析单个容器的行为特征,从而更好地优化资源配置策略以及排查潜在问题所在。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值