一、概述

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 部署相关推荐

  1. k8s部署Kube Prometheus(Prometheus Operator)

    摘要 本文通过Prometheus-operator框架一键化安装prometheus.alertmanage.granfana,并配置企业微信api以及告警推送,搭建 prometheus 的前提环 ...

  2. Prometheus部署

    Prometheus是最初在SoundCloud上构建的开源系统监视和警报工具包.自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发人员和用户社区.Promet ...

  3. Prometheus 部署告警对接 QQ 邮箱

    目录 引言 一.定义 1. 告警功能概述 2. 通知告警信息 3. Prometheus 监控系统的告警逻辑 3.1 告警功能 3.2 静默.抑制.分组等功能 二.部署告警对接邮箱 1. 下载安装包 ...

  4. 二十七、prometheus部署安装配置告警

    1.部署前简介 本次监控部署应用到的相关软件如下 prometheus 数据采集和存储 提供PromQL语法查询 alertmanager 警告管理 进行报警 node_exporter 收集主机的基 ...

  5. Prometheus部署监控容器

    Prometheus架构描述 Prometheus 是一个非常优秀的监控工具.准确的说,应该是监控方案.Prometheus 提供了监控数据搜集.存储.处理.可视化和告警一套完整的解决方案 Prome ...

  6. 集群外独立部署Prometheus+Grafana监控K8S全面解析

    简介 Prometheus+Grafana作为监控K8S的解决方案,大都是在K8S集群内部部署,这样可以直接调用集群内的cert及各种监控url,但是增加了集群的资源开销.因此在资源有限的情况下,我更 ...

  7. 在 k8s 中部署 Prometheus 和 Grafana

    部署 Prometheus 和 Grafana 到 k8s Intro 上次我们主要分享了 asp.net core 集成 prometheus,以及简单的 prometheus 使用,在实际在 k8 ...

  8. caas k8s主控节点如何查询_k8s中部署prometheus监控告警系统prometheus系列文章第一篇...

    前言 本篇文章主要介绍k8s集群中部署prometheus,并且配置prometheus的动态.静态服务发现,实现监控容器.物理节点.service.pod等资源指标,配置prometheus的web ...

  9. k8s中部署prometheus监控告警系统-prometheus系列文章第一篇

    前言 本篇文章主要介绍k8s集群中部署prometheus,并且配置prometheus的动态.静态服务发现,实现监控容器.物理节点.service.pod等资源指标,配置prometheus的web ...

  10. 监控 prometheus及其部署及server discovery,alertmanager,grafana(更新结束)

    prometheus 一.常用监控简介 1.cacti 2.Nagios 3.Zabbix zabbix核心组件介绍 4.Prometheus 二.运维监控平台设计思路 三.prometheus监控体 ...

最新文章

  1. 又一重磅嘉宾来袭 | 国际人工智能联合会理事长杨强助阵2018品友互动人工智能大会
  2. 占空比50%的奇数分频
  3. python中yield的用法详解——最简单,最清晰的解释(转载)
  4. asp.net架构之请求处理过程:HttpModule,HttpHandler
  5. python画旋转圆_Python使用PyQt界面库绘制不停旋转的圆控件
  6. aftool刷工具提示15天_【15天】【指数600+】关键词百度首页【实战分析】【面授学员】...
  7. Coding the Matrix Week 2 The Vector Space作业
  8. 九章算法--寻找数组波峰
  9. python lambda表达式及用法_Python中lambda表达式的常见用法
  10. 《高效能程序员的修炼》——程序员的八种境界
  11. DragVideo,一种在播放视频时,可以任意拖拽的方案
  12. java 线程池扩容_106. 生产环境中的线程池自动扩容与缩容的动态资源分配经验...
  13. 单径瑞利信道中的BPSK相干解调的(理论)误码率性能
  14. 诺基亚Nokia的PC套件导出短信乱码问题解决(转)
  15. 位移密码加密、解密matlab实现
  16. PS制作视频字幕教程
  17. 华为手机刷机后显示无服务器,华为手机刷机后,无法开机怎么办?
  18. 大数据时代的背景下 校园安防管理软件平台发展变化
  19. 【opencv学习笔记】021之霍夫直线变换原理详解
  20. C语言之位操作和整形的补位

热门文章

  1. 怎么用快剪辑工具去除视频上的水印
  2. python单向链表逆序_链表逆序-Python实现
  3. 微信小程序——下拉框功能
  4. 乒乓球捡球机器人_打乒乓终于可以不用捡球了?
  5. 如何隐藏CSDN博客文章
  6. MiniUI 实战演练视频教程-专题视频课程
  7. ESP32S3IDF在线语音识别
  8. Android夜间模式
  9. FFmpeg的多媒体分析器ffprobe
  10. 原成都传智播客团队启用新品牌名源代码教育