awesome-kubernetes中的资源监控:cAdvisor与metrics-server配置详解

awesome-kubernetes中的资源监控:cAdvisor与metrics-server配置详解

【免费下载链接】awesome-kubernetes A curated list for awesome kubernetes sources :ship::tada: 【免费下载链接】awesome-kubernetes 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-kubernetes

在Kubernetes(简称K8s)集群管理中,资源监控是保障应用稳定运行的关键环节。你是否还在为Pod异常重启、节点资源耗尽而烦恼?本文将详细介绍如何通过cAdvisor(容器顾问)metrics-server(指标服务器) 构建基础监控体系,帮你实时掌握集群资源动态,解决80%的常见性能问题。读完本文,你将能够:部署轻量级容器监控工具、配置集群级指标采集、排查资源瓶颈并优化应用配置。

为什么需要资源监控?

Kubernetes集群由多个节点和容器组成,资源(CPU、内存、磁盘I/O)的合理分配直接影响应用性能。当某个Pod占用过多CPU时,可能导致同一节点的其他服务响应延迟;内存泄漏则可能引发OOM(内存溢出)杀死容器。通过监控工具,我们可以:

  • 实时跟踪节点/容器资源使用率
  • 预测资源瓶颈并提前扩容
  • 优化Pod的资源请求(Requests)和限制(Limits)配置
  • 满足SLA(服务等级协议)对可用性的要求

docs/projects.md中,监控类工具被归类为Monitoring Services,其中cAdvisor和metrics-server是构建基础监控能力的核心组件。

cAdvisor:容器级监控的"基础设施"

什么是cAdvisor?

cAdvisor(Container Advisor)是Google开发的开源容器监控工具,已内置在Kubernetes kubelet组件中,无需单独部署。它会自动收集节点上所有容器的CPU、内存、网络和磁盘使用情况,并提供基础的Web UI和API接口。

cAdvisor的核心功能

  1. 自动发现容器:支持Docker、containerd等主流容器运行时
  2. 多维度指标采集
    • CPU使用率(使用率、累积占用时间、负载均衡情况)
    • 内存使用(当前用量、峰值、缓存和交换分区)
    • 网络I/O(收发字节数、包数量、错误率)
    • 磁盘I/O(读写吞吐量、操作次数)
  3. 历史数据存储:默认保留2分钟的指标数据(可通过第三方工具扩展)
  4. 集成Prometheus:原生支持Prometheus metrics格式输出

访问cAdvisor数据

1. Web UI直接查看

在集群节点上访问http://<节点IP>:10255/metrics/cadvisor,可获取原始指标数据;访问http://<节点IP>:4194可打开cAdvisor的Web控制台(部分发行版可能禁用此端口,需检查kubelet配置)。

2. 通过kubectl代理访问

执行以下命令将节点端口转发到本地:

kubectl proxy --port=8001

然后访问http://localhost:8001/api/v1/nodes/<节点名称>/proxy/metrics/cadvisor获取指定节点的容器指标。

3. 关键指标示例
# CPU使用率(单位:核心数)
container_cpu_usage_seconds_total{container="nginx",pod="web-0"} 123.45

# 内存使用(单位:字节)
container_memory_usage_bytes{container="mysql",pod="db-1"} 536870912

metrics-server:集群级指标聚合

为什么需要metrics-server?

cAdvisor仅能提供单节点的容器指标,而Kubernetes的Horizontal Pod Autoscaler(HPA,水平自动扩缩容)kubectl top命令需要集群级的聚合指标。metrics-server正是解决这一问题的核心组件,它从kubelet采集指标并通过Metrics API提供给其他组件使用。

metrics-server的工作原理

  1. 部署形态:以Deployment形式运行在集群中,通常位于kube-system命名空间
  2. 数据流向mermaid
  3. 数据处理
    • 从各节点kubelet的/metrics/resource端点拉取数据
    • 聚合节点和Pod级别的指标
    • 提供Metrics API(metrics.k8s.io/v1beta1)供查询

