云原生实战:K8s 一键部署 Prometheus+Grafana+EFK 完整可观测平台

一、前言

在 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 运维、云原生运维、容器平台运维岗位。

相关推荐
成为你的宁宁5 小时前
【Prometheus基于文件的服务发现】
服务发现·prometheus
安当加密5 小时前
Kubernetes Secret不安全?External Secrets Operator接入凭据管理服务实战,自动轮转零停机
安全·容器·kubernetes
用户1558319968145 小时前
文件同步冲突技术根因与解决方案:Last-Write-Wins、OT、CRDT对比
云原生
u0119608237 小时前
k8s-helm命令
linux·容器·kubernetes
zhojiew7 小时前
在Ray集群中使用vLLM部署LLM模型并集成Prometheus和Grafana进行指标观测的实践
grafana·prometheus·vllm
qq_356408668 小时前
Kubernetes 部署 GitLab Runner 及 Java CI/CD 实践指南
java·kubernetes·gitlab
AllData公司负责人9 小时前
亲测丝滑,体验跃迁|AllData通过集成开源项目DataVines,一站式解决数据质量难题
java·大数据·数据结构·数据库·人工智能·算法·云原生
Cat_Rocky10 小时前
K8S部署EFK日志收集技术栈
容器·kubernetes·prometheus
u01196082310 小时前
k8s-kubectl命令
java·容器·kubernetes
东北甜妹10 小时前
k8s上部署Prometheus 步骤
大数据·kubernetes