1. 一、介绍prometheus-operator
  2. 二、查看配置rbac授权
  3. 三、helm安装prometheus-operator
  4. 四、配置监控k8s组件
  5. 五、granafa添加新数据源
  6. 六、监控mysql
    七、alertmanager配置
  7. 最后、卸载prometheus-operator

一、概述

The Prometheus resource 声明性地描述了Prometheus deployment所需的状态,而ServiceMonitor描述了由Prometheus 监视的目标集

  

Service

  

ServiceMonitor

  通过selector匹配service。ps:这里的team:frontend,下面会提及到。通过标签选择endpoints,实现动态发现服务

  port:web  #对应service的端口名

  

Prometheus

  通过matchLabels匹配ServiceMonitor的标签

  

  规则绑定:通过ruleSelector(匹配标签 prometheus:service-prometheus)选择PrometheusRule里面的labels  prometheus:service-prometheus

  

PrometheusRule

      规则配置

  

上面的架构配置后,使得前端团队能够创建新的servicemonitor和serive,从而允许对Prometheus进行动态重新配置

Altertmanager

  1. apiVersion: monitoring.coreos.com/v1
  2. kind: Alertmanager
  3. metadata:
  4. generation:
  5. labels:
  6. app: prometheus-operator-alertmanager
  7. chart: prometheus-operator-0.1.
  8. heritage: Tiller
  9. release: my-release
  10. name: my-release-prometheus-oper-alertmanager
  11. namespace: default
  12. spec:
  13. baseImage: quay.io/prometheus/alertmanager
  14. externalUrl: http://my-release-prometheus-oper-alertmanager.default:9093
  15. listenLocal: false
  16. logLevel: info
  17. paused: false
  18. replicas:
  19. retention: 120h
  20. routePrefix: /
  21. serviceAccountName: my-release-prometheus-oper-alertmanager
  22. version: v0.15.2

二、查看配置rbac授权(默认下面的不用配置)

  如果激活了RBAC授权,则必须为prometheus和prometheus-operator创建RBAC规则,为prometheus-operator创建了一个ClusterRole和一个ClusterRoleBinding。

  2.1 为prometheus sa赋予相关权限

  1. apiVersion: v1
  2. kind: ServiceAccount
  3. metadata:
  4. name: prometheus
  5.  
  6. apiVersion: rbac.authorization.k8s.io/v1beta1
  7. kind: ClusterRole
  8. metadata:
  9. name: prometheus
  10. rules:
  11. - apiGroups: [""]
  12. resources:
  13. - nodes
  14. - services
  15. - endpoints
  16. - pods
  17. verbs: ["get", "list", "watch"]
  18. - apiGroups: [""]
  19. resources:
  20. - configmaps
  21. verbs: ["get"]
  22. - nonResourceURLs: ["/metrics"]
  23. verbs: ["get"]
  24.  
  25. apiVersion: rbac.authorization.k8s.io/v1beta1
  26. kind: ClusterRoleBinding
  27. metadata:
  28. name: prometheus
  29. roleRef:
  30. apiGroup: rbac.authorization.k8s.io
  31. kind: ClusterRole
  32. name: prometheus
  33. subjects:
  34. - kind: ServiceAccount
  35. name: prometheus
  36. namespace: default

  2.2为prometheus-operator sa赋予相关权限,详细参考官方文档,这里就补贴出来了

    https://coreos.com/operators/prometheus/docs/latest/user-guides/getting-started.html

三、通过helm安装prometheus-operator

github官方链接

  https://github.com/helm/charts/tree/master/stable/prometheus-operator

安装命令

  $ helm install --name my-release stable/prometheus-operator

安装指定参数,比如prometheus的serivce type改为nodeport,默认为ClusterIP,(prometheus-operator service文件 官方的文档设置了cluster:None导致不能直接修改,办法是部署后,再通过kubectl -f service.yaml实现修改为nodeport)

  $ helm install --name my-release stable/prometheus-operator --set prometheus.service.type=NodePort  --set prometheus.service.nodePort=30090

或者安装指定yaml文件

$  helm install --name my-release stable/prometheus-operator  -f values1.yaml,values2.yaml