部署metrics-server

1. 从官方仓库部署
kubectl apply -f https://gitcode.com/gh_mirrors/aw/awesome-kubernetes/raw/master/deploy/metrics-server/components.yaml
2. 自定义配置(解决常见问题)

创建metrics-server-config.yaml,添加以下内容解决证书验证和节点名称解析问题:

apiVersion: v1
kind: ConfigMap
metadata:
  name: metrics-server-config
  namespace: kube-system
data:
  config.yaml: |
    apiVersion: metrics-server.config.k8s.io/v1beta1
    kind: MetricsConfiguration
    insecureSkipTLSVerify: true  # 开发环境可禁用TLS验证(生产环境需配置证书)
    metricResolution: 15s  # 指标采集间隔
    nodeAddressType: HostName  # 使用主机名而非IP解析节点
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: metrics-server
  namespace: kube-system
spec:
  template:
    spec:
      containers:
      - name: metrics-server
        args:
        - --config=/etc/config/config.yaml
        volumeMounts:
        - name: config-volume
          mountPath: /etc/config
      volumes:
      - name: config-volume
        configMap:
          name: metrics-server-config

应用配置:

kubectl apply -f metrics-server-config.yaml

验证metrics-server部署

  1. 检查Pod状态
kubectl get pods -n kube-system | grep metrics-server

预期输出:

metrics-server-7f9c5b8d9d-abcde   1/1     Running   0          5m
  1. 使用kubectl top命令
# 查看节点资源使用
kubectl top nodes

# 查看Pod资源使用
kubectl top pods -n kube-system

成功输出示例:

NAME                 CPU(cores)   MEMORY(bytes)
metrics-server-...   15m          45Mi
kube-apiserver-...   250m         512Mi

常见问题与解决方案

问题1:metrics-server启动失败,日志显示"x509: certificate signed by unknown authority"

原因:kubelet使用自签名证书,metrics-server默认验证TLS证书。
解决:在metrics-server启动参数中添加--kubelet-insecure-tls(仅测试环境),或配置CA证书。

问题2:kubectl top命令返回"Error from server (NotFound): pods "xxx" not found"

原因:metrics-server未正确采集到Pod数据,可能是网络策略阻止访问kubelet 10250端口。
解决:检查网络策略,确保metrics-server所在命名空间能访问所有节点的10250端口。

问题3:cAdvisor指标中未包含自定义容器的数据

原因:容器运行时未正确配置CGroup驱动。
解决:确保容器运行时(如Docker)和kubelet使用相同的CGroup驱动(systemd或cgroupfs)。

监控数据的进阶应用

配置HPA实现自动扩缩容

结合metrics-server提供的CPU/内存指标,可实现Pod的自动扩缩容。示例HPA配置:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: web-server-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: web-server
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70  # CPU使用率超过70%时扩容
  - type: Resource
    resource:
      name: memory
      target:
        type: AverageValue
        averageValue: 512Mi  # 内存平均使用超过512Mi时扩容

集成Prometheus和Grafana

虽然cAdvisor和metrics-server提供了基础监控能力,但生产环境通常需要更强大的存储和可视化工具。可参考docs/projects.md中的PrometheusGrafana Kubernetes App配置完整监控平台。

总结

cAdvisor和metrics-server是Kubernetes资源监控的"基础设施":cAdvisor负责容器级指标采集,metrics-server实现集群级指标聚合,二者配合为HPA、kubectl top等功能提供数据支撑。通过本文的配置指南,你可以快速搭建基础监控体系,为后续性能优化和故障排查奠定基础。

更多监控工具和最佳实践,可参考项目中的docs/projects.md文档,其中收录了Alertmanager、VictoriaMetrics等进阶工具的配置方法。

【免费下载链接】awesome-kubernetes A curated list for awesome kubernetes sources :ship::tada: 【免费下载链接】awesome-kubernetes 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-kubernetes

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值