banner
NEWS LETTER

Helm部署Kube-Prometheus-Stack

Scroll down

本文作者:丁辉

Helm部署Kube-Prometheus-Stack

介绍

Kube-Prometheus-Stack 是一个全面的监控解决方案,专为 Kubernetes 集群设计,集成了 Prometheus、Grafana、Alertmanager 等组件。它通过提供预配置的部署,简化了在 Kubernetes 环境中设置监控系统的过程。

开始部署

官方仓库

  1. 添加仓库

    1
    2
    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    helm repo update
  2. 创建命名空间

    1
    kubectl create namespace monitor
  3. 编写 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
    110
    prometheusOperator:
    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
  4. 创建Nginx证书secret

    cert为.pem和.crt文件都可以

    1
    kubectl create secret tls grafana-general-tls --key nginx.key --cert nginx.pem -n monitor
  5. 安装

    1
    2
    helm install kube-prometheus-stack -f kube-prometheus-stack-values.yaml \
    prometheus-community/kube-prometheus-stack -n monitor

    访问 Grafana 面板,初始账号 admin 密码是 prom-operator

卸载

  1. 卸载 kube-prometheus-stack

    1
    helm uninstall kube-prometheus-stack -n monitor
  2. 删除 secret

    1
    kubectl delete secret grafana-general-tls -n monitor
  3. 删除命名空间

    1
    kubectl delete namespace monitor

问题记录

  • 当我使用 Nginx 代理 Grafana 访问地址为 https://localhost/monitor 时, Grafana 无法被正常代理

    解决方法:

    1. 编辑 configmap

      1
      kubectl edit configmap kube-prometheus-stack-grafana -n monitor
    2. [server] 下方添加或更改

      1
      2
      domain = 'localhost'
      root_url=%(protocol)s://%(domain)s:%(http_port)s/monitor
  • RKE1 部署的 Kubernetes 集群无法监控到 Kubernetes 组件部分组件, 需要添加额外 yaml 参数, 内容如下

    RKE1-Kubernetes-values参数

    配置完成后发现无法连接, 原因是组件监控未对外开放访问, 按照文档操作开放后解决

    Rancher组件公开Metrics访问

I'm so cute. Please give me money.

其他文章
cover
Helm部署KongGateway
  • 70/01/01
  • 00:00
  • Kubernetes-Helm
cover
Helm部署Loki-Stack
  • 70/01/01
  • 00:00
  • Kubernetes-Helm
目录导航 置顶
  1. 1. Helm部署Kube-Prometheus-Stack
    1. 1.1. 介绍
    2. 1.2. 开始部署
    3. 1.3. 卸载
    4. 1.4. 问题记录
请输入关键词进行搜索