Skip to content
SRE运维进阶之路SRE运维进阶之路
github icon
  • kubernetes

    • Kubernetes 学习笔记
      • 集群搭建

        • /cloudnative/kubernetes/cicd
          • /cloudnative/kubernetes/first
          • 集群网络

            • /cloudnative/kubernetes/cicd
              • /cloudnative/kubernetes/first
              • 运维手册

                • /cloudnative/kubernetes/cicd
                  • /cloudnative/kubernetes/first
                  • 故障排查

                    • /cloudnative/kubernetes/cicd
                      • /cloudnative/kubernetes/first

                    使用 Helm 和 Operator 快速部署 Prometheus

                    author iconClaycalendar icon2021年7月13日category icon
                    • 云原生
                    tag icon
                    • Kubernetes
                    timer icon大约 4 分钟

                    此页内容
                    • 安装 Helm
                    • 准备
                    • 安装
                    • 验证安装
                    • 管理
                    • 管理操作
                    • 增加钉钉告警

                    # 使用 Helm 和 Operator 快速部署 Prometheus

                    随着heapster项目停止更新并慢慢被metrics-server取代,集群监控这项任务也将最终转移。prometheus的监控理念、数据结构设计其实相当精简,包括其非常灵活的查询语言;但是对于初学者来说,想要在k8s集群中实践搭建一套相对可用的部署却比较麻烦,由此还产生了不少专门的项目(如:prometheus-operatoropen in new window)。

                    Helm致力于成为k8s集群的应用包管理工具,希望像linux 系统的RPM DPKG那样成功;确实在k8s上部署复杂一点的应用很麻烦,需要管理很多yaml文件(configmap,controller,service,rbac,pv,pvc等等),而helm能够整齐管理这些文档:版本控制,参数化安装,方便的打包与分享等。

                    • 建议积累一定k8s经验以后再去使用helm;对于初学者来说手工去配置那些yaml文件对于快速学习k8s的设计理念和运行原理非常有帮助,而不是直接去使用helm,面对又一层封装与复杂度。

                    Operator 用于管理 Kubernetes 的有状态分布式应用。

                    # 安装 Helm

                    在官方repo下载release版本open in new window中自带的二进制文件即可(以Linux amd64为例)

                    wget https://get.helm.sh/helm-v3.6.1-linux-amd64.tar.gz
                    tar -xvf helm-v3.6.1-linux-amd64.tar.gz 
                    mv ./linux-amd64/helm /usr/bin
                    
                    1
                    2
                    3
                    • 启用官方 charts 仓库
                    helm repo add stable https://charts.helm.sh/stable
                    
                    1

                    # 准备

                    创建名称空间

                    kubectl create ns monitoring
                    
                    1

                    下载镜像源

                    helm pull stable/prometheus-operator
                    
                    1

                    解压

                    tar -xvf prometheus-operator-9.3.2.tgz
                    rm -f prometheus-operator-9.3.2.tgz
                    cd prometheus-operator/
                    cp values.yaml{,.bak}
                    
                    1
                    2
                    3
                    4

                    修改一些参数vim values.yaml

                    • 修改ControllerManager

                      image-20200721111652787

                    • 修改etcd,增加证书认证

                      kubectl create secret generic etcd-certs -n monitoring --from-file=/etc/kubernetes/ssl/ca.pem --from-file=/etc/kubernetes/ssl/kubernetes-key.pem --from-file=/etc/kubernetes/ssl/kubernetes.pem
                      
                      1

                      image-20200721112626079

                      image-20200721112701363

                    • 修改Scheduler

                      image-20200721112954847

                    • 修改Proxy

                      image-20200721113147517

                    • 暴露服务,将grafana、prometheus、alertmanager中service的暴露方式改为NodePort

                      prometheus、alertmanager,找到service 的type改为NodePort即可

                      grafana,找到service后,新增以下两行

                          type: NodePort
                          nodePort: 30524
                      
                      1
                      2

                    # 安装

                    helm install  prometheus-operator --namespace=monitoring ./
                    
                    1

                    查找 grafana admin 账户密码

                    kubectl get secret --namespace monitoring  prometheus-operator-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
                    
                    1

                    # 验证安装

                    # 查看相关pod和svc
                    $ kubectl get pod,svc -n monitoring 
                    NAME                                                          READY   STATUS    RESTARTS   AGE
                    pod/alertmanager-prometheus-operator-alertmanager-0           2/2     Running   0          5m54s
                    pod/prometheus-operator-grafana-7769fc4f77-2wpxk              2/2     Running   0          10m
                    pod/prometheus-operator-kube-state-metrics-69fcc8d48c-vlxv6   1/1     Running   0          10m
                    pod/prometheus-operator-operator-c68d5d4cc-b2m77              2/2     Running   0          10m
                    pod/prometheus-operator-prometheus-node-exporter-gxmsp        1/1     Running   0          10m
                    pod/prometheus-operator-prometheus-node-exporter-jb9qm        1/1     Running   0          10m
                    pod/prometheus-operator-prometheus-node-exporter-ld4c4        1/1     Running   0          10m
                    pod/prometheus-operator-prometheus-node-exporter-tr2vg        1/1     Running   0          10m
                    pod/prometheus-operator-prometheus-node-exporter-x9ss4        1/1     Running   0          10m
                    pod/prometheus-operator-prometheus-node-exporter-xrg7s        1/1     Running   0          10m
                    pod/prometheus-prometheus-operator-prometheus-0               3/3     Running   1          5m44s
                    
                    NAME                                                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
                    service/alertmanager-operated                          ClusterIP   None            <none>        9093/TCP,9094/TCP,9094/UDP   5m54s
                    service/prometheus-operated                            ClusterIP   None            <none>        9090/TCP                     5m44s
                    service/prometheus-operator-alertmanager               NodePort    10.68.148.209   <none>        9093:30903/TCP               10m
                    service/prometheus-operator-grafana                    NodePort    10.68.154.126   <none>        80:30524/TCP                 10m
                    service/prometheus-operator-kube-state-metrics         ClusterIP   10.68.166.79    <none>        8080/TCP                     10m
                    service/prometheus-operator-operator                   ClusterIP   10.68.42.82     <none>        8080/TCP,443/TCP             10m
                    service/prometheus-operator-prometheus                 NodePort    10.68.2.85      <none>        9090:30090/TCP               10m
                    service/prometheus-operator-prometheus-node-exporter   ClusterIP   10.68.85.233    <none>        9100/TCP                     10m
                    
                    1
                    2
                    3
                    4
                    5
                    6
                    7
                    8
                    9
                    10
                    11
                    12
                    13
                    14
                    15
                    16
                    17
                    18
                    19
                    20
                    21
                    22
                    23
                    24
                    • 访问prometheus的web界面:http://$NodeIP:30090
                    • 访问alertmanager的web界面:http://$NodeIP:30903
                    • 访问grafana的web界面:http://$NodeIP:30524 (默认用户密码 admin:prom-operator,可在web界面修改)

                    # 管理

                    # 管理操作

                    • 升级(修改配置):修改配置请在``等文件中进行,保存后执行:
                    $ helm upgrade prometheus-operator -n monitoring ./
                    
                    1
                    • 回退:具体可以参考helm help rollback文档
                    # 查看历史找到版本号
                    $ helm history prometheus-operator -n monitoring
                    $ helm rollback prometheus-operator [REVISION] -n monitoring
                    
                    1
                    2
                    3
                    • 删除
                    $ helm delete prometheus-operator -n monitoring
                    
                    1

                    # 增加钉钉告警

                    使用 PrometheusAlert全家桶 进行钉钉告警

                    文档:https://feiyu563.gitbook.io/prometheusalert/

                    自定义模板如下,如何自定义模板,详见文档:

                    {{ $var := .externalURL}}{{ range $k,$v:=.alerts }}
                    {{if eq $v.status "resolved"}}
                    ## [Prometheus恢复信息]({{$v.generatorURL}})
                    
                    > <font color="info">告警名称</font>:[{{$v.labels.alertname}}]({{$var}})
                    
                    > <font color="info">告警级别</font>:{{$v.labels.severity}}
                    
                    > <font color="info">当前状态</font>:{{$v.status}}
                    
                    > <font color="info">告警分组</font>:{{$v.labels.team}}
                    
                    > <font color="info">开始时间</font>:{{GetCSTtime $v.startsAt}}
                    
                    > <font color="info">结束时间</font>:{{GetCSTtime $v.endsAt}}
                    
                    > <font color="info">实例地址</font>:{{$v.labels.instance}}
                    
                    **{{$v.annotations.message}}**
                    {{else}}
                    ## [ <font color="#FF0000">Prometheus告警信息</font>]({{$v.generatorURL}})
                    > <font color="#FF0000">告警名称</font>:[{{$v.labels.alertname}}]({{$var}})
                    
                    > <font color="#FF0000">告警级别</font>:{{$v.labels.severity}}
                    
                    > <font color="#FF0000">当前状态</font>:{{$v.status}}
                    
                    > <font color="#FF0000">告警分组</font>:{{$v.labels.team}}
                    
                    > <font color="#FF0000">开始时间</font>:{{GetCSTtime $v.startsAt}}
                    
                    > <font color="#FF0000">实例地址</font>:{{$v.labels.instance}}
                    
                    {{$v.annotations.message}}
                    {{end}}
                    {{ end }}
                    
                    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

                    跑通 PrometheusAlert 后,修改 values.yaml 配置文件

                    image-20210713205650167

                    注释掉一个etcd alert rules templates/prometheus/rules/etcd.yaml和templates/prometheus/rules-1.14/etcd.yaml文件,不确定是误报还是bug,etcdHighNumberOfFailedGRPCRequests

                    • 升级
                    $ helm upgrade prometheus-operator -n monitoring ./
                    
                    1
                    edit icon编辑此页open in new window
                    上次编辑于: 2022/4/27 15:33:00
                    贡献者: clay-wangzhi
                    备案号:冀ICP备2021007336号
                    Copyright © 2022 Clay