Kube-Prometheus 部署
一、概述
kube-prometheus 是一整套监控解决方案,它使用 Prometheus 采集集群指标,Grafana 做展示,包含如下组件:
- The Prometheus Operator
- Highly available Prometheus
- Highly available Alertmanager
- Prometheus node-exporter
- Prometheus Adapter for Kubernetes Metrics APIs (k8s-prometheus-adapter)
- kube-state-metrics
- Grafana
二、部署 Kube-Prometheus
1、下载 Kube-Prometheus 代码
方法一
:
git clone https://github.com/prometheus-operator/kube-prometheus.git
cd kube-prometheus
git branch -r # 查看当前分支有哪些
git checkout release-0.9 # 切换到自己 Kubernetes 兼容的版本
方法二
:
git clone -b release-0.9 https://github.com/prometheus-operator/kube-prometheus.git
注:在
release-0.11
版本之后新增了NetworkPolicy
默认是允许自己访问,如果了解NetworkPolicy
可以修改一下默认的规则,可以用查看ls *networkPolicy*
,如果不修改的话则会影响到修改NodePort
类型也无法访问
如果不会Networkpolicy可以直接删除就行
2、修改 Kube-Prometheus 镜像源
国外镜像源某些镜像无法拉取,我们这里修改prometheus-operator,prometheus,alertmanager,kube-state-metrics,node-exporter,prometheus-adapter的镜像源为国内镜像源。我这里使用的是中科大的镜像源。
cd ./kube-prometheus/manifests/
sed -i 's/quay.io/quay.mirrors.ustc.edu.cn/g' setup/prometheus-operator-deployment.yaml
sed -i 's/quay.io/quay.mirrors.ustc.edu.cn/g' prometheus-prometheus.yaml
sed -i 's/quay.io/quay.mirrors.ustc.edu.cn/g' alertmanager-alertmanager.yaml
sed -i 's/quay.io/quay.mirrors.ustc.edu.cn/g' kube-state-metrics-deployment.yaml
sed -i 's/k8s.gcr.io/lank8s.cn/g' kube-state-metrics-deployment.yaml
sed -i 's/quay.io/quay.mirrors.ustc.edu.cn/g' node-exporter-daemonset.yaml
sed -i 's/quay.io/quay.mirrors.ustc.edu.cn/g' prometheus-adapter-deployment.yaml
sed -i 's/k8s.gcr.io/lank8s.cn/g' prometheus-adapter-deployment.yaml
grep "image: " * -r # 确认一下是否还有国外镜像
3、修改类型为 NodePort
为了可以从外部访问prometheus,alertmanager,grafana,我们这里修改promethes,alertmanager,grafana的service类型为NodePort类型。
- 修改prometheus的service
cat prometheus-service.yaml
apiVersion: v1
kind: Service
metadata:labels:app.kubernetes.io/component: prometheusapp.kubernetes.io/name: prometheusapp.kubernetes.io/part-of: kube-prometheusapp.kubernetes.io/version: 2.29.1prometheus: k8sname: prometheus-k8snamespace: monitoring
spec:type: NodePort # 新增ports:- name: webport: 9090nodePort: 30090 # 新增targetPort: webselector:app: prometheusapp.kubernetes.io/component: prometheusapp.kubernetes.io/name: prometheusapp.kubernetes.io/part-of: kube-prometheusprometheus: k8ssessionAffinity: ClientIP
- 修改alertmanager的service
apiVersion: v1
kind: Service
metadata:labels:alertmanager: mainapp.kubernetes.io/component: alert-routerapp.kubernetes.io/name: alertmanagerapp.kubernetes.io/part-of: kube-prometheusapp.kubernetes.io/version: 0.22.2name: alertmanager-mainnamespace: monitoring
spec:type: NodePort # 新增ports:- name: webport: 9093nodePort: 30093 # 新增targetPort: webselector:alertmanager: mainapp: alertmanagerapp.kubernetes.io/component: alert-routerapp.kubernetes.io/name: alertmanagerapp.kubernetes.io/part-of: kube-prometheussessionAffinity: ClientIP
- 修改grafana的service
cat grafana-service.yaml
apiVersion: v1
kind: Service
metadata:labels:app.kubernetes.io/component: grafanaapp.kubernetes.io/name: grafanaapp.kubernetes.io/part-of: kube-prometheusapp.kubernetes.io/version: 8.1.1name: grafananamespace: monitoring
spec:type: NodePort # 新增ports:- name: httpport: 3000nodePort: 32000 # 新增targetPort: httpselector:app.kubernetes.io/component: grafanaapp.kubernetes.io/name: grafanaapp.kubernetes.io/part-of: kube-prometheus
4、修改Prometheus保留时间
vim prometheus-prometheus.yaml
新增: spec.retention: 15d
5、安装 kube-Prometheus 并确认状态
kubectl apply -f setup/
# 下载prometheus-operator镜像需要花费几分钟,这里等待几分钟,直到prometheus-operator变成running状态
kubectl apply -f .
watch kubectl get po -n monitoring # 等待所有镜像变成Running状态
6、通过Ingres访问Prometheus
cat > prometheus-ingress.yaml << 'EOF'
apiVersion: extensions/v1beta1
kind: Ingress
metadata:namespace: monitoringname: prometheus-ingress
spec:ingressClassName: nginxrules:- host: grafana.xxx.net # 访问 Grafana 域名http:paths:- path: /backend:serviceName: grafanaservicePort: 3000- host: prometheus.xxx.net # 访问 Prometheus 域名http:paths:- path: /backend:serviceName: prometheus-k8s servicePort: 9090- host: alertmanager.xxx.net # 访问 alertmanager 域名http:paths:- path: /backend:serviceName: alertmanager-mainservicePort: 9093
EOF
三、访问
访问 Prometheus:
浏览器打开: http://prometheus.xxx.net
确保state
的状态都是UP
访问 Alertmanager:
浏览器打开:alertmanager.xxx.net
访问 Grafana:
浏览器打开:grafana.xxx.net
首次登录,用户名和密码,都是admin , 登录之后,会提示修改密码,可以选择跳过skip
报警详细配置可参考这里
四、Alertmanager 邮件报警
cat > alertmanager-secret.yaml <<'EOF'
apiVersion: v1
data: {}
kind: Secret
metadata:name: alertmanager-mainnamespace: monitoring
stringData:alertmanager.yaml: |-global:resolve_timeout: 5msmtp_smarthost: 'smtp.qq.com:465'smtp_from: 'xxx@qq.com' # 发件人邮箱smtp_auth_username: 'xxx@qq.com' # 发件人邮箱smtp_auth_password: 'lkjtrbnmqfesbdhj' # QQ授权码smtp_hello: 'qq.com'smtp_require_tls: falseroute:group_by: ['alertname']group_interval: 5mgroup_wait: 30sreceiver: default-receiverrepeat_interval: 12hroutes:- receiver: 'lms-saas'match_re:namespace: ^(lms-saas|lms-standard).*$ # 根据namespace进行区分报警receivers:- name: 'default-receiver'email_configs:- to: 'xxx@chinaedu.net' # 收件人邮箱,设置多个收件人send_resolved: true- to: 'xxx@chinaedu.net'send_resolved: true- name: 'lms-saas' # 跟上面定义的名字必须一样email_configs:- to: 'xxx@chinaedu.net' # 收件人邮箱,也可以设置多个send_resolved: true- to: 'xxx@chinaedu.net'send_resolved: true
type: Opaque
EOF
kubectl delete -f alertmanager-secret.yaml
kubectl apply -f alertmanager-secret.yaml
验证一下邮件报警是否生效
验证一下是否可以收到报警邮件
五、Alertmanager 钉钉报警
1、注册钉钉账号->新建报警群->机器人管理
2、自定义(通过webhook接入自定义服务)
- 复制生成的
Webhook
3、编写钉钉yaml
cat > dingtalk-webhook.yaml <<'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:labels:run: dingtalkname: webhook-dingtalknamespace: monitoring
spec:replicas: 1selector:matchLabels:run: dingtalktemplate:metadata:labels:run: dingtalkspec:containers:- name: dingtalkimage: timonwong/prometheus-webhook-dingtalk:v1.4.0imagePullPolicy: IfNotPresent# 设置钉钉群聊自定义机器人后,使用实际 access_token 替换下面 xxxxxx部分args:- --ding.profile=webhook1=https://oapi.dingtalk.com/robot/send?access_token=你的tokenports:- containerPort: 8060protocol: TCP
---
apiVersion: v1
kind: Service
metadata:labels:run: dingtalkname: webhook-dingtalknamespace: monitoring
spec:ports:- port: 8060protocol: TCPtargetPort: 8060selector:run: dingtalksessionAffinity: None
EOFkubectl apply -f dingtalk-webhook.yaml # 应用配置后,对应的pod和service就起来了,我们可以看到侦听的端口为8060.
4、alertmanager配置告警通知
cat > alertmanager-secret.yaml <<'EOF'
apiVersion: v1
data: {}
kind: Secret
metadata:name: alertmanager-mainnamespace: monitoring
stringData:alertmanager.yaml: |-global:resolve_timeout: 5mroute:group_by: ['alertname']group_interval: 5mgroup_wait: 30sreceiver: "webhook"repeat_interval: 12hreceivers:#配置钉钉告警的webhook- name: 'webhook'webhook_configs:- url: 'http://webhook-dingtalk.monitoring.svc.cluster.local:8060/dingtalk/webhook1/send'send_resolved: true
type: Opaque
EOF
5、验证一下钉钉报警是否生效
6、验证一下钉钉可以收到报警
kubectl run busybox --image=busybox # 启动一个错误的容器
六、扩展知识
修正kube-prometheus中grafana组件自带dashboard的默认时区
kube-prometheus监控 controller-manager && scheduler 组件
Kube-Prometheus 部署相关推荐
- k8s部署Kube Prometheus(Prometheus Operator)
摘要 本文通过Prometheus-operator框架一键化安装prometheus.alertmanage.granfana,并配置企业微信api以及告警推送,搭建 prometheus 的前提环 ...
- Prometheus部署
Prometheus是最初在SoundCloud上构建的开源系统监视和警报工具包.自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发人员和用户社区.Promet ...
- Prometheus 部署告警对接 QQ 邮箱
目录 引言 一.定义 1. 告警功能概述 2. 通知告警信息 3. Prometheus 监控系统的告警逻辑 3.1 告警功能 3.2 静默.抑制.分组等功能 二.部署告警对接邮箱 1. 下载安装包 ...
- 二十七、prometheus部署安装配置告警
1.部署前简介 本次监控部署应用到的相关软件如下 prometheus 数据采集和存储 提供PromQL语法查询 alertmanager 警告管理 进行报警 node_exporter 收集主机的基 ...
- Prometheus部署监控容器
Prometheus架构描述 Prometheus 是一个非常优秀的监控工具.准确的说,应该是监控方案.Prometheus 提供了监控数据搜集.存储.处理.可视化和告警一套完整的解决方案 Prome ...
- 集群外独立部署Prometheus+Grafana监控K8S全面解析
简介 Prometheus+Grafana作为监控K8S的解决方案,大都是在K8S集群内部部署,这样可以直接调用集群内的cert及各种监控url,但是增加了集群的资源开销.因此在资源有限的情况下,我更 ...
- 在 k8s 中部署 Prometheus 和 Grafana
部署 Prometheus 和 Grafana 到 k8s Intro 上次我们主要分享了 asp.net core 集成 prometheus,以及简单的 prometheus 使用,在实际在 k8 ...
- caas k8s主控节点如何查询_k8s中部署prometheus监控告警系统prometheus系列文章第一篇...
前言 本篇文章主要介绍k8s集群中部署prometheus,并且配置prometheus的动态.静态服务发现,实现监控容器.物理节点.service.pod等资源指标,配置prometheus的web ...
- k8s中部署prometheus监控告警系统-prometheus系列文章第一篇
前言 本篇文章主要介绍k8s集群中部署prometheus,并且配置prometheus的动态.静态服务发现,实现监控容器.物理节点.service.pod等资源指标,配置prometheus的web ...
- 监控 prometheus及其部署及server discovery,alertmanager,grafana(更新结束)
prometheus 一.常用监控简介 1.cacti 2.Nagios 3.Zabbix zabbix核心组件介绍 4.Prometheus 二.运维监控平台设计思路 三.prometheus监控体 ...
最新文章
- linux挂载设备类型lvm,linux——管理系统设备之LVM的管理
- rabbitMQ简单使用
- ilpimage to bitmap
- 专车降价滴滴快车使命终结?
- 推荐一款Java开发的精美个人博客
- 程序员!别逼自己买课了,每天花10分钟做这件事,写代码能力暴增......
- Android学习随笔 -- draw9patch的使用
- leetcode题解77-组合
- 赢利定位是网站建设前提
- 如何理解linux的平均负载?
- 激光打标机金橙子软件画出五角星最简单方法图解
- STM32笔记之 FLASH(内存)
- 信道编码与信源编码基本
- 【Proteus】多功能数字时钟设计
- 无线VoIP技术的现状
- 初级程序员 中级程序员_急切的程序员
- 关于异业联盟和O2O商业模式的一些想法
- logd 删除log
- Maven传递依赖的时候,同名包不同版本的包均会下载,但是编译的时候,只会加载一个高版本的。
- CSS3实现实时时间数字滚动