四、配置监控k8s组件

  4.1配置监控kubelet(默认没监控上,因为名字为kubelet的servicemonitor 使用了http方式访问endpoint的10255,我在rancher搭建的k8s上是使用https的10250端口),默认配置如下:

  

  参考官方文档https://coreos.com/operators/prometheus/docs/latest/user-guides/cluster-monitoring.html,修改servicemonitor,如下

  1. apiVersion: monitoring.coreos.com/v1
  2. kind: ServiceMonitor
  3. metadata:
  4. name: kubelet
  5. labels:
  6. k8s-app: kubelet
  7. spec:
  8. jobLabel: k8s-app
  9. endpoints: #这里默认使用http方式,而且没有使用tls,修改为如下红色配置
  10. - port: https-metrics
  11. scheme: https
  12. interval: 30s
  13. tlsConfig:
  14. insecureSkipVerify: true
  15. bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
  16. - port: https-metrics
  17. scheme: https
  18. path: /metrics/cadvisor
  19. interval: 30s
  20. honorLabels: true
  21. tlsConfig:
  22. insecureSkipVerify: true
  23. bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
  24. selector:
  25. matchLabels:
  26. k8s-app: kubelet
  27. namespaceSelector:
  28. matchNames:
  29. - kube-system

     执行修改kubectl apply -f 上面的文件.yaml

   4.2配置监控kube-controller-manager

     由于我这里部署的kube-controller-manager不是pod形式启动的,而是直接容器启动,导致Service selector无法选择对应的pod,因此查看Endpoints的配置是没有subset.ip的,最后导致prometheus的target不能抓取到数据,因此我修改endpoints文件(添加红色字段的内容,ip改为master运行的主机ip),同时取消Service的selector如下:

    

    kubectl apply  -f   上面的文件.yaml

    kubectl edit svc  my-release-prometheus-oper-kube-scheduler 画面如下,把红色的selector删除,:wq保存

    

  4.3同理配置kube-scheduler,端口改为10252,省略。

   4.4配置etcd

   Service配置:

     

    ServiceMonitor配置:

      

   4.5jobLabel的作用:

    我配置Service的jobLabel为kube-schedulerservi

      

    target显示(刷新页面等待一些时间,才会看到结果)如下:

        

五、granafa添加新数据源(默认有一个数据源,为了区分应用和默认的监控,这里再添加一个应用的)

  5.1定义资源Prometheus

  1. apiVersion: monitoring.coreos.com/v1
  2. kind: Prometheus
  3. metadata:
  4. labels:
  5. app: prometheus
  6. prometheus: service-prometheus
  7. name: service-prometheus
  8. namespace: monitoring
  9. spec:
  10. ....

  5.2 查看grafana-datasource configmap默认配置

  1. kubectl get configmap my-release-prometheus-oper-grafana-datasource -o yaml
    apiVersion: v1
    data:
      datasource.yaml: |-
        apiVersion: 1
        datasources:
        - name: service-prometheus
          type: prometheus
          url: http://service-ip:9090/ #这个没测试过,有空再研究
          access: proxy
          isDefault: true
    kind: ConfigMa

  5.3修改grafana-datasource configmap

