嘿,小朋友!想象一下,你的 Kubernetes 集群就像是一座超级繁忙的“数字城市”。这座城市里有成千上万个小小的“房子”(我们叫它 Pod),每个房子里都住着不同的“居民”(应用程序)。有的居民在算数学题(处理数据),有的在画画(渲染图片),还有的在修路(传输网络流量)。
但是,如果这座城市里没有保安,也没有地图,当某个房子着火(崩溃)了,或者某个居民累得动不了了(资源耗尽),我们怎么知道呢?这时候,我们就需要两位超级英雄:Prometheus(它是城市的雷达,负责记录一切)和 Grafana(它是城市的电视屏幕,负责把数据变成漂亮的图表给你看)。
今天,我就带你一步步这两位英雄是怎么来守护这座城市的。别担心,我不会讲那些枯燥的代码,我们要像搭乐高一样,把这个监控系统建起来!
第一部分:认识我们的两位超级英雄
在开始动手之前,我们先聊聊它们是谁,为什么要请它们来帮忙。
Prometheus:不知疲倦的记录员
Prometheus 就像是一个手里拿着笔记本的侦探。它不会睡觉,也不会休息。它会每隔几秒就问一次:“嘿,这个房子的温度是多少?”、“那个房子的内存用了多少?”、“这个居民还在呼吸吗?”
然后,它把这些答案记在自己的笔记本(数据库)里。如果有一天,一个房子突然不回应了,侦探就会发现:“咦?过去十分钟都没有收到他的回答了,他可能出事了!”
Grafana:会变魔术的画家
有了侦探的记录,数据就是一堆冷冰冰的数字。比如 cpu_usage = 95%,这有什么意思呢?
这时候 Grafana 出场了。它是一个魔术师,能把侦探记下的数字变成五颜六色的折线图、饼图和大屏幕。你可以看到 CPU 使用率像过山车一样忽高忽低,也可以看到内存像气球一样慢慢变大。当你看到红线飙升时,你就知道该去救火啦!
第二部分:准备工作——我们需要什么工具?
为了把这两位英雄请到你的电脑或服务器上,我们需要一些基本的“建筑材料”。
- 一个 Kubernetes 集群:可以是你在本地电脑上用的 Minikube,也可以是云服务商提供的集群。
- Helm:这是一个管理 Kubernetes 应用的“超级工具箱”,安装软件非常方便。如果你还没装,可以去官网下载,或者让你的管理员哥哥/姐姐帮你装一下。
- kubectl 权限:你需要有权限在集群里创建东西。
小贴士:如果你的集群很小,只是用来学习,不用担心资源不够。但如果是真正的生产环境,记得给 Prometheus 留足够的磁盘空间哦!
第三部分:搭建过程——像搭积木一样简单
现在,让我们正式开工!我们将分三步走:
- 安装 Prometheus。
- 安装 Grafana。
- 把它们连在一起,并画出漂亮的图表。
步骤一:安装 Prometheus
我们要用 Helm 来安装 Prometheus。这就像是在应用商店里点击“一键安装”一样简单。
首先,我们需要告诉 Helm 去哪里找 Prometheus 的包。运行下面这条命令:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
接下来,我们要创建一个专门的“房间”(Namespace)来存放 Prometheus,这样不会弄乱其他东西:
kubectl create namespace monitoring
现在,开始安装 Prometheus 本体:
helm install prometheus prometheus-community/kube-prometheus-stack --namespace monitoring
等等,这里有个小秘密! kube-prometheus-stack 这个包很厉害,它不仅安装了 Prometheus,还自动安装了一些“探测器”(Exporters),这些探测器能帮我们收集 Kubernetes 集群内部的健康信息。
安装完成后,你需要等待几分钟,让它启动。你可以用这个命令查看进度:
kubectl get pods -n monitoring
当看到所有 Pod 的状态都是 Running 时,就说明安装成功了!
步骤二:访问 Prometheus 的世界
现在 Prometheus 已经在后台工作了,但我们怎么看到它呢?默认情况下,它是藏在集群内部的,外面的人看不到。我们需要做一个“窗户”(Port Forwarding)把它暴露出来。
在你的终端里运行:
kubectl port-forward svc/prometheus-grafana 3000:80 -n monitoring
注意: 上面的命令其实是为了方便,因为 kube-prometheus-stack 通常也把 Grafana 打包在一起了。如果你单独安装,可能需要分别转发。但为了简化,我们假设你已经通过上面的命令启动了 Grafana 的端口转发。
打开浏览器,访问 http://localhost:3000。
步骤三:登录 Grafana 并配置数据源
你会看到一个登录页面。默认的用户名是 admin。密码在哪里呢?别急,Helm 会自动生成一个随机密码。
你可以用这个命令查看初始密码:
kubectl get secret --namespace monitoring prometheus-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
把这段长长的字符复制下来,粘贴到密码框里,点击登录。
登录后,你可能会看到一些引导界面,跟着提示走即可。
关键一步:连接 Prometheus
Grafana 需要知道去哪里找数据。默认情况下,这个包已经配好了,但如果你是自己手动安装的,你需要添加数据源:
- 点击左侧菜单的 Connections -> Data Sources。
- 点击 Add data source。
- 选择 Prometheus。
- 在 URL 里填入
http://prometheus-server.monitoring.svc.cluster.local:9090(这是集群内部地址)。 - 点击 Save & Test。
如果显示“Success”,恭喜你!Grafana 和 Prometheus 已经牵手成功啦!
第四部分:解读仪表盘——读懂城市的脉搏
现在,我们来看看 Grafana 里的那些图表。别被密密麻麻的线条吓到,我们挑几个最重要的来看。
1. Node Overview:节点概览
这个图表展示了你集群里每一台机器(Node)的健康状况。
- CPU Usage:如果这条线一直接近 100%,说明这台机器太累了,可能需要加机器或者优化程序。
- Memory Usage:如果内存快满了,程序可能会崩溃。
- Disk I/O:如果读写速度很慢,可能是硬盘出了故障,或者程序在疯狂读写文件。
给小朋友的例子:这就好比你看家里的电脑。如果 CPU 占用率一直是 99%,那你打开游戏肯定会卡。这就是 Node Overview 在告诉你:“嘿,这台机器有点忙不过来啦!”
2. Pod Status:Pod 的状态
这是最关键的部分!我们要看哪些 Pod 是健康的,哪些出了问题。
- Running:这是最好的状态,表示程序正在正常运行。
- CrashLoopBackOff:这是一个常见的错误状态。意思是 Pod 启动后立刻崩溃了,然后重启,再崩溃……像是一个陷入循环的噩梦。
- Pending:Pod 还没开始运行,它在排队等资源。如果一直 Pending,可能是资源不够了。
如何排查 CrashLoopBackOff?
假设你看到一个 Pod 变成了红色,并且状态是 CrashLoopBackOff。别慌,我们可以用 kubectl 来“审问”这个 Pod:
# 查看 Pod 的详细日志
kubectl logs <pod-name> -n <namespace> --previous
# 如果上面的不行,试试查看当前日志
kubectl logs <pod-name> -n <namespace>
日志里通常会写着错误原因。比如:“Error: Connection refused” 可能意味着它想连接数据库,但数据库没启动;或者 “Out of Memory” 意味着它太胖了,挤爆了容器。
3. Resource Quotas:资源配额
如果你的团队有很多人共用一个集群,就需要设置配额。这个图表可以告诉你,某个命名空间(Namespace)用了多少 CPU 和内存,还剩多少。
第五部分:实战演练——当警报响起时
光看不练假把式。我们来模拟一个真实的故障场景,看看作为“城市守护者”的你该如何应对。
场景:网站变慢了
现象:你正在喝咖啡,突然 Grafana 上的一个折线图猛地向上冲,同时你的手机收到了 Slack 或邮件警报:“警告:API 服务响应时间超过 5 秒!”
第一步:确认问题
打开 Grafana,找到 HTTP Request Duration(HTTP 请求持续时间)的图表。你会发现,在某个时间点,延迟急剧上升。
第二步:定位根源
是不是整个集群都慢?还是只有某个服务慢?
- 检查 Cluster CPU/Memory 图表。如果整体资源都很低,说明不是集群过载。
- 检查具体服务的 Pod CPU 图表。如果你发现某个 Pod 的 CPU 使用率常年 100%,那很可能就是这个 Pod 的代码有问题,陷入了死循环。
- 检查 Database 的连接数。如果数据库连接数爆满,可能是应用没有正确关闭连接,导致数据库被拖垮。
第三步:采取行动
如果是代码问题:重启那个 Pod。在 Kubernetes 里,这很简单:
kubectl rollout restart deployment/<deployment-name> -n <namespace>这会让 Kubernetes 自动销毁旧的 Pod,创建新的。如果新创建的 Pod 恢复正常,那就说明刚才可能是临时故障。
如果是资源不足:你需要扩容。增加副本数量,或者升级节点的规格。
kubectl scale deployment/<deployment-name> --replicas=5 -n <namespace>如果是外部依赖问题:比如数据库挂了,你需要联系数据库管理员,或者切换到备用数据库。
第六部分:进阶技巧——让监控更聪明
现在的监控已经很好用了,但我们可以让它变得更智能。
1. 自定义告警规则
Prometheus 允许你定义自己的规则。比如,你希望当某个服务的错误率超过 5% 时就报警。你可以创建一个 YAML 文件:
groups:
- name: example
rules:
- alert: HighErrorRate
expr: rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m]) > 0.05
for: 5m
labels:
severity: critical
annotations:
summary: "High error rate detected"
description: "The error rate is above 5% for the last 5 minutes."
然后把这个规则应用到 Prometheus 中。这样,一旦条件满足,它就会触发警报。
2. 使用 Service Monitor 自动发现
你不需要手动告诉 Prometheus 去监控哪些服务。只要你在 Deployment 里加上特定的注解,Prometheus 就会自动发现并监控它们!
例如,在你的 Deployment YAML 中添加:
metadata:
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "8080"
prometheus.io/path: "/metrics"
这样,Prometheus 就会自动抓取 http://<pod-ip>:8080/metrics 的数据。是不是很方便?
3. 可视化定制
Grafana 的强大之处在于你可以自由组合图表。你可以创建一个 Dashboard,左边放 CPU 使用率,右边放错误日志,上面放业务指标(如每分钟订单数)。这样,当订单数下降时,你能立刻看到是不是因为 CPU 飙升导致的。
第七部分:常见问题与避坑指南
在搭建过程中,你可能会遇到一些小麻烦。别担心,这些都是成长的必经之路。
Q1: Prometheus 的存储空间不够了怎么办?
Prometheus 会把所有历史数据都存在磁盘里。如果数据太多,磁盘会爆满。
解决方案:
- 缩短保留时间:在 Prometheus 配置中,设置只保留最近 7 天或 14 天的数据。
- 使用远程存储:可以将历史数据发送到更便宜的存储系统(如 Thanos 或 Cortex),只让 Prometheus 保留短期数据。
Q2: 为什么我的 Grafana 图表是空的?
解决方案:
- 检查 Prometheus 是否正常运行。
- 检查数据源配置是否正确。
- 确保你的 Pod 确实暴露了 metrics 接口。你可以在浏览器直接访问
http://<pod-ip>:<port>/metrics看看有没有数据返回。
Q3: 告警太多了,我都看不过来了怎么办?
解决方案: 这叫“告警疲劳”。你需要优化告警规则:
- 合并相似告警:如果多个 Pod 同时报错,发一条汇总告警,而不是每条都发。
- 分级处理:只有严重的问题才发短信或打电话,普通问题只发邮件或 Slack 通知。
- 设置静默期:在维护期间,暂时关闭非关键告警。
结语:成为城市的守护者
恭喜你!你已经学会了如何使用 Prometheus 和 Grafana 来监控你的 Kubernetes 集群。这不仅仅是安装几个软件,更是学会了一种思维方式:观察、分析、行动。
当你看到图表上的线条波动时,你不再感到恐慌,而是冷静地寻找原因。你知道每一个红点背后可能隐藏着一个 bug,每一次峰值都可能是一次成功的促销活动。
记住,监控不是为了监视谁,而是为了帮助开发者更快地发现问题,让用户获得更好的体验。你就像是一位医生,通过体检报告(监控数据)来诊断城市(集群)的健康状况。
未来,你还可以探索更多高级功能,比如分布式追踪(Jaeger)、日志聚合(ELK Stack)等。但无论技术如何变化,核心原则不变:了解你的系统,才能更好地掌控它。
现在,深呼吸,打开你的 Grafana 仪表盘,去守护你的数字城市吧!如果有问题,随时回来查阅这份指南,或者向社区里的其他“守护者”请教。加油,你做得很棒!
