一、概述

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. linux挂载设备类型lvm,linux——管理系统设备之LVM的管理
  2. rabbitMQ简单使用
  3. ilpimage to bitmap
  4. 专车降价滴滴快车使命终结?
  5. 推荐一款Java开发的精美个人博客
  6. 程序员!别逼自己买课了,每天花10分钟做这件事,写代码能力暴增......
  7. Android学习随笔 -- draw9patch的使用
  8. leetcode题解77-组合
  9. 赢利定位是网站建设前提
  10. 如何理解linux的平均负载?
  11. 激光打标机金橙子软件画出五角星最简单方法图解
  12. STM32笔记之 FLASH(内存)
  13. 信道编码与信源编码基本
  14. 【Proteus】多功能数字时钟设计
  15. 无线VoIP技术的现状
  16. 初级程序员 中级程序员_急切的程序员
  17. 关于异业联盟和O2O商业模式的一些想法
  18. logd 删除log
  19. Maven传递依赖的时候,同名包不同版本的包均会下载,但是编译的时候,只会加载一个高版本的。
  20. CSS3实现实时时间数字滚动

热门文章

  1. mysql 安装由于找不到MSVCP120.dll,无法继续执行代码.重新安装程序可能会解决此问题。
  2. python制作更换壁纸小程序
  3. 一道简单的求梯形面积的数学题
  4. Arduino 蜂鸣器
  5. 拓扑排序-信息学奥赛
  6. MYSQL和Navicat安装教程
  7. c语言写扫雷新手详解
  8. MATLAB产生白噪声
  9. g30u盘启动 中科曙光1620_I980-G30
  10. Android9(P)添加第三个摄像头预览图片镜像