Prometheus + Grafana:监控 Kubernetes 集群

1. 核心组件作用
  • Prometheus:开源的时序数据库和监控系统,负责采集、存储集群指标。
  • Grafana:可视化平台,通过 Prometheus 数据源生成监控仪表盘。
  • Kubernetes 监控对象
    • 节点资源(CPU、内存、磁盘)
    • Pod/容器状态
    • 服务流量
    • 自定义应用指标
2. 部署流程
(1) 部署 Prometheus

通过 Helm 快速安装(需提前安装 Helm):

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus prometheus-community/kube-prometheus-stack

关键组件自动部署:

  • Prometheus Server(指标存储)
  • Node Exporter(节点指标采集)
  • Kube State Metrics(K8s 对象状态采集)
  • Alertmanager(告警管理)
(2) 部署 Grafana
helm install grafana grafana/grafana

获取管理员密码:

kubectl get secret grafana -o jsonpath="{.data.admin-password}" | base64 --decode

(3) 配置数据源
  1. 访问 Grafana Web 界面(端口转发):
    kubectl port-forward service/grafana 3000:80
    

  2. 添加数据源:
    • 类型:Prometheus
    • URL:http://prometheus-operated:9090(K8s Service 域名)
3. 关键监控指标
指标类型PromQL 示例说明
节点 CPU 使用率1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m]))计算空闲率反向推导
内存使用node_memory_MemTotal_bytes - node_memory_MemFree_bytes实际消耗内存
Pod 重启次数kube_pod_container_status_restarts_total异常重启预警
网络流量rate(container_network_receive_bytes_total[5m])接收字节速率
4. Grafana 仪表盘配置

导入官方模板:

  1. 访问 Grafana 仪表盘库
  2. 搜索 Kubernetes 模板(如 ID 6417
  3. 输入模板 ID 自动导入

自定义查询示例(Pod CPU 使用):

sum(rate(container_cpu_usage_seconds_total{container!=""}[5m])) by (pod)

5. 告警规则配置

在 Prometheus 中定义告警(prometheus-rules.yaml):

groups:
- name: node-alert
  rules:
  - alert: HighNodeCPU
    expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
    for: 10m
    labels:
      severity: critical
    annotations:
      summary: "节点 CPU 过载 ({{ $labels.instance }})"

6. 优化实践
  • 指标保留策略:调整 prometheus.ymlretention 参数
  • 资源限制:为 Prometheus Pod 设置内存/CPU 限制
  • 持久化存储:挂载 PVC 避免数据丢失
  • TLS 加密:启用 Prometheus 和 Grafana 的 HTTPS 访问

故障排查提示

  • 检查 Exporter 状态:kubectl get pods -l app.kubernetes.io/name=prometheus
  • 验证指标采集:curl http://prometheus-operated:9090/metrics
  • Grafana 日志:kubectl logs deploy/grafana

通过上述步骤,可建立完整的 K8s 集群监控体系,实时掌握集群健康状态,快速响应异常。

更多推荐