注: 本文Rancher版本为rancher2.6.x
一定要记得在hosts文件编辑这些集群的host, 使这些台机器可以通过hostname互通
安装Charts

配置
配置Prometheus、Alerting以及Grafana
- 默认Prometheus的admin api是不开启的,如果希望通过api方式操作Prometheus数据,则需要打开admin api
- 可以配置各项【grafana/prometheus/alertmanager】的
enable参数来控制是否安装此工作负载

已知问题
有一个已知问题,K3s 群集需要更多的默认内存。如果你在 K3s 集群上启用监控,rancher lab建议将prometheus.prometheusSpec.resources.memory.limit至少设为 2500 Mi,
prometheus.prometheusSpec.resources.memory.request至少设为 1750 Mi。
采集的数据越多,需要的资源也越多
配置持久化
这里可以选择本地或者其他的文件存储或者块存储进行挂载。以下示例我们创建一个host-path进行绑定挂载
默认情况下,持久化数据保留10天或50GB。启动集群监控或者项目监控,Prometheus 只会把监控数据临时存储在自己的 Pod 里面。当 Prometheus 或者 Grafana 意外宕机后,将面临所有监控数据丢失的问题。因此,Rancher 推荐使用外部持久化存储,在 Prometheus 或者 Grafana 恢复后,之前所有的监控数据不会有任何的损失。在配置 Prometheus 或者 Grafana 使用持久化存储时,请指定持久卷的大小以及选择对应的存储类。
Prometheus配置pv
创建storageClass和对应pv
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: prometheus-store
provisioner: rancher.io/local-path
reclaimPolicy: Delete
apiVersion: v1
kind: PersistentVolume
metadata:
name: prometheus-pv
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 50Gi
hostPath:
path: /var/data/prometheus
type: DirectoryOrCreate
persistentVolumeReclaimPolicy: Retain
storageClassName: prometheus-store
volumeMode: Filesystem赋权文件夹
/var/data/prometheus,并在安装Prometheus时指定storageClasschown 1000:1000 -R /var/data/

Grafana 配置pvc
默认grafana数据是存储在pod中,可以通过配置pvc来挂载数据到本地/其他介质
- 先创建一个pv
1 | apiVersion: storage.k8s.io/v1 |
- 然后通过面板来选择根据此pv新建一个pvc
持久化 Grafana 仪表板
- 创建好的dashboard可在json model中查看到模板信息,如下

- 然后将其以如下格式,创建ConfigMap在**
cattle-dashboard**命名空间下(默认)
1 | apiVersion: v1 |
- 效果:创建 ConfigMap 后,即使 Grafana pod 重启了,ConfigMap 也能显示在 Grafana UI 上并持久化。
- 其他内容需参考:https://ranchermanager.docs.rancher.com/zh/how-to-guides/advanced-user-guides/monitoring-alerting-guides/create-persistent-grafana-dashboard
配置外部访问【NodePort】
参考:
- https://grafana.com/tutorials/run-grafana-behind-a-proxy/
- https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/
- https://github.com/grafana/helm-charts/blob/main/charts/grafana/README.md
- https://github.com/grafana/grafana/blob/main/conf/defaults.ini
默认为ClusterIp,可通过如下配置暴露端口【搜索ClusterIp,会找到对应(Prometheus/Grafana/AlertManager)配置,将其修改为NodePort】

其他
将prometheus和prometheus-adapter【grafana】单独放在一台机器上
因为如果监控服务过多,这东西就需要大量的资源去计算,所以这里单独配置下yaml文件
grafana如果也希望
为k8s集群中的一台节点配置污点(例如:
k3s-prod-node5)kubectl taint nodes k3s-prod-node5 deploy=node5:NoSchedule点击Edit YAML,配置容忍,以及将服务部署在
k3s-prod-node5节点上nodeSelector和tolerations是放在prometheusSpec:节点下的
1
2
3
4
5
6
7
8
nodeSelector:
kubernetes.io/hostname: k3s-prod-node5
tolerations:
- effect: NoSchedule
key: deploy
operator: Equal
value: node5
Upgrade/Update

- 因为monitoring本质是以helm chart方式安装的,所以更新/修改操作也需要以chart方式执行
- 这里针对Rancher2.6.x - 2.8.x疑似有个bug,Memory Limit在修改成功后,返回界面查看还是原来的值(所以最好是通过yaml配置memory/cpu limit和request)