云原生监控成长:Prometheus+Grafana 监控 K8s 集群的实战搭建
·
云原生监控实战:Prometheus+Grafana监控Kubernetes集群
一、架构概述
监控系统采用分层架构:
+----------------+ +-------------+ +-----------+
| K8s 集群组件 |------>| Prometheus |<------| Grafana |
| (Pod/Node/API) | | (采集+存储) | | (可视化) |
+----------------+ +-------------+ +-----------+
Prometheus通过服务发现自动获取Kubernetes集群的监控目标,Grafana通过$datasource$连接Prometheus实现数据可视化。
二、环境准备
-
Kubernetes集群要求:
- 版本 ≥ 1.16
- 开启Metrics API(默认启用)
- 配置RBAC权限
-
工具安装:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update
三、部署Prometheus
1. 通过Helm部署
helm install prometheus prometheus-community/kube-prometheus-stack \
--namespace monitoring \
--create-namespace \
--set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false
2. 关键组件说明
| 组件 | 功能 | 访问方式 |
|---|---|---|
| Prometheus Server | 指标采集与存储 | kubectl port-forward svc/prometheus-operated 9090 -n monitoring |
| Alertmanager | 告警管理 | 默认端口9093 |
| Node Exporter | 节点资源监控 | DaemonSet自动部署 |
3. 验证部署
kubectl get pods -n monitoring
# 预期输出包含:prometheus-operated-*、alertmanager-*、node-exporter-*
四、部署Grafana
1. 通过Helm部署(已包含在kube-prometheus-stack中)
# values.yaml 自定义配置示例
grafana:
adminPassword: "admin123"
service:
type: LoadBalancer
dashboardProviders:
dashboardproviders.yaml:
apiVersion: 1
providers:
- name: 'default'
orgId: 1
folder: ''
type: file
disableDeletion: false
editable: true
options:
path: /var/lib/grafana/dashboards
2. 导入Kubernetes仪表板
- 登录Grafana(默认账号admin/admin123)
- 添加数据源:选择Prometheus,URL填写
http://prometheus-operated:9090 - 导入仪表板:
- 使用ID
3119导入Kubernetes集群概览 - 使用ID
6417导入节点资源监控
- 使用ID
五、核心监控指标
| 指标类型 | PromQL示例 | 监控目标 |
|---|---|---|
| 节点资源 | $100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)$ | CPU使用率 |
| 内存 | $node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100$ | 内存利用率 |
| Pod状态 | $sum(kube_pod_status_phase{phase="Running"}) by (namespace)$ | 运行中Pod数 |
| 网络流量 | $irate(container_network_receive_bytes_total{namespace!=""}[5m])$ | 入站流量 |
六、告警配置示例
在Prometheus Rules中配置CPU告警:
- alert: HighNodeCPU
expr: $100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance) * 100) > 85$
for: 10m
labels:
severity: warning
annotations:
summary: "高CPU使用率 ({{ $labels.instance }})"
description: "CPU使用率持续高于85%"
七、优化实践
-
存储优化:
- 添加PVC持久化存储
prometheus: prometheusSpec: storageSpec: volumeClaimTemplate: spec: storageClassName: standard resources: requests: storage: 50Gi -
高可用部署:
prometheus: prometheusSpec: replicas: 2 enableAdminAPI: true -
指标过滤:
prometheus: prometheusSpec: ignoreNamespaceSelectors: false ruleNamespaceSelector: {}
八、故障排查指南
| 问题现象 | 排查命令 | 解决方案 |
|---|---|---|
| 无指标数据 | kubectl get servicemonitors -n monitoring | 检查ServiceMonitor配置 |
| Grafana无数据 | curl http://prometheus:9090/targets | 验证Prometheus目标状态 |
| 内存溢出 | kubectl top pods -n monitoring | 增加Prometheus内存限制 |
提示:使用
$kubectl logs <prometheus-pod> -n monitoring$查看实时日志
通过以上步骤,可实现完整的Kubernetes集群监控体系,实时掌握集群健康状态,快速定位性能瓶颈。
更多推荐
所有评论(0)