六、监控mysql

  要修改的默认值如下,values.yaml

  1. mysqlRootPassword: testing
  2. mysqlUser: mysqlu
  3. mysqlPassword: mysql123
  4. mysqlDatabase: mydb
  5.  
  6. metrics:
  7. enabled: true
  8. image: prom/mysqld-exporter
  9. imageTag: v0.10.0
  10. imagePullPolicy: IfNotPresent
  11. resources: {}
  12. annotations: {}
  13. # prometheus.io/scrape: "true"
  14. # prometheus.io/port: ""
  15. livenessProbe:
  16. initialDelaySeconds:
  17. timeoutSeconds:
  18. readinessProbe:
  19. initialDelaySeconds:
  20. timeoutSeconds:

 6.1安装mysql

  helm install --name my-release2 -f values.yaml stable/mysql    

   6.2创建pv

  1. apiVersion: v1
  2. kind: PersistentVolume
  3. metadata:
  4. name: my-release2-mysql
  5. spec:
  6. capacity:
  7. storage: 8Gi
  8. accessModes:
  9. - ReadWriteOnce
  10. persistentVolumeReclaimPolicy: Recycle
  11. hostPath:
  12. path: /data

  6.3创建mysql对应ServiceMonitor

  1. apiVersion: monitoring.coreos.com/v1
  2. kind: ServiceMonitor
  3. metadata:
  4. labels:
  5. app: my-release2-mysql
  6. heritage: Tiller
  7. release: my-release
  8. name: my-release2-mysql
  9. namespace: default
  10. spec:
  11. endpoints:
  12. - interval: 15s
  13. port: metrics
  14. jobLabel: jobLabel
  15. namespaceSelector:
  16. matchNames:
  17. - default
  18. selector:
  19. matchLabels:
  20. app: my-release2-mysql
  21. release: my-release2

  6.4granafa配置

  https://grafana.com/dashboards/6239 ,这里下载json模版

  然后导入granafa,datasource选择默认的就可以了。

七、alertmanager配置(默认不用配置)

  7.1那prometheus资源如何识别alertmanager呢?那是通过prometheus的字段alerting实现匹配alertmanager  service,如下:

  prometheus实例

  1. apiVersion: monitoring.coreos.com/v1
  2. kind: Prometheus
  3. metadata:
  4. labels:
  5. app: prometheus-operator-prometheus
  6. name: my-release-prometheus-oper-prometheus
  7. namespace: default
  8. spec:
  9. alerting:
  10. alertmanagers:
  11. - name: my-release-prometheus-oper-alertmanager #匹配名为my-release-prometheus-alertmanager 的service
  12. namespace: default
  13. pathPrefix: /
  14. port: web
  15. ruleSelector: #选择label为如下的PrometheusRule
  16.    matchLabels:
  17. app: promethetus-operator
  18. release: my-release

   alertmanager实例

  1. apiVersion: monitoring.coreos.com/v1
  2. kind: Alertmanager
  3. metadata:
  4. labels:
  5. app: prometheus-operator-alertmanager
  6. chart: prometheus-operator-0.1.
  7. heritage: Tiller
  8. release: my-release
  9. name: my-release-prometheus-oper-alertmanager #secretname用到这里的name
  10. namespace: default
  11. spec:
  12. baseImage: quay.io/prometheus/alertmanager
  13. externalUrl: http://my-release-prometheus-oper-alertmanager.default:9093
  14. listenLocal: false
  15. logLevel: info
  16. paused: false
  17. replicas:
  18. retention: 120h
  19. routePrefix: /
  20. serviceAccountName: my-release-prometheus-oper-alertmanager
  21. version: v0.15.2

  7.2 alertmanager实例如何重新读取alertmanager的配置文件配置呢???是通过prometheus-operator/deployment.yaml里面的- --config-reloader-image=quay.io/coreos/configmap-reload:v0.0.1实现

  secret22.yaml 

  1. apiVersion: v1
  2. data:
  3. alertmanager.yaml: Z2xvYmFsOgogIHJlc29sdmVfdGltZW91dDogNW0KcmVjZWl2ZXJzOgotIG5hbWU6ICJudWxsIgpyb3V0ZToKICBncm91cF9ieToKICAtIGpvYgogIGdyb3VwX2ludGVydmFsOiA1bQogIGdyb3VwX3dhaXQ6IDMwcwogIHJlY2VpdmVyOiAibnVsbCIKICByZXBlYXRfaW50ZXJ2YWw6IDEyaAogIHJvdXRlczoKICAtIG1hdGNoOgogICAgICBhbGVydG5hbWU6IERlYWRNYW5zU3dpdGNoCiAgICByZWNlaXZlcjogIm51bGwiCg==
  4. kind: Secret #这些加密内容是alertmanager的配置参数,在linux可以通过 echo "上面data序列"|base64 -d 解密
  5. metadata:
  6. labels:
  7. app: prometheus-operator-alertmanager
  8. chart: prometheus-operator-0.1.
  9. heritage: Tiller
  10. release: my-release
  11. name: alertmanager-my-release-prometheus-oper-alertmanager #必须为alertmanager-名字
  12. namespace: default
  13. type: Opaque

  详情:https://github.com/helm/charts/blob/master/stable/prometheus-operator/templates/prometheus-operator/deployment.yaml

  1. apiVersion: apps/v1beta2
  2. kind: Deployment
  3. metadata:
  4. name: my-release-prometheus-oper-operator
  5. namespace: default
  6. template:
  7. spec:
  8. containers:
  9. - args:
  10. - --kubelet-service=kube-system/my-release-prometheus-oper-kubelet
  11. - --localhost=127.0.0.1
  12. - --prometheus-config-reloader=quay.io/coreos/prometheus-config-reloader:v0.25.0
  13. - --config-reloader-image=quay.io/coreos/configmap-reload:v0.0.1 #通过这个容器重新加载alertmanager的配置,具体实现官网没写
  14. image: quay.io/coreos/prometheus-operator:v0.25.0

  PrometheusRule实现规则读取

  all.rules.yaml      参考:https://github.com/helm/charts/blob/master/stable/prometheus-operator/templates/alertmanager/rules/all.rules.yaml

  1. apiVersion: monitoring.coreos.com/v1
  2. kind: PrometheusRule
  3. metadata:
  4. name: prometheus-operator
  5. labels:
  6. app: prometheus-operator #Prometheus资源的ruleSelector会选择这个标签

 

  7.3 重点:重新加载alertmanager配置的操作,如下:

         7.3.1:定义alertmanager.yaml文件   

  1. global:
  2. resolve_timeout: 5m
  3. route:
  4. group_by: ['job']
  5. group_wait: 30s
  6. group_interval: 5m
  7. repeat_interval: 12h
  8. receiver: 'webhook'
  9. receivers:
  10. - name: 'webhook'
  11. webhook_configs:
  12. - url: 'http://alertmanagerwh:30500/'
    ps:不能用tab作为空格,否则会报错

     7.3.2:先删除再创建名为alertmanager-{ALERTMANAGER_NAME}的secret其中{ALERTMANAGER_NAME}对应alertmanager实例名称,按照上面例子就是my-release-prometheus-oper-alertmanager)    

  1. kubectl delete secret alertmanager-my-release-prometheus-oper-alertmanager
    kubectl create secret generic alertmanager-my-release-prometheus-oper-alertmanager --from-file=alertmanager.yaml

