暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Prometheus Operator(二)- 一文理清CRD

栋总侃技术 2022-04-03
2540

在上节,我们对Prometheus Operator怎么自动发现ServiceMonitor的过程进行了讲解,Prometheus Operator和其他的Operator控制器一样,通过CRD定义来调谐对象达到目标状态。

CRD

而在Prometheus Operator中,除了上节讲到的ServiceMonitor、Prometheus CRD这些CRD资源,还有很多的CRD资源,来控制整个Prometheus(包含Prometheus Server、Alertmanager、Grafana等组件)的运行状态。

这一节,将会给大家讲解在Prometheus Operator中所用到的所有CRD资源。所有的CRD资源的定义都在manifests/setup目录下:


Prometheus CRD

为了与Prometheus Server的命名区分开,其实名称为Prometheus的CRD资源称作Prometheus CRD。

文件路径:manifests/setup/0probeCustomResourceDefinition.yaml

Prometheus CRD定义了以下功能:

  1. Prometheus Server在运行过程中,其配置文件期望达到的状态。例如如果想将1. prometheus采集的指标数据发送至其他的prometheus集群或者做集中管理的Thanos集群,可配置remoteWrite字段。

  2. Prometheus Server运行的副本数、持久化配置、告警实例(产生的告警发送至的Alertmanager)。

  3. 指定发现的ServiceMonitor的命名空间范围或者指定哪些ServiceMonitor。

而在定义该资源的对象时,是在manifests/setup/0probeCustomResourceDefinition.yaml文件,其中定义的Prometheus的配置文件中只有制定了alertmanager,其他都是默认配置(job通过serviceMonitor发现)。

根据Prometheus CRD 对象的定义产生的Prometheus Server的配置文件是以Prometheus-k8s命名的secret存储在k8s中。

其中alertmanger-main是Alertmanager的配置文件。

Prometheus Operator 以Statefulset的形式运行Prometheus Server实现高可用。

Alertmanager

Alertmanager CRD 定义了在 Kubernetes 集群中运行的 Alertmanager 的配置,也包括Alertmanager运行的副本数、持久化存储等。

Alertmanager在K8S集群中也是以Statefulset的形式运行。

CRD定义文件路径:manifests/setup/0alertmanagerCustomResourceDefinition.yaml

其对象的声明文件路径:manifests/alertmanager-alertmanager.yaml

AlertmanagerConfig

在上面的讲解中,我们知道Alertmanger的配置文件是以secret的方式存储的,如果我们需要给Alertmanger增加一个告警路由,通过webhook或者邮件等方式发送出去,我们该怎么做呢?

修改alertmanager-main这个secret?secret存储的时候都是进行base64编码过的,修改起来很不方便。所以这里就有一个AlertmangerConfig类型的CRD,用户只需要定义这个类型的对象,即可增加路由配置。

所以Alertmanager CRD还有一个功能就是聚合AlertmangerConfig对象资源至Alertmanger的配置文件

ServiceMonitor

在上一节已经详细介绍了ServiceMonitor,这一节我们就简单的一笔带过。ServiceMonitor CRD定义了如何监控一组动态的服务,使用标签选择来定义哪些 Service 被选择进行监控。

PodMonitor

与ServiceMonitor不同,PodMonitor CRD定义如何监控一组动态 pods。与ServiceMonitor同样的都是通过Label选择器来指定哪些pods集成至Prometheus进行监控。

同样的被选择的Pod暴露的接口返回的数据格式与所有的exporter格式一致。与ServiceMonitor一样也可以指定选择pod的命名空间和名称。

PodMonitor 和 ServieMonitor 最大的区别就是不需要有对应的 Service。

PrometheusRule

这个比较简单,就是定义Prometheus告警规则的自定义对象,当需要新增一条告警规则时,只需要定义一个该类型的对象即可。

可以看到其参数格式与rules格式一致,也很方便进行编辑。

Probe

Probe CRD定义了需要进行探针检测为Prometheus提供指标的资源。有关探针的使用,会在后续章节中为读者详细带来。目前可以使用官方提供的 blackbox-exporter 进行探针检测。

blackbox-exporter 允许用户通过:HTTP、HTTPS、DNS、TCP以及ICMP的方式对网络进行探测

ThanosRuler

在Thanos系列讲解时,我们知道Thanos的Ruler组件提供将一组指标计算成新的指标的功能,在后续提取指标时就无需再进行计算了。

在Prometehus Operator中使用Thanos Ruler并不是想计算新的指标,而是利用Ruler可以配置多个指标源,例如配置多个prometheus实例,然后在Ruler中可对多个prometheus实例配置告警规则,进而实现多个prometheus实例的告警实现。

我还没有阅读到Prometheus Operator源码到这一块,还不太清楚在Prometheus Operator实现的多实例Prometheus Server的告警产生就是利用的Thanos Ruler实现的,知道的读者可以向我反馈。

以上就是Prometheus Operator中用到的所有CRD资源的讲解。后续文章也会带来常用的CRD配置讲解,让大家在K8S中也能自如、灵活的配置Prometheus。

本系列回顾:

Prometheus Operator系列(一)- 一文搞懂ServiceMonitor



文章转载自栋总侃技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论