prometheus-operator 详细总结(helm一键安装)
- 一、介绍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一键安装)的更多相关文章
- helm一键 安装mariadb-ha(详细)
一. 二.单机安装一主一从 先创建对应pv https://github.com/helm/charts/blob/master/stable/mariadb/templates/master-sta ...
- Harbor 使用 Helm 一键安装
安装 Harbor Harbor 支持多种安装方式,源码目录下面默认有一个安装脚本(make/install.sh),采用 docker-compose 的形式运行 Harbor 各个组件,和前面的课 ...
- Kubernetes 监控方案之 Prometheus Operator(十九)
目录 一.Prometheus 介绍 1.1.Prometheus 架构 1.2.Prometheus Operator 架构 二.Helm 安装部署 2.1.Helm 客户端安装 2.2.Tille ...
- prometheus operator(Kubernetes 集群监控)
一.Prometheus Operator 介绍 Prometheus Operator 是 CoreOS 开发的基于 Prometheus 的 Kubernetes 监控方案,也可能是目前功能最全面 ...
- helm 安装prometheus operator 并监控ingress
1.helm安装 curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > get_helm.shchmod 7 ...
- k8s Helm安装Prometheus Operator
Ubuntu 18 Kubernetes集群的安装和部署 以及Helm的安装完成了k8s的集群和helm的安装,今天我们来看看Prometheus的监控怎么搞.Prometheus Operator ...
- Prometheus Operator 的安装
Prometheus Operator 的安装 接下来我们用自定义的方式来对 Kubernetes 集群进行监控,但是还是有一些缺陷,比如 Prometheus.AlertManager 这些组件服务 ...
- 第一届云原生应用大赛火热报名中! helm install “一键安装”应用触手可及!
云原生应用,是指符合“云原生”理念的应用开发与交付模式,这是当前在云时代最受欢迎的应用开发最佳实践. 在现今的云原生生态当中,已经有很多成熟的开源软件被制作成了 Helm Charts,使得用户可以非 ...
- Kubernetes 监控:Prometheus Operator
安装 前面的章节中我们学习了用自定义的方式来对 Kubernetes 集群进行监控,基本上也能够完成监控报警的需求了.但实际上对上 Kubernetes 来说,还有更简单方式来监控报警,那就是 Pro ...
随机推荐
- YEP_footstepsounds
脚步声插件 ============================================================================Introduction====== ...
- lotus domino 软件学习网站(自己收藏的)
lotus domino 软件学习网站(自己收藏的) 我学习lotus domino时间也不是很长,相比较学习lotus,学习java的时间还是比较长的,刚开始看网上的说法都是不看好lotus的, 但 ...
- FileFilter过滤器
FileFilter过滤器原理: File对象的listFiles()方法做了三件事情: 第一件,遍历得到所有的文件/文件夹: 第二件,调用入参过滤器接口自己DIY的实现类中重写的accept()方法 ...
- dbf,Idx 文件格式
NDbfReaderEx about_indexes ntx file format
- 软件综合实践Axure介绍
首先就是下载安装Axure这款软件了,在百度上搜索“”Axure rp下载“”即可,下载完成后,打开exe安装,根据步骤一步步点击下一步即可完成安装. 运行该软件时会出现类似于填写激活码的东西,这时依 ...
- 关于linux系统CPU篇--->不容易发现的占用CPU较高进程
1.系统的CPU使用率,不仅包括进程用户态和内核态的运行,还包括中断处理,等待IO以及内核线程等等.所以,当你发现系统的CPU使用率很高的时候,不一定能找到相对应的高CPU使用率的进程 2.案例分析, ...
- 用iPhone查看pc电脑上写的html(Mac电脑Charles)简单版
对于客户端同学开发来说,写一段代码想在真机上看看,是非常容易的. 那么在这么一个大前端的环境下,客户端开发想写点html和js代码,又想在手机上看看效果,怎么办呢? 需要以下几个步骤: 大体流程:1. ...
- Liunx中三种网络模式配置及Xshell连接
Liunx网络配置 NAT模式下的网络配置: 首先打开网络配置文件:vi /etc/sysconfig/network-scripts/ifcfg-ens33 修改网卡信息,配置动态Ip过程中,只 ...
- jdbc之工具类DBUtil的使用
首先回顾一下jdbc的使用方法: 1. 注册驱动 2. 建立连接 3. 建立statement 4. 定义sql语句 5. 执行sql语句,如果执行的是查询需遍历结果集 6. 关闭连接 其中建立连接和 ...
- tcp的三次握手,四次挥手
为了更好的记住知识点,所以将最近学习的知识点记录下来: 最开始A和B都处于closed(关闭连接状态) 1.tcp的第一次握手:客户端A 向服务器端B 发送请求连接报文段(包含SYN=1,初始序号s ...