kube-prometheus-stack:如何持久化Grafana自定义告警及相关配置
配置kube-prometheus-stack实现Grafana持久化与Pod驱逐Teams告警通知
一、修改Helm Chart配置(核心步骤)
所有自定义配置必须通过Helm values定义,避免手动创建的资源因Pod重建、Helm升级丢失。
1. 开启Grafana数据持久化
在自定义values.yaml中配置Grafana持久化,用PVC存储Grafana的用户、通知渠道、仪表盘等数据:
grafana: persistence: enabled: true storageClassName: "default" # 替换为AKS中可用的存储类,比如managed-premium size: 10Gi # 若使用已创建的PVC,取消注释并指定名称 # existingClaim: "grafana-pvc"
2. 预配置Grafana用户账号
直接在values.yaml中定义所需用户,避免手动创建后丢失:
grafana: users: - name: "ops-user" passwordSecret: "grafana-users" # 存储密码的Secret名称 passwordKey: "ops-user-password" # Secret中对应的key role: "Editor" # 可选Admin/Editor/Viewer # 用Secret管理默认admin密码(可选) admin: passwordSecret: "grafana-admin-secret" passwordKey: "admin-password"
3. 预配置Microsoft Teams通知渠道
通过values.yaml定义Teams webhook通知渠道,引用存储webhook URL的Secret:
grafana: notifiers: notifierConfigs: - name: "Microsoft Teams 告警通知" type: "teams" uid: "teams-alert-notifier" isDefault: false settings: url: "${TEAMS_WEBHOOK_URL}" # 从环境变量读取URL secureSettings: {} # 挂载存储Teams URL的Secret到Grafana Pod,注入环境变量 extraSecretMounts: - name: teams-webhook-secret secretName: "teams-webhook-secret" mountPath: "/etc/grafana/teams-webhook" readOnly: true extraEnv: - name: TEAMS_WEBHOOK_URL valueFrom: secretKeyRef: name: "teams-webhook-secret" key: "webhook-url"
4. 定义Pod驱逐告警规则
通过additionalPrometheusRules配置自定义告警规则,Helm会自动创建PrometheusRule资源:
additionalPrometheusRules: - name: pod-eviction-alerts groups: - name: pod_eviction.rules rules: - alert: PodEvicted expr: kube_pod_status_phase{phase="Failed", reason="Evicted"} == 1 for: 1m labels: severity: critical annotations: summary: "Pod {{ $labels.pod }} 被驱逐" description: "命名空间 {{ $labels.namespace }} 中的Pod {{ $labels.pod }} 因资源不足或其他原因被驱逐,请及时排查。"
二、调整Kubernetes资源
1. 创建存储敏感信息的Secret
- 存储Teams webhook URL:
kubectl create secret generic teams-webhook-secret -n monitoring --from-literal=webhook-url="https://your-teams-webhook-url"
- 存储Grafana用户密码(示例):
kubectl create secret generic grafana-users -n monitoring --from-literal=ops-user-password="your-strong-password" kubectl create secret generic grafana-admin-secret -n monitoring --from-literal=admin-password="your-admin-password"
2. 验证或创建PVC(可选)
若未通过Helm自动创建PVC,手动创建:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: grafana-pvc namespace: monitoring spec: accessModes: - ReadWriteOnce storageClassName: "default" resources: requests: storage: 10Gi
创建后在Helm values中指定existingClaim: "grafana-pvc"。
3. ConfigMap调整(可选)
若需修改Grafana核心配置(如告警启用状态),通过values.yaml的grafana.ini配置:
grafana: ini: alerting: enabled: true execute_alerts: true
三、应用Helm配置升级
执行Helm升级命令,让配置生效:
helm upgrade kube-prometheus-stack prometheus-community/kube-prometheus-stack -f custom-values.yaml -n monitoring
所有配置将由Helm统一管理,Grafana数据通过PVC持久化,不会因Pod重建或Helm升级丢失,Pod驱逐告警规则和Teams通知渠道也会自动部署。
内容的提问来源于stack exchange,提问作者A Bit of Help
相关产品推荐
相关产品推荐

