用 Helm 在 Kubernetes 上部署 Prometheus
Helm 部署 Prometheus 到 K8s 全流程:添加仓库、安装 chart、values 定制(持久化、保留期、资源)、kube-prometheus-stack 全家桶方案与生产注意事项。
在 Kubernetes 上部署 Prometheus 最省事的方式是 Helm chart——一条命令拉起 Prometheus + Alertmanager + Node Exporter + kube-state-metrics 全家桶。本文走完从安装到生产定制的流程。
为什么是 Helm
手工维护 Prometheus 的 K8s 资源(Deployment、Service、ConfigMap、RBAC、PVC……)是几十上百个 YAML 的工作量。Helm 把它们打包成 chart,参数化定制,升级回滚一键完成。
快速开始
# 添加仓库
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
# 默认配置安装
helm install prometheus prometheus-community/prometheus --namespace monitoring --create-namespace
几分钟后 kubectl get pods -n monitoring 应看到 prometheus-server、alertmanager、node-exporter(DaemonSet)、kube-state-metrics 全部 Running。
生产必改:values 定制
# values.yaml
server:
persistentVolume:
enabled: true
size: 50Gi # 默认 8Gi,生产远远不够
retention: 30d # 保留期
resources:
requests: { cpu: 500m, memory: 2Gi }
limits: { cpu: 2, memory: 8Gi }
alertmanager:
persistentVolume:
enabled: true
helm upgrade prometheus prometheus-community/prometheus -n monitoring -f values.yaml
⚠️ chart 输出的警告要认真看——比如持久化默认关闭,Pod 重建数据全丢。
更主流的选择:kube-prometheus-stack
如果目标是"K8s 集群监控全家桶",直接用更大的 chart:
helm install monitoring prometheus-community/kube-prometheus-stack -n monitoring
它在 Prometheus 之上打包了:Grafana(含几十套预置 K8s 仪表盘)、Prometheus Operator(用 ServiceMonitor/PodMonitor CRD 声明式管理抓取目标)、预置告警规则集。K8s 场景下这基本是社区标准答案。
核心概念:ServiceMonitor
Operator 模式下,抓取配置不再改 prometheus.yml,而是写 CRD:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: my-app
namespace: monitoring
spec:
selector:
matchLabels: {app: my-app}
endpoints:
- port: metrics
interval: 15s
应用只要暴露 /metrics 并打好标签,监控自动跟上。
观测云对照
K8s 监控的另一条路:DataKit 以 DaemonSet 部署即可采集集群全量指标(主机、容器、K8s 对象状态),无需维护 Prometheus + Operator + Grafana 的组件矩阵;已有 kube-prometheus-stack 的资产也可以保留——DataKit 抓取其暴露的指标,数据进观测云统一存储与告警,本地只留轻量采集层,长期存储和高可用交给平台。
常见问题(FAQ)
Q:prometheus chart 和 kube-prometheus-stack 选哪个?
A:只想监控外部目标(把 K8s 当运行环境)→ 轻量的 prometheus chart;要监控 K8s 集群本身 + 应用 → kube-prometheus-stack。
Q:PVC 扩容后能直接改 size 吗?
A:取决于 StorageClass 是否支持在线扩容(allowVolumeExpansion: true)。不支持的话需要新建 PV 迁移数据。
Q:多集群怎么搞?
A:每集群跑本地 Prometheus,用 remote write 汇聚到中心(Thanos 或观测云这类平台),中心做全局视图与统一告警。