
你是不是也曾遇到过这样的困惑:
“我的 Kubernetes 集群已经跑起来了,为什么总感觉性能不如预期?”
“服务崩了,日志报错一堆,但我哪里出问题了呢?”
“这个 Prometheus 配了好多,Grafana 看了一堆图,还是看不懂,如何有效监控?”
Kubernetes 容器化管理的优点显而易见,但随之而来的问题也是挑战不断——从集群健康、资源使用、Pod 状态到服务依赖,如何全面掌控这些信息?这时候,Prometheus 和 Grafana 就是你手中的武器。
在这篇文章中,我将带你通过实际操作来一步步搭建基于 Prometheus 和 Grafana 的 Kubernetes 监控系统,让你能够实时获取系统的运行状态,快速响应故障,并确保集群的高可用性。
一、为什么要监控 Kubernetes?
Kubernetes 是容器管理的强大工具,但它本身也非常复杂。每个 Pod、容器、节点、服务和应用都可能变得“无声无息”,一旦出了问题,如何定位故障?监控便是唯一能让你看清幕后“真相”的工具。
1.1 集群复杂度增加
Kubernetes 是一个分布式系统,每个 Pod、容器甚至是微服务可能都会有单独的指标。一个简单的服务链路,背后可能涉及到多个容器,节点和网络设备。没有系统性的监控,根本无法掌控全局。
1.2 资源消耗不可见
Kubernetes 的弹性伸缩(Autoscaling)和资源调度机制非常强大,但如果不进行实时监控,过度扩展和资源浪费很容易发生。
1.3 故障排查困难
Kubernetes 的服务发现和自我修复机制固然强大,但也可能在某些情况下,Pod 频繁重启或服务挂掉,而没有合适的告警机制,你甚至不知道发生了什么。
因此,我们需要监控 K8s 的每个环节,从节点、容器、服务到网络,实时跟踪问题的根源。
二、Prometheus 与 Grafana 联合应用:Kubernetes 监控的黄金组合
2.1 为什么选择 Prometheus 和 Grafana?
Prometheus 是 Kubernetes 监控的“心脏”,它的强大之处在于:
多维数据模型:基于时间序列数据,支持丰富的查询语言 PromQL(Prometheus Query Language)。
自动化抓取:能自动从服务中抓取指标,无需人工干预。
高效存储:通过高效的时序数据存储,能够承载大规模的数据流。
而 Grafana 则是你的“画布”,将 Prometheus 提供的数据进行可视化展示,让复杂的监控数据直观易懂。
灵活的仪表盘:支持多种图表,甚至动态交互式仪表盘。
自动刷新:实时监控,秒级更新数据。
多数据源支持:Grafana 不仅能接入 Prometheus,还能接入 MySQL、Elasticsearch 等多种数据源。
这对组合,Prometheus 负责收集、存储和查询数据,Grafana 负责数据的可视化展示和告警配置,完美解决了 Kubernetes 监控的挑战。
三、搭建 Kubernetes 监控:一步步实战
3.1 安装 Prometheus 和 Grafana
1. 安装 Prometheus
首先,我们需要为 Kubernetes 部署 Prometheus。使用 Helm 安装是最简单的方式。
bash helm install prometheus prometheus-community/kube-prometheus-stack
这条命令会通过 Helm 安装 Prometheus、Alertmanager、Prometheus Operator 等一系列监控组件。
你可以在浏览器访问 http://<prometheus-service-ip>:9090 来查看 Prometheus 的界面,默认情况下,它会自动发现集群内的所有指标。
2. 安装 Grafana
Grafana 也可以通过 Helm 安装:
bash helm install grafana grafana/grafana
访问 Grafana 默认地址 http://<grafana-service-ip>:3000,登录时使用默认的 admin/admin 账户。
3.2 配置 Prometheus 作为 Grafana 数据源
在 Grafana 后台配置 Prometheus 数据源,操作如下:
登录到 Grafana;
进入 Configuration → Data Sources;
点击 Add data source,选择 Prometheus;
配置 Prometheus 的地址为
http://prometheus-server:9090(或者在 Kubernetes 中使用服务名来访问 Prometheus);点击 Save & Test 测试连接是否成功。
3.3 配置 Kubernetes 监控
1. 配置 Prometheus 监控 Kubernetes 指标
Prometheus 会自动通过 kube-state-metrics、node-exporter 和 cadvisor 等组件收集 Kubernetes 指标。
你可以在 Prometheus Web UI(http://localhost:9090)中执行如下查询来测试:
promQL
up{job="kubernetes-node"}如果返回 1,表示 Kubernetes 节点的监控是正常的。
2. 配置 Grafana 仪表盘
Grafana 提供了多个 Kubernetes 监控的现成模板。你可以去 Grafana Dashboards 官方网站下载模板,导入后就可以开始使用。
例如,输入模板 ID 315 来导入 Kubernetes 集群监控仪表盘模板,适用于实时查看集群和节点状态、Pod 性能、容器资源使用等信息。
四、实战案例:配置 Kubernetes 监控指标
4.1 监控节点资源
一个常见的 Kubernetes 监控场景是监控每个节点的资源使用情况,包括 CPU、内存和磁盘。
Prometheus 查询:
promQL
avg by(node) (rate(container_cpu_usage_seconds_total{container!="",container!="POD"}[5m]))这条查询会返回每个节点的 CPU 使用率,帮助你发现哪个节点的资源使用过高。
Grafana 配置:
在 Grafana 中,你可以选择图表类型为 Time series,然后输入相应的 Prometheus 查询,显示每个节点的资源消耗趋势。
4.2 监控 Pod 健康状态
Kubernetes 中,Pod 的健康检查至关重要。你可以通过 Prometheus 监控 Pod 的状态,及时发现哪些 Pod 正在崩溃。
Prometheus 查询:
promQL
kube_pod_container_status_restarts_total{pod=~"myapp-.*"}这条查询会显示 myapp- 前缀的所有 Pod 的重启次数。高频率重启可能意味着应用存在问题。
4.3 监控服务的延迟
通过监控服务的响应延迟,帮助你及时发现哪些服务的性能瓶颈或故障。
Prometheus 查询:
promQL
histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket{job="myapp"}[5m])) by (le))这条查询将返回 http_request_duration_seconds 指标的 95 百分位延迟,帮助你快速识别服务的延迟问题。
五、告警配置:如何避免掉链子?
在 Kubernetes 集群中,如果你仅依赖 Grafana 展示数据而没有配置告警,一旦系统出现问题,你就可能错过报警信号。
5.1 配置告警规则
你可以在 Prometheus 中定义告警规则,例如,当 CPU 使用率超过 90% 时触发告警。
yaml
groups:- name: kubernetes-alerts
rules:
- alert: HighCpuUsage
expr: avg by(node) (rate(container_cpu_usage_seconds_total{container!="",container!="POD"}[5m])) > 0.9
for: 5m
annotations:
description: "Node {{ $labels.node }} CPU usage is high"5.2 配置 Alertmanager
Alertmanager 是 Prometheus 的告警管理工具。你可以配置它通过邮件、Slack 或其他通知渠道发送告警。这样,你就可以第一时间响应集群中的故障。
六、总结:Kubernetes 监控,从零到一的实现
通过上述配置,你可以为 Kubernetes 集群搭建一套完整的监控系统,包括资源使用监控、Pod 状态监控、延迟监控和告警配置。这不仅能让你实时掌控集群健康,还能确保出现故障时,能够快速定位问题并及时响应。
Kubernetes 是一个复杂的系统,只有在实时监控的帮助下,你才能从容应对各种问题,确保服务的高可用性和稳定性。

豫公网安备41160202000677