一、前言
在 Kubernetes 容器化集群运维中,监控指标 + 日志分析是集群可观测性的两大核心支柱。没有可观测体系,集群故障只能靠猜、排查全靠重启。
目前企业生产最主流、最稳定的组合:
-
指标监控栈:Prometheus + Grafana + Alertmanager(集群、节点、容器、业务指标监控告警)
-
日志收集栈:EFK(Elasticsearch + Fluentd + Kibana)(容器日志统一采集、存储、检索、分析)
本文基于Helm3 在 K8s 集群中从零搭建一套生产级可观测平台,全程一键部署、开箱即用,适合测试、预发、生产环境落地。
二、整体架构原理
1. 监控架构(Prometheus)
采用云原生标准 Pull 模式采集指标,组件分工明确:
-
kube-prometheus-stack:一站式全家桶,包含 Prometheus、Grafana、Alertmanager、Node-exporter、Kube-state-metrics、CRD 资源
-
Exporter:各类指标采集端(节点、MySQL、Redis、Nginx 等)
-
Prometheus:时序数据存储、指标抓取、告警规则管理
-
Grafana:可视化大屏,展示 CPU、内存、磁盘、网络、业务指标曲线
-
Alertmanager:统一告警分发,支持钉钉、企业微信、邮件、短信
2. 日志架构(EFK)
EFK 是替代传统 ELK 的轻量化容器日志方案,更适配 K8s:
-
Fluentd:K8s 日志采集客户端,部署为 DaemonSet,每个节点采集容器标准输出日志
-
Elasticsearch:分布式日志搜索引擎,负责日志持久化存储、分词、检索
-
Kibana:日志可视化 Web UI,支持关键词检索、日志过滤、可视化分析、日志大屏
3. 完整数据流
监控数据流:各类 Exporter → Prometheus 定时抓取 → 时序存储 → Grafana 展示 + Alertmanager 告警
日志数据流:容器 stdout 日志 → Fluentd 采集过滤 → Elasticsearch 存储 → Kibana 查询分析
三、环境前置要求
-
可用 K8s 集群(1.24+ 任意版本)
-
已安装 Helm3 包管理工具
-
集群具备 StorageClass(支持持久化存储,防止数据丢失)
-
节点资源充足(建议至少 2C4G 以上)
若未安装 Helm,执行以下命令快速安装:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
四、部署 Prometheus+Grafana 监控栈
1. 创建专属命名空间
统一将监控组件部署在 monitoring 命名空间,方便管理维护:
kubectl create namespace monitoring
2. 添加 Helm 仓库并更新
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update
3. 一键部署完整监控栈
通过 helm 一次性部署全套组件,并暴露 NodePort 方便外部访问:
helm install prometheus prometheus-community/kube-prometheus-stack \ -n monitoring \ --set prometheus.service.type=NodePort \ --set grafana.service.type=NodePort \ --set alertmanager.service.type=NodePort
4. 查看部署状态
查看 Pod 运行状态,确保所有 Pod 处于 Running 状态:
kubectl get pods -n monitoring
查看服务端口,获取访问地址:
kubectl get svc -n monitoring
5. Grafana 登录密码获取
kubectl get secret prometheus-grafana -n monitoring -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
默认用户名:admin,输入上述密码即可登录 Grafana 控制台。
6. 核心能力说明
部署完成后默认自动监控:集群节点、容器、Pod、Deployment、CPU、内存、磁盘、网络、K8s 核心组件指标,无需手动配置采集规则。
五、部署 EFK 日志收集栈
1. 添加 EFK 所需 Helm 仓库
helm repo add elastic https://helm.elastic.co helm repo update
2. 部署 Elasticsearch(日志存储)
单节点快速部署(测试/中小企业生产可用):
helm install es elastic/elasticsearch \ -n monitoring \ --set replicas=1 \ --set minimumMasterNodes=1 \ --set service.type=NodePort
3. 部署 Kibana(日志可视化)
helm install kibana elastic/kibana \ -n monitoring \ --set service.type=NodePort
4. 部署 Fluentd(日志采集端)
Fluentd 以 DaemonSet 方式运行,每台节点自动部署一个采集 Pod,全覆盖采集容器日志:
helm install fluentd elastic/fluentd \ -n monitoring
六、部署验证与使用
1. 全局检查所有组件状态
kubectl get all -n monitoring
所有 Pod 状态为 Running、服务正常暴露端口即为部署成功。
2. Prometheus 验证
访问 Prometheus UI,查看 Status-Targets,所有采集目标状态为 UP,说明指标采集正常。可通过 PromQL 查询各类指标,例如你常用的 MySQL 连接数指标:
mysql_global_status_connections
3. Grafana 验证
内置大量 K8s 模板,直接导入即可查看:节点监控、容器监控、集群资源、网络流量等大屏。
4. Kibana 日志验证
登录 Kibana 后创建 index-pattern,匹配 fluentd 日志索引,即可实时检索、查看、过滤集群所有容器日志,快速定位程序报错、启动异常、接口报错等问题。
七、企业落地优化方案
-
持久化优化:为 Prometheus、ES、Kibana 配置固定存储卷,避免重启数据丢失
-
告警对接:Alertmanager 配置企业微信/钉钉告警,实现 CPU、内存、磁盘、Pod 异常实时推送
-
日志清理:配置 ES 日志生命周期,自动清理7天前日志,释放磁盘空间
-
权限管控:Grafana、Kibana 配置多用户权限,区分管理员、只读用户
-
自定义监控:通过 ServiceMonitor 自动发现业务 Pod,采集自定义业务指标
八、总结
本文基于 Helm 在 K8s 中快速搭建了 Prometheus+Grafana 指标监控 + EFK 日志分析 全套可观测平台,彻底解决 K8s 集群"黑盒运维"问题:
-
指标层面:全覆盖集群、节点、容器、中间件监控,支持可视化与告警
-
日志层面:统一采集存储所有容器日志,故障排查效率大幅提升
-
部署层面:Helm 一键部署,轻量化、易维护、易迁移,完全适配企业生产环境
这套架构是当前云原生运维面试高频、企业刚需的核心技术栈,熟练掌握可完全胜任 K8s 运维、云原生运维、容器平台运维岗位。