7.3.3 :查看是否生效

      等几秒钟中,在alertmanager的ui界面status就可以看看是否生效了。其他配置请查看https://prometheus.io/docs/alerting/configuration/

    微信告警方法   https://www.cnblogs.com/jiuchongxiao/p/9024211.html

最后、如何卸载prometheus-operator(重新安装,可以参考这个)

    1、直接通过helm delete删除

 $ helm delete my-release

 2、删除相关crd (helm install的时候自动安装了crd资源)

kubectl delete crd prometheuses.monitoring.coreos.com
kubectl delete crd prometheusrules.monitoring.coreos.com
kubectl delete crd servicemonitors.monitoring.coreos.com
kubectl delete crd alertmanagers.monitoring.coreos.com

3、删除helm 上的my-release

  helm del --purge my-release

其他

  

  

  

prometheus-operator 详细总结(helm一键安装)的更多相关文章

  1. helm一键 安装mariadb-ha(详细)

    一. 二.单机安装一主一从 先创建对应pv https://github.com/helm/charts/blob/master/stable/mariadb/templates/master-sta ...

  2. Harbor 使用 Helm 一键安装

    安装 Harbor Harbor 支持多种安装方式,源码目录下面默认有一个安装脚本(make/install.sh),采用 docker-compose 的形式运行 Harbor 各个组件,和前面的课 ...

  3. Kubernetes 监控方案之 Prometheus Operator(十九)

    目录 一.Prometheus 介绍 1.1.Prometheus 架构 1.2.Prometheus Operator 架构 二.Helm 安装部署 2.1.Helm 客户端安装 2.2.Tille ...

  4. prometheus operator(Kubernetes 集群监控)

    一.Prometheus Operator 介绍 Prometheus Operator 是 CoreOS 开发的基于 Prometheus 的 Kubernetes 监控方案,也可能是目前功能最全面 ...

  5. helm 安装prometheus operator 并监控ingress

    1.helm安装 curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > get_helm.shchmod 7 ...

  6. k8s Helm安装Prometheus Operator

    Ubuntu 18 Kubernetes集群的安装和部署 以及Helm的安装完成了k8s的集群和helm的安装,今天我们来看看Prometheus的监控怎么搞.Prometheus Operator ...

  7. Prometheus Operator 的安装

    Prometheus Operator 的安装 接下来我们用自定义的方式来对 Kubernetes 集群进行监控,但是还是有一些缺陷,比如 Prometheus.AlertManager 这些组件服务 ...

  8. 第一届云原生应用大赛火热报名中! helm install “一键安装”应用触手可及!

    云原生应用,是指符合“云原生”理念的应用开发与交付模式,这是当前在云时代最受欢迎的应用开发最佳实践. 在现今的云原生生态当中,已经有很多成熟的开源软件被制作成了 Helm Charts,使得用户可以非 ...

  9. Kubernetes 监控:Prometheus Operator

    安装 前面的章节中我们学习了用自定义的方式来对 Kubernetes 集群进行监控,基本上也能够完成监控报警的需求了.但实际上对上 Kubernetes 来说,还有更简单方式来监控报警,那就是 Pro ...

