一、Prometheus Operator 介绍

Prometheus Operator 是 CoreOS 开发的基于 Prometheus 的 Kubernetes 监控方案,也可能是目前功能最全面的开源方案。

Prometheus Operator架构图

二、安装prometheus operator

测试环境:

[root@k8s-m manifests]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-m Ready master 5h27m v1.15.2
node Ready <none> 5h26m v1.15.2

1、安装metrucs-server

https://www.cnblogs.com/zhangb8042/p/10204997.html

2、部署Prometheus监控方案

#下载prometheus-operator代码
git clone https://github.com/AliyunContainerService/prometheus-operator
cd prometheus-operator/contrib/kube-prometheus/ #部署Prometheus监控方案
kubectl apply -f manifests/ #查看
[root@k8s-m kube-prometheus]# kubectl get namespaces monitoring
NAME STATUS AGE
monitoring Active 71s

3、把服务对公网开放(没有需要的话可以忽略这步)

方法一、
把相对应的service类型改为NodePort(这样就会映射一个30000-32767的外网端口用于访问)

#随机端口
kubectl patch svc prometheus-k8s -n monitoring -p '{"spec":{"type":"NodePort"}}' #指定端口30090
kubectl patch svc prometheus-k8s -n monitoring -p '{"spec":{"type":"NodePort","ports":[{"name":"web","port":9090,"protocol":"TCP","targetPort":"web","nodePort":30090}]}}'

方法二、
使用Proxy的方式临时访问
例如:(临时允许访问服务器的3000端口,注意:该方法只能是访问使用了下面这条命令的服务器IP)

kubectl --namespace monitoring port-forward svc/grafana --address='0.0.0.0'  

方法三、使用ingress的方式让外网访问

开放公网访问(我用的是nodePort方法)

#grafana使用30030、prometheus使用30090、alertmanager使用30093。成功后浏览器访问即可
#grafana登录的账号密码都是admin

kubectl  patch svc  grafana -n monitoring -p '{"spec":{"type":"NodePort","ports":[{"name":"http","port":3000,"protocol":"TCP","targetPort":"http","nodePort":30030}]}}'
kubectl patch svc prometheus-k8s -n monitoring -p '{"spec":{"type":"NodePort","ports":[{"name":"web","port":9090,"protocol":"TCP","targetPort":"web","nodePort":30090}]}}'
kubectl patch svc alertmanager-main -n monitoring -p '{"spec":{"type":"NodePort","ports":[{"name":"web","port":9093,"protocol":"TCP","targetPort":"web","nodePort":30093}]}}'

三、监控模板配置

所有的监控项都在这个文件中(上面git下载的),可以直接删除或者添加新的监控项(感觉有不少默认的监控模板用不到)
/root/prometheus-operator/contrib/kube-prometheus/manifests/prometheus-rules.yaml

#添加一个监控项,在rometheus-rules.yaml文件的最后添加即可

#在prometheus-rules.yaml文件最后添加上(1分钟的负载大于1就报警)
- name: test-load-
rules:
- alert: test-load-
expr: node_load1 >
for: 2m
labels:
team: node
annotations:
summary: "{{$labels.instance}}: load 1 >1"
description: "{{$labels.instance}}: job {{$labels.job}} 测试测试 负载大于1" #重新导入配置文件
[root@k8s-m manifests]# kubectl apply -f prometheus-rules.yaml
prometheusrule.monitoring.coreos.com/prometheus-k8s-rules configured

四、修改alertmanager的报警方式(邮件方式)

1、创建一个邮件报警的配置文件(25端口不行)

[root@k8s-m ~]# cat alertmanger.yaml
global:
resolve_timeout: 5m #处理超时时间,默认为5min
smtp_smarthost: 'smtp.163.com:465' # 邮箱smtp服务器代理
smtp_from: 'xxxx@163.com' # 发送邮箱名称
smtp_auth_username: 'xxxx@163.com' # 邮箱名称
smtp_auth_password: 'xxxxxxxxx' #邮箱密码
smtp_require_tls: false
route:
group_by: ['alertname'] # 报警分组名称
group_wait: 10s # 最初即第一次等待多久时间发送一组警报的通知
group_interval: 10s # 在发送新警报前的等待时间
repeat_interval: 1m # 发送重复警报的周期
receiver: 'email' # 发送警报的接收者的名称,以下receivers name的名称 receivers:
- name: 'email' # 警报
email_configs: # 邮箱配置
- to: 'xxxxxx@163.com' # 接收警报的email配置 inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']

2、将alertmanger.yaml(上面创建的) 配置文件进行base64编码

cat  alertmanger.yaml|base64 

3、把alertmanager配置的文件创建成一个Opaque(把刚才配置文件base64编码的内容放入secret配置中,记得删除换行符,要把所有内容放在一行中)

注意:除了data中的和我这里不一样,其它的不要改。(因为本质上是修改原先Opaque的内容)

[root@k8s-m ~]# cat   alertmanager-secret.yaml
apiVersion: v1
data:
alertmanager.yaml: Z2xvYmFsOiAKICByZXNvbHZlX3RpbWVvdXQ6IDVtICPlpITnkIbotoXml7bml7bpl7TvvIzpu5jorqTkuLo1bWlvbScgIyDlj5HpgIHpgq7nrrHlkI3np7AKICBzbXRwX2F1dGhfdXNl
name: alertmanager-main
namespace: monitoring
type: Opaque

