在 Kubernetes 中用 Helm 安装 Prometheus 时,最推荐的自定义方式是基于官方 Chart 默认配置生成 values 文件,修改关键参数后通过 -f 标志传入安装命令。
先说结论:不要直接修改 Chart 包内部文件,而是通过本地 values 文件覆盖默认配置,既方便版本升级又能保留个性化设置。
- 适合:需要调整存储大小、资源限制或服务暴露方式的场景
- 先准备:确认集群 StorageClass 可用,规划好命名空间和资源配额
- 验收:检查 Pod 状态、PVC 绑定情况及 Service 端口连通性
命令速用版
# 1. 添加官方仓库
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
# 2. 获取默认配置参考(仅用于查阅,不建议直接作为安装文件)
helm show values prometheus-community/kube-prometheus-stack > default-values.yaml
# 3. 创建最小化 custom-values.yaml 后执行安装
helm install prometheus prometheus-community/kube-prometheus-stack \
`--namespace` monitoring \
`--create-namespace` \
-f custom-values.yaml为什么会这样
Helm Chart 本质上是一组带默认值的 Kubernetes 资源模板。官方提供的默认配置通常为了通用性,存储大小、资源限制或服务类型可能不符合实际生产需求。直接修改 Chart 源码会导致升级困难,而通过 values 文件覆盖配置,既能保留自定义项,又能在 Chart 版本更新时平滑迁移。此外,Prometheus 监控数据量增长快,默认的临时存储重启后会丢失,必须通过 values 文件配置持久化存储。
分步处理
步骤 1:确认环境前提
确保集群已安装 Helm 3.0+ 版本,且有权限创建命名空间和 PVC。如果集群版本较新,建议使用 Helm v3.12.0 或更高版本,以避免潜在的 HTTP/2 兼容性问题。
步骤 2:生成并精简配置文件
使用 helm show values 导出默认配置仅作为参考。在创建 custom-values.yaml 时,建议仅保留修改项,删除未改动的默认配置。这样可以减少文件体积,便于后续维护对比,避免默认值变更导致意外覆盖。
# custom-values.yaml 片段示例(仅包含覆盖项)
prometheus:
prometheusSpec:
# 配置持久化存储
storageSpec:
volumeClaimTemplate:
spec:
storageClassName: "standard" # 替换为集群实际的 StorageClass
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 50Gi # 根据监控规模调整
# 设置资源限制
resources:
limits:
cpu: "2"
memory: "4Gi"
requests:
cpu: "1"
memory: "2Gi"
# 数据保留时间
retention: 15d
grafana:
enabled: true
adminPassword: "your-strong-password" # 务必修改默认密码
persistence:
enabled: true
size: 10Gi步骤 3:执行部署
运行安装命令时指定 `--create-namespace` 自动创建命名空间。如果是更新现有配置,将 install 改为 upgrade。
怎么验证是否生效
1. 检查 Pod 状态
执行 kubectl get pods -n monitoring,确认 prometheus、alertmanager、grafana 相关 Pod 均为 Running 状态。
2. 验证持久化存储
执行 kubectl get pvc -n monitoring,查看 PVC 状态是否为 Bound,且容量与配置一致。
3. 测试服务访问
如果是 NodePort 类型,检查节点端口是否开放;如果是 LoadBalancer,检查外部 IP 是否分配。尝试访问 Grafana 页面确认数据源已自动配置。
常见坑
1. StorageClass 不存在
配置中指定的 storageClassName 必须在集群中存在,否则 PVC 会一直 Pending。执行 kubectl get storageclass 提前确认。
2. 资源限制过低
Prometheus 内存不足会导致 OOMKilled。建议初始设置内存限制为 2Gi,若出现 OOM 则按 50% 递增调整,或根据每 1000 个监控目标增加 500Mi 内存估算。
3. Helm 版本兼容
部分旧版本 Helm 拉取仓库时可能遇到协议错误,如遇 PROTOCOL_ERROR,建议升级 Helm 客户端版本。
4. 默认密码风险
Grafana 默认账号密码通常为 admin/prom-operator 或类似弱口令,必须在 values 文件中显式指定强密码。