随机推荐

  1. YEP_footstepsounds

    脚步声插件 ============================================================================Introduction====== ...

  2. lotus domino 软件学习网站(自己收藏的)

    lotus domino 软件学习网站(自己收藏的) 我学习lotus domino时间也不是很长,相比较学习lotus,学习java的时间还是比较长的,刚开始看网上的说法都是不看好lotus的, 但 ...

  3. FileFilter过滤器

    FileFilter过滤器原理: File对象的listFiles()方法做了三件事情: 第一件,遍历得到所有的文件/文件夹: 第二件,调用入参过滤器接口自己DIY的实现类中重写的accept()方法 ...

  4. dbf,Idx 文件格式

    NDbfReaderEx about_indexes ntx file format

  5. 软件综合实践Axure介绍

    首先就是下载安装Axure这款软件了,在百度上搜索“”Axure rp下载“”即可,下载完成后,打开exe安装,根据步骤一步步点击下一步即可完成安装. 运行该软件时会出现类似于填写激活码的东西,这时依 ...

  6. 关于linux系统CPU篇--->不容易发现的占用CPU较高进程

    1.系统的CPU使用率,不仅包括进程用户态和内核态的运行,还包括中断处理,等待IO以及内核线程等等.所以,当你发现系统的CPU使用率很高的时候,不一定能找到相对应的高CPU使用率的进程 2.案例分析, ...

  7. 用iPhone查看pc电脑上写的html(Mac电脑Charles)简单版

    对于客户端同学开发来说,写一段代码想在真机上看看,是非常容易的. 那么在这么一个大前端的环境下,客户端开发想写点html和js代码,又想在手机上看看效果,怎么办呢? 需要以下几个步骤: 大体流程:1. ...

  8. Liunx中三种网络模式配置及Xshell连接

    Liunx网络配置 NAT模式下的网络配置: 首先打开网络配置文件:vi   /etc/sysconfig/network-scripts/ifcfg-ens33 修改网卡信息,配置动态Ip过程中,只 ...

  9. jdbc之工具类DBUtil的使用

    首先回顾一下jdbc的使用方法: 1. 注册驱动 2. 建立连接 3. 建立statement 4. 定义sql语句 5. 执行sql语句,如果执行的是查询需遍历结果集 6. 关闭连接 其中建立连接和 ...

  10. tcp的三次握手,四次挥手

    为了更好的记住知识点,所以将最近学习的知识点记录下来: 最开始A和B都处于closed(关闭连接状态) 1.tcp的第一次握手:客户端A  向服务器端B 发送请求连接报文段(包含SYN=1,初始序号s ...