天天看点

K8S之Helm部署Prometheus监控平台并实现监控告警

更新预告:即将更新配置alertmanager邮件告警,监控物理机状态,k8s状态,以及数据库、中间件等

文章目录

    • 概述
    • 环境准备
      • 安装helm
      • chart包下载
      • 镜像同步
    • 安装Prometheus
      • 设置持久化存储
      • 部署
      • 创建NodePort
    • 安装Grafana
      • 创建Secret
      • chart包参数设置
        • 设置密码
        • 设置持久化存储
      • 部署
      • 创建NodePort
    • 配置dashboard
      • 登录grafana
      • 配置Data sources
      • 导入dashboard模版
    • 监控告警功能(后续更新)
      • alertmanager邮箱告警配置
      • prometheus告警规则配置
        • 监控物理机状态
        • 监控k8s状态
    • 数据库及中间件的监控告警配置(后续更新)
      • Mysql
      • Redis
      • kafka
      • RabbitMQ

概述

本文采用helm安装Prometheus+Grafana,及数据库&中间件的exporter,并通过配置alertmanager及告警rules实现监控告警。其中所采用的helm仓库及chart包如下所示:

  • helm仓库:
grafana: https://grafana.github.io/helm-charts
prometheus-community: https://prometheus-community.github.io/helm-charts
           
  • chart包:
grafana/grafana

prometheus-community/prometheus

prometheus-community/prometheus-mysql-exporter
prometheus-community/prometheus-redis-exporter
prometheus-community/prometheus-kafka-exporter
prometheus-community/prometheus-rabbitmq-exporter
           

环境准备

安装helm

  • 项目地址:https://github.com/helm/helm
  • 安装:
# 下载(自行选择版本)
wget https://get.helm.sh/helm-v3.6.1-linux-amd64.tar.gz

# 解压
tar zxvf helm-v3.6.1-linux-amd64.tar.gz

# 安装
mv linux-amd64/helm /usr/local/bin/

# 验证
helm version
           

chart包下载

# 添加grafana和prometheus-community仓库
helm repo add grafana https://grafana.github.io/helm-charts
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

# 更新仓库
helm repo update

# 查询chart
helm search repo grafana

# 创建工作目录
mkdir -p workspace/[grafana,prometheus]

# 拉取所有的chart包(请放到相应的目录中)
helm pull grafana/grafana
helm pull prometheus-community/prometheus
helm pull prometheus-community/prometheus-mysql-exporter
helm pull prometheus-community/prometheus-redis-exporter
helm pull prometheus-community/prometheus-kafka-exporter
helm pull prometheus-community/prometheus-rabbitmq-exporter

# 分别解压
tar zxvf [压缩包] 
           

镜像同步

  • prometheus内嵌kube-state-metrics安装包,其使用的是gcr镜像,也是所有chart包中唯一的gcr镜像,可能会导致镜像拉取失败,因此有必要提前同步该镜像
K8S之Helm部署Prometheus监控平台并实现监控告警
  • 编辑配置文件
已同步到个人阿里云镜像仓库
vim ~/workspace/prometheus/prometheus/charts/kube-state-metrics/values.yaml
           
# Default values for kube-state-metrics.
prometheusScrape: true
image:
  repository: registry.cn-zhangjiakou.aliyuncs.com/lc-sc/kube-state-metrics
  tag: v2.0.0
  pullPolicy: IfNotPresent
           

安装Prometheus

  • 进入工作目录,按需修改镜像,持久化存储,副本数等配置;
  • 建议首次部署时直接修改values中的配置,而不是用–set的方式,这样后期upgrade不必重复设置。
cd  ~/workspace/promethues/promethues
vim values.yaml
           

设置持久化存储

  • 若无需持久化,将

    enabled

    设置为

    false

  • 若使用文件存储,需将accessMode改为ReadWriteMany
  • storageClass的创建请参考之前的文章
# 搜索持久化设置,VIM界面按Esc后输入(再按n搜索下一个):
/persistentVolume

# 总共有三处,分别为alertmanager,Prometheus server和pushgateway。
# 参考官方文档建议配置,本文开启alertmanager和Prometheus server的持久化
           
