本文作者:丁辉
Helm部署Kube-Prometheus-Stack
介绍
Kube-Prometheus-Stack 是一个全面的监控解决方案,专为 Kubernetes 集群设计,集成了 Prometheus、Grafana、Alertmanager 等组件。它通过提供预配置的部署,简化了在 Kubernetes 环境中设置监控系统的过程。
开始部署
添加仓库
1
2helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update创建命名空间
1
kubectl create namespace monitor
编写 values.yaml 文件
1
vi kube-prometheus-stack-values.yaml
内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110prometheusOperator:
admissionWebhooks:
patch:
image:
registry: registry.aliyuncs.com # 配置镜像加速
repository: google_containers/kube-webhook-certgen
# 关闭默认报警策略(建议关闭后自定义报警策略)
defaultRules:
create: false
# 配置 alertmanager 飞书报警通知
# Helm部署PrometheusAlert
# 文档: https://blog.offends.cn/Kubernetes/Helm/Helm%E9%83%A8%E7%BD%B2PrometheusAlert.html
alertmanager:
tplConfig: true
stringConfig: |
global:
# 在警报被标记为已解决后,Alertmanager 等待 5 分钟以更新警报状态。如果在此时间内警报消失,Alertmanager 将其标记为已解决。
resolve_timeout: 5m
route:
# 将具有相同警报名称(alertname)的警报分组在一起。
group_by: ['alertname']
# 首次接收到警报后,Alertmanager 将等待 30 秒再发送,以便将可能相关的警报合并。
group_wait: 30s
# 在同一个组的警报被发送后,Alertmanager 等待 5 分钟后才会发送下一个组的警报。
group_interval: 5m
# 重复发送同一组警报的时间间隔为 30 分钟,以提醒长时间存在的问题。
repeat_interval: 30m
receiver: 'web.hook.prometheusalert'
receivers:
- name: 'web.hook.prometheusalert'
webhook_configs:
- url: 'http://prometheusalert.monitor.svc.cluster.local:8080/prometheusalert?type=fs&tpl=prometheus-fs&fsurl=https://open.feishu.cn/open-apis/bot/v2/hook/****'
send_resolved: true #通知已经恢复的告警
inhibit_rules:
# 用于设置警报抑制规则。
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
alertmanagerSpec:
# 强制启用集群模式,即使只有一个副本也可以启用集群模式。
forceEnableClusterMode: false
storage:
volumeClaimTemplate:
spec:
storageClassName:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 50Gi
grafana:
# 开启默认仪表片
defaultDashboardsEnabled: false
# 配置 grafana 时区
defaultDashboardsTimezone: cst
# 配置 grafana 密码
adminPassword: admin
# grafana 挂载持久化存储
persistence:
enabled: true
storageClassName: "" # 指定存储卷, 不指定则需要集群内存在默认的存储卷
# 开启 ingress 对外访问
ingress:
enabled: true
ingressClassName: # 指定 ingress 控制器, 不指定则需要集群内存在默认的 ingress 控制器
hosts:
- # 域名
path: /
tls:
- secretName: grafana-general-tls
hosts:
- # 域名
prometheus:
prometheusSpec:
# 指定外部 alertmanager
#additionalAlertManagerConfigs:
#- static_configs:
#- targets:
#- "192.168.1.10:9093"
# 是否启用 --web.enable-remote-write-receiver 特性
enableRemoteWriteReceiver: false
# 评估频率
evaluationInterval: "30s"
# 抓去数据间隔
scrapeInterval: "5s"
# 这些设置表明所提及的选择器(规则、服务监视器、Pod 监视器和抓取配置)将具有独立的配置,而不会基于 Helm 图形值。(否则你的 ServiceMonitor 可能不会被自动发现)
ruleSelectorNilUsesHelmValues: false
serviceMonitorSelectorNilUsesHelmValues: false
podMonitorSelectorNilUsesHelmValues: false
probeSelectorNilUsesHelmValues: false
scrapeConfigSelectorNilUsesHelmValues: false
# prometheus 挂载持久化存储
storageSpec:
volumeClaimTemplate:
spec:
storageClassName: # 指定存储卷, 不指定则需要集群内存在默认的存储卷
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
# 子 chart 镜像加速
kube-state-metrics:
image:
registry: k8s.dockerproxy.com创建Nginx证书secret
cert为.pem和.crt文件都可以
1
kubectl create secret tls grafana-general-tls --key nginx.key --cert nginx.pem -n monitor
安装
1
2helm install kube-prometheus-stack -f kube-prometheus-stack-values.yaml \
prometheus-community/kube-prometheus-stack -n monitor访问 Grafana 面板,初始账号
admin
密码是prom-operator
卸载
卸载 kube-prometheus-stack
1
helm uninstall kube-prometheus-stack -n monitor
删除 secret
1
kubectl delete secret grafana-general-tls -n monitor
删除命名空间
1
kubectl delete namespace monitor
问题记录
当我使用 Nginx 代理 Grafana 访问地址为
https://localhost/monitor
时, Grafana 无法被正常代理解决方法:
编辑 configmap
1
kubectl edit configmap kube-prometheus-stack-grafana -n monitor
在
[server]
下方添加或更改1
2domain = 'localhost'
root_url=%(protocol)s://%(domain)s:%(http_port)s/monitor
RKE1 部署的 Kubernetes 集群无法监控到 Kubernetes 组件部分组件, 需要添加额外 yaml 参数, 内容如下
配置完成后发现无法连接, 原因是组件监控未对外开放访问, 按照文档操作开放后解决
I'm so cute. Please give me money.
- 本文链接: https://blog.offends.cn/Kubernetes/Helm/Helm部署Kube-Prometheus-Stack.html
- 版权声明: 本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。