4、导入

[root@k8s-m ~]# kubectl apply -f  alertmanager-secret.yaml
secret/alertmanager-main configured

5、查看与测试

达到了报警条件

查看邮箱

prometheus operator(Kubernetes 集群监控)的更多相关文章

  1. 如何扩展单个Prometheus实现近万Kubernetes集群监控?

    引言 TKE团队负责公有云,私有云场景下近万个集群,数百万核节点的运维管理工作.为了监控规模如此庞大的集群联邦,TKE团队在原生Prometheus的基础上进行了大量探索与改进,研发出一套可扩展,高可 ...

  2. Kubernetes集群部署史上最详细(二)Prometheus监控Kubernetes集群

    使用Prometheus监控Kubernetes集群 监控方面Grafana采用YUM安装通过服务形式运行,部署在Master上,而Prometheus则通过POD运行,Grafana通过使用Prom ...

  3. 如何用Prometheus监控十万container的Kubernetes集群

    概述 不久前,我们在文章<如何扩展单个Prometheus实现近万Kubernetes集群监控?>中详细介绍了TKE团队大规模Kubernetes联邦监控系统Kvass的演进过程,其中介绍 ...

  4. K8S从入门到放弃系列-(13)Kubernetes集群mertics-server部署

    集群部署好后,如果我们想知道集群中每个节点及节点上的pod资源使用情况,命令行下可以直接使用kubectl top node/pod来查看资源使用情况,默认此命令不能正常使用,需要我们部署对应api资 ...

  5. Rancher2.x 一键式部署 Prometheus + Grafana 监控 Kubernetes 集群

    目录 1.Prometheus & Grafana 介绍 2.环境.软件准备 3.Rancher 2.x 应用商店 4.一键式部署 Prometheus 5.验证 Prometheus + G ...

  6. Prometheus 监控外部 Kubernetes 集群

    转载自:https://www.qikqiak.com/post/monitor-external-k8s-on-prometheus/ 在实际环境中很多企业是将 Prometheus 单独部署在集群 ...

  7. 理解OpenShift(7):基于 Prometheus 的集群监控

    理解OpenShift(1):网络之 Router 和 Route 理解OpenShift(2):网络之 DNS(域名服务) 理解OpenShift(3):网络之 SDN 理解OpenShift(4) ...

  8. K8S从入门到放弃系列-(16)Kubernetes集群Prometheus-operator监控部署

    Prometheus Operator不同于Prometheus,Prometheus Operator是 CoreOS 开源的一套用于管理在 Kubernetes 集群上的 Prometheus 控 ...

  9. kubernetes集群全栈监控报警方案kube-prometheus

    参考文档 http://www.servicemesher.com/blog/prometheus-operator-manual/ https://github.com/coreos/prometh ...

随机推荐

  1. JavaScript面向对象 实例与原型

    JavaScript 面向对象 和 C# 不太一样,js 的对象是继承自原型的如下: 首先创建一个 js 实例 new  function function f () {} 这个函数 会继承 Func ...

  2. Spring Boot2 系列教程 (九) | SpringBoot 整合 Mybatis

    前言 如题,今天介绍 SpringBoot 与 Mybatis 的整合以及 Mybatis 的使用,本文通过注解的形式实现. 什么是 Mybatis MyBatis 是支持定制化 SQL.存储过程以及 ...

  3. CF449B Jzzhu and Cities 迪杰斯特拉最短路算法

    CF449B Jzzhu and Cities 其实这一道题并不是很难,只是一个最短路而已,请继续看我的题解吧~(^▽^) AC代码: #include<bits/stdc++.h> #d ...

  4. 各种小的 dp (精)

    Q~ 抛一枚硬币 n 次,每次可能是正面或者反面向上,求没有连续超过 k 次硬币向上的方案数 A : dp[ i ] 表示到 i 位置的方案数, 1 . 当 i < k 时, dp[i] = d ...

  5. Lambda表达式(lambda expression)⭐⭐⭐⭐⭐

    原作者 lambda表达式(lambda expression)实际上是匿名函数一种表示形式, 即没有函数名的函数:参数列表=>表达式或语句块,在我看来主要目是为了简化代码编写,提高代码可读性而 ...

  6. 常用crud

    增:@Insert("insert into  t_user (`last_name`, `sex`) values(#{lastName}, #{sex})")   删:@Del ...

  7. python self用法

    在定义类的过程中,无论是显式的创建类的构造方法,还是向类中添加实例方法,都要将self参数作为方法的第一个参数. class Person: def __init__(self): print(&qu ...

  8. [bzoj2286] [洛谷P2495] [sdoi2015] 消耗战

    Description 在一场战争中,战场由 \(n\) 个岛屿和 \(n-1\) 个桥梁组成,保证每两个岛屿间有且仅有一条路径可达.现在,我军已经侦查到敌军的总部在编号为1的岛屿,而且他们已经没有足 ...

  9. 12、python文件的操作

    前言:本文主要介绍python中文件的操作,包括打开文件.读取文件.写入文件.关闭文件以及上下文管理器. 一.打开文件 Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处 ...

  10. 张旭个人第4次作业—Alpha项目测试

    课程 软件工程实践 作业要求 个人第四次作业 团队名称 C#软工造梦厂 作业目标 运行其他组的项目找出问题及提出建议 一.测试人信息 姓名 张旭 学号 201731024123 团队名称 C#软工造梦 ...