K8S之Helm部署Prometheus监控平台并实现监控告警

部署

# 创建命名空间
kubectl create ns prometheus

# 确保是在工作目录:~/workspace/prometheus/prometheus,helm部署
helm install prometheus -n prometheus .
           
  • 部署完查看service,将会在grafana中配置数据源时用到
K8S之Helm部署Prometheus监控平台并实现监控告警

创建NodePort

亦可在values中设置
vim service-np.yaml
           
apiVersion: v1
kind: Service
metadata:
  name: prometheus-server-np
  namespace: prometheus
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 9090
    nodePort: 30090
  selector:
    app: prometheus
    component: server
    release: prometheus
  type: NodePort
           
kubectl apply -f service-np.yaml
           
  • 访问prometheus控制台
K8S之Helm部署Prometheus监控平台并实现监控告警

安装Grafana

创建Secret

  • 在grafana命名空间下新建secret,帐号密码:admin / grafana
kubectl create ns grafana

echo -n "admin" | base64
echo -n "grafana" | base64
           
vim secret.yaml
           
apiVersion: v1
kind: Secret
metadata:
  name: grafana
  namespace: grafana
type: Opaque
data:
  admin-user: YWRtaW4=
  admin-password: Z3JhZmFuYQ==
           
kubectl apply -f secret.yaml
           

chart包参数设置

  • 进入工作目录,按需修改镜像,持久化存储,副本数等配置;
  • 建议首次部署时直接修改values中的配置,而不是用–set的方式,这样后期upgrade不必重复设置。
cd  ~/workspace/grafana/grafana
vim values.yaml
           

设置密码

admin:
  existingSecret: "grafana"    # 即之前创建的secret
  userKey: admin-user
  passwordKey: admin-password
           
K8S之Helm部署Prometheus监控平台并实现监控告警

设置持久化存储

  • 若无需持久化,将

    enabled

    设置为

    false

  • 若使用文件存储,需将accessMode改为ReadWriteMany
# 搜索持久化设置,VIM界面按Esc后输入:
/persistence

persistence:
  type: pvc
  enabled: true
  storageClassName: nfs-sc
  accessModes:
    - ReadWriteOnce
  size: 2Gi
           
K8S之Helm部署Prometheus监控平台并实现监控告警

部署

创建NodePort

亦可在values中设置
vim service-np.yaml
           
apiVersion: v1
kind: Service
metadata:
  name: grafana-np
  namespace: grafana
spec:
  ports:
  - name: service
    port: 80
    protocol: TCP
    targetPort: 3000
    nodePort: 30130
  selector:
    app.kubernetes.io/instance: grafana
    app.kubernetes.io/name: grafana
  type: NodePort
           
kubectl apply -f service-np.yaml
           

配置dashboard

登录grafana

帐号密码(之前自定义的secret): admin /grafana
K8S之Helm部署Prometheus监控平台并实现监控告警

配置Data sources

  • 首先,获取prometheus的service地址
# 查询svc
kubectl get svc -n prometheus

# prometheus-server.prometheus:80
           
  • 进入Data sources配置页面
K8S之Helm部署Prometheus监控平台并实现监控告警
  • 添加Prometheus,URL填入prometheus的service(80端口可省略)
K8S之Helm部署Prometheus监控平台并实现监控告警

导入dashboard模版

  • Data sources配置完成后,导入模版
K8S之Helm部署Prometheus监控平台并实现监控告警
  • 导入模版:8919

8919:Node Exporter for Prometheus Dashboard CN v20201010

更多模版请参考官网网站:https://grafana.com/grafana/dashboards

K8S之Helm部署Prometheus监控平台并实现监控告警
  • 数据源选择Prometheus,然后点击import
K8S之Helm部署Prometheus监控平台并实现监控告警
  • 最终效果:
K8S之Helm部署Prometheus监控平台并实现监控告警

监控告警功能(后续更新)

alertmanager邮箱告警配置

prometheus告警规则配置

监控物理机状态

监控k8s状态

数据库及中间件的监控告警配置(后续更新)

Mysql

Redis

kafka

RabbitMQ

继续阅读