rancher官方文档

一个不错的Prometheus中文网站

Grafana安装文档

注: 本文Rancher版本为rancher2.6.x

一定要记得在hosts文件编辑这些集群的host, 使这些台机器可以通过hostname互通

安装Charts

配置

详细配置:https://github.com/prometheus-community/helm-charts/blob/main/charts/kube-prometheus-stack/values.yaml

配置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 或者 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
    22
    apiVersion: 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时指定storageClass

    chown 1000:1000 -R /var/data/

Grafana 配置pvc

默认grafana数据是存储在pod中,可以通过配置pvc来挂载数据到本地/其他介质

  • 先创建一个pv
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: grafana-store
provisioner: rancher.io/local-path
reclaimPolicy: Delete
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: grafana-pv
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 50Gi
hostPath:
path: /var/data/grafana
type: DirectoryOrCreate
persistentVolumeReclaimPolicy: Retain
storageClassName: grafana-store
volumeMode: Filesystem
  • 然后通过面板来选择根据此pv新建一个pvc

持久化 Grafana 仪表板

参考地址:https://ranchermanager.docs.rancher.com/zh/how-to-guides/advanced-user-guides/monitoring-alerting-guides/create-persistent-grafana-dashboard

  • 创建好的dashboard可在json model中查看到模板信息,如下
  • 然后将其以如下格式,创建ConfigMap在**cattle-dashboard**命名空间下(默认)
1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: v1
kind: ConfigMap
metadata:
labels:
grafana_dashboard: "1"
# configmap名称
name: <dashboard-name>
namespace: cattle-dashboards # 如果不使用默认命名空间,则修改此值
data:
# <dashboard-name>作为key,不会影响grafana面板内容
# <copied-json>
<dashboard-name>.json: |-
<copied-json>

配置外部访问【NodePort】

参考:

  1. https://grafana.com/tutorials/run-grafana-behind-a-proxy/
  2. https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/
  3. https://github.com/grafana/helm-charts/blob/main/charts/grafana/README.md
  4. https://github.com/grafana/grafana/blob/main/conf/defaults.ini

默认为ClusterIp,可通过如下配置暴露端口【搜索ClusterIp,会找到对应(Prometheus/Grafana/AlertManager)配置,将其修改为NodePort】

其他

prometheusprometheus-adaptergrafana】单独放在一台机器上

因为如果监控服务过多,这东西就需要大量的资源去计算,所以这里单独配置下yaml文件

grafana如果也希望

  1. 为k8s集群中的一台节点配置污点(例如:k3s-prod-node5

    kubectl taint nodes k3s-prod-node5 deploy=node5:NoSchedule

  2. 点击Edit YAML,配置容忍,以及将服务部署在k3s-prod-node5节点上

    • nodeSelectortolerations是放在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

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