一、介绍prometheus-operator
二、查看配置rbac授权
三、helm安装prometheus-operator
四、配置监控k8s组件
五、granafa添加新数据源
六、监控mysql
七、alertmanager配置
最后、卸载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

apiVersion: monitoring.coreos.com/v1
kind: Alertmanager
metadata:
generation:
labels:
app: prometheus-operator-alertmanager
chart: prometheus-operator-0.1.
heritage: Tiller
release: my-release
name: my-release-prometheus-oper-alertmanager
namespace: default
spec:
baseImage: quay.io/prometheus/alertmanager
externalUrl: http://my-release-prometheus-oper-alertmanager.default:9093
listenLocal: false
logLevel: info
paused: false
replicas:
retention: 120h
routePrefix: /
serviceAccountName: my-release-prometheus-oper-alertmanager
version: v0.15.2

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

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

  2.1 为prometheus sa赋予相关权限

apiVersion: v1
kind: ServiceAccount
metadata:
name: prometheus apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: prometheus
rules:
- apiGroups: [""]
resources:
- nodes
- services
- endpoints
- pods
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources:
- configmaps
verbs: ["get"]
- nonResourceURLs: ["/metrics"]
verbs: ["get"] apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: prometheus
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: prometheus
subjects:
- kind: ServiceAccount
name: prometheus
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,如下

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: kubelet
labels:
k8s-app: kubelet
spec:
jobLabel: k8s-app
endpoints: #这里默认使用http方式,而且没有使用tls,修改为如下红色配置
- port: https-metrics
scheme: https
interval: 30s
tlsConfig:
insecureSkipVerify: true
bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token

- port: https-metrics
scheme: https
path: /metrics/cadvisor
interval: 30s
honorLabels: true
tlsConfig:
insecureSkipVerify: true
bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token

selector:
matchLabels:
k8s-app: kubelet
namespaceSelector:
matchNames:
- 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

apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
labels:
app: prometheus
prometheus: service-prometheus
name: service-prometheus
namespace: monitoring
spec:
....

  5.2 查看grafana-datasource configmap默认配置

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

mysqlRootPassword: testing
mysqlUser: mysqlu
mysqlPassword: mysql123
mysqlDatabase: mydb metrics:
enabled: true
image: prom/mysqld-exporter
imageTag: v0.10.0
imagePullPolicy: IfNotPresent
resources: {}
annotations: {}
# prometheus.io/scrape: "true"
# prometheus.io/port: ""
livenessProbe:
initialDelaySeconds:
timeoutSeconds:
readinessProbe:
initialDelaySeconds:
timeoutSeconds:

 6.1安装mysql

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

   6.2创建pv

apiVersion: v1
kind: PersistentVolume
metadata:
name: my-release2-mysql
spec:
capacity:
storage: 8Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
hostPath:
path: /data

  6.3创建mysql对应ServiceMonitor

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
labels:
app: my-release2-mysql
heritage: Tiller
release: my-release
name: my-release2-mysql
namespace: default
spec:
endpoints:
- interval: 15s
port: metrics
jobLabel: jobLabel
namespaceSelector:
matchNames:
- default
selector:
matchLabels:
app: my-release2-mysql
release: my-release2

  6.4granafa配置

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

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

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

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

  prometheus实例

apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
labels:
app: prometheus-operator-prometheus
name: my-release-prometheus-oper-prometheus
namespace: default
spec:
alerting:
alertmanagers:
- name: my-release-prometheus-oper-alertmanager #匹配名为my-release-prometheus-alertmanager 的service
namespace: default
pathPrefix: /
port: web
ruleSelector: #选择label为如下的PrometheusRule
   matchLabels:
app: promethetus-operator
release: my-release

   alertmanager实例

apiVersion: monitoring.coreos.com/v1
kind: Alertmanager
metadata:
labels:
app: prometheus-operator-alertmanager
chart: prometheus-operator-0.1.
heritage: Tiller
release: my-release
name: my-release-prometheus-oper-alertmanager #secretname用到这里的name
namespace: default
spec:
baseImage: quay.io/prometheus/alertmanager
externalUrl: http://my-release-prometheus-oper-alertmanager.default:9093
listenLocal: false
logLevel: info
paused: false
replicas:
retention: 120h
routePrefix: /
serviceAccountName: my-release-prometheus-oper-alertmanager
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 

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

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

apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: my-release-prometheus-oper-operator
namespace: default
template:
spec:
containers:
- args:
- --kubelet-service=kube-system/my-release-prometheus-oper-kubelet
- --localhost=127.0.0.1
- --prometheus-config-reloader=quay.io/coreos/prometheus-config-reloader:v0.25.0
- --config-reloader-image=quay.io/coreos/configmap-reload:v0.0.1 #通过这个容器重新加载alertmanager的配置,具体实现官网没写
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

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

 

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

         7.3.1:定义alertmanager.yaml文件   

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

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

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. it入门之:学会使用Git 分布式版本控制工具

    环境:window 工具:git & TortoiseGit 下载安装以及配置环境变量 :略略略 创建Github账户:登录https://github.com/用自己的常用邮箱创建账户,用来 ...

  2. NGUI之使用UISprite画线

    代码如下: static void DrawLine(UISprite spriteLine, Vector3 start, Vector3 end) { Vector3 center = (star ...

  3. 【kafka学习之六】kakfa消息生产、消费示例

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 kafka_2.11-0.11.0.0 zookeepe ...

  4. layer —— 一个简单的jQuery弹出层插件

    layer的使用 4.24更新:注意:layer现在有旧版1.8.5版本和新版本3.0版本的,对应引入的JQ也要不同,相对应的JQ引入1.1和3.1,否则JQ会出问题 4.21更新: 解答4-19的问 ...

  5. go语言入门教程:基本语法之数据类型

    出处:千锋教育go语言教研部 作者:茹姐 一.基本数据类型 以下是go中可用的基本数据类型 1.1 布尔型bool 布尔型的值只可以是常量 true 或者 false.一个简单的例子:var b bo ...

  6. 2019MABU3月班——SAP导入总账科目小笔记

    1. 在目录中找到“集中” 2.总账科目这里输入代码,公司代码为3000 3. 点“创建” 4. 然后可以填下面这些了 5. 转到“创建/银行/利息” 6. 选字段状态组 7. 保存 8.大功告成.

  7. Html5 Page Creator,简易h5页面场景制作

  8. ORA-28002密码失效问题解决

    问题:提示ORA-28002解决: 第1种方法:数据库级别,需要重启查看过期时间: sql>SELECT * FROM dba_profiles WHERE profile='DEFAULT' ...

  9. python文件读书笔记

    一.打开文件 1 f=open('text.txt',r)  二.读取文件 print(f.read) 三.关闭文件 f.close() 比较好用的是运用with with open('text.tx ...

  10. Linux 系统调用(system call)

    1 系统调用:(SYSTEM CALL) 操作系统(operating system)内核中有一组实现系统功能的过程,系统调用就是对上述过程的调用.程序员利用系统调用,向OS提出服务请求,由OS代为完 ...