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

Prometheus Operator(五)- manifests详解之Prometheus CRD

栋总侃技术 2022-08-24
1643

在之前使用Prometheus Operator时,都是直接将默认的描述文件yaml运行起来,对k8s以及在k8s中运行的资源进行监控。但是最近在发现有很多的Prometheus 的CRD资源定义的属性不太了解,导致很多功能的使用走了弯路。

同时,最近需要对Prometheus做优化(资源占用等方面),在对Prometheus Operator中所定义的CRD缺少系统的完整的了解,让优化工作也举步维艰。现在不得不对Prometheus Operator中所定义的CRD来一次系统的学习,来解决工作中的难点了。我们这节将带来Prometheus CRD属性的讲解。

所有的CRD定义在setup目录下

0alertmanagerConfigCustomResourceDefinition.yaml

alertmanger的服务的定义

0alertmanagerCustomResourceDefinition.yaml

alertmanger的配置文件的定义

0prometheusCustomResourceDefinition.yaml

Prometheus服务的定义

0prometheusruleCustomResourceDefinition.yaml

Prometheus告警规则的定义 prometheus与alertmanger不同,没有prometheus 配置文件的定义,是因为Prometheus的配置文件由Prometheus Operator根据通过ServiceMonitor和PodMonitor等定义生成的,而无需配置文件的定义。

0podmonitorCustomResourceDefinition.yaml

PodMonitor的定义,Prometheus根据PodMonitor将需要监控的pod集成至Prometheus的targets

0servicemonitorCustomResourceDefinition.yaml

ServiceMonitor的定义,Prometheus根据ServiceMonitor将需要监控的service集成至Prometheus的targets

0probeCustomResourceDefinition.yaml

探针CRD,该资源的对象也会集成至Prometheus的targets

0thanosrulerCustomResourceDefinition.yaml

thanos的ruler组件定义,目前还不清楚引入thanos的ruler作用,会在后续的文章中讲解

我们将对Prometheus CRD的spec.properties中的重要属性定义进行了解。全面知道Prometheus CRD提供了哪些能力。

additionalAlertManagerConfigs

在prometheus中有一部分是对prometheus对接的alertmanger的配置项:


在上面我们知道没有prometheus 配置文件的CRD定义,如果我们需要对alertmanager_config做额外的配置时就需要用到该属性,该属性定义的secret的内容将会追加至该配置下。

有关alertmanager_config的配置可以参考prometheus的文档:https://prometheus.io/docs/prometheus/latest/configuration/configuration/#alertmanager_config

additionalAlertRelabelConfigs

在配置alertmanger_config时,可以指定relabel_config,将会将label的值替换成目标值。

如果需要额外的relabel_config,可以通过该属性指定的secret内容追加至relabel_config下。

additionalArgs

指定Prometheus 服务的启动参数,使用该属性需要注意,确定当前版本是否支持定义的启动参数或者启动参数设置是否正确,不然将会在prometheus启动时报错退出,造成Pod重启。

additionalScrapeConfigs

我们知道prometheus的targets列表由podMonitor、serviceMonitor、Probe定义的对象组成,但是同时也可以通过该属性指定的secret内容集成至prometheus的targets列表中,该配置对于prometheus 监控集群外部的exporter有着很大的用处。affinity

指定运行Prometheus Pod的亲和性,指定pod运行到期望的Node上。

alerting

定义prometheus对接的alertmanger地址详细信息,例如在prometheus的默认定义中包含以下内容,说明对接monitoring命名空间下alertmanger-main service的web端口。

allowOverlappingBlocks

允许从多个副本prometheus查询结果并合并,这个还是prometheus的试验中,不推荐使用。

apiserverConfig

配置Prometheus指定访问apiserver的host和鉴权方法,如果不配置该项,默认为将Prometheus部署在集群内部,且通过Pod内 var/run/secrets/kubernetes.io/serviceaccount/ 访问apiserver。

arbitraryFSAccessThroughSMs

指定prometheus是否可以访问容器内文件系统的任意文件。

baseImage

指定运行的镜像,已经被image属性取代。

configMaps

与Prometheus运行在同一命名空间内的configmap列表,指定了的configmap将会挂载至prometheus 容器的 etc/prometheus/configmaps 目录

containers

指定或修改与Prometheus 运行在同一个pod内通过Prometheus启动的容器。默认与prometheus运行在同一个pod内的容器如下:

若需要更改代理的模式,可以指定proxy,包括不限于修改启动参数等配置。若需要在该pod内指定thanos 的sidecar将prometheus采集的指标远程存储至对象存储,也可以在这里指定thanos sidecar容器。

disableCompaction

禁用prometheus压缩,prometheus每两个小时将在内存里的指标数据压缩并写入磁盘,开启这项将不会使数据落盘,适用于只需要短时间监控数据展示的模式。

enableAdminAPI

启用admin API,将支持通过api对prometheus集成的targets进行管理,也可以删除数据,关闭prometheus操作,如果没有特殊场景使用,不建议打开,如果打开能够在接口前面加一层代理做接口鉴权,保证数据安全性。

enableFeatures

允许访问prometheus已经禁用的功能。有些功能在prometheus内部由于版本升级被取代或者还处于试验功能,默认是不可访问的,如果需要访问,可以通过该参数访问。

例如 --enable-feature=expand-external-labels 允许将环境变量加在指标的label中。

--enable-feature=remote-write-receiver开启receiver模式,在后续的prometheus版本默认是打开的。

--enable-feature=exemplar-storage 指标中的示例label的key,例如自增的ID,或者链路跟踪的traceID等。

--enable-feature=memory-snapshot-on-shutdown定期内存快照,存储在磁盘避免由于重启带来的数据丢失

--enable-feature=agent 以agent模式允许prometheus,最有用的用途就是prometheus开启remotewrite时,无需做告警规则的评估等功能,可以开启agent模式

enableRemoteWriteReceiver

开启prometheus支持remote write协议写入指标。

enforcedBodySizeLimit

设置抓取对象指标存储的内存空间大小,目前是试验功能,该参数在prometheus2.28以上支持。

enforcedLabelLimit

限制抓取指标的label个数,如果超过限制,按照抓取失败处理,目前为试验功能在prometheus2.27.0以上支持

enforcedLabelNameLengthLimit

限制label的key长度,超过长度认为抓取失败,目前为试验功能在prometheus2.27.0以上支持

enforcedLabelValueLengthLimit

限制label的value长度,超过长度认为抓取失败,目前为试验功能在prometheus2.27.0以上支持

enforcedNamespaceLabel

支持将抓取对象的命名空间增加至指标和告警的label中,其中label的key为该参数指定的名称

enforcedSampleLimit

限制采集指标样本的数量

enforcedTargetLimit

限制抓取的target目标个数

evaluationInterval

prometheus配置文件中的evaluation_interval配置,多长时间对告警规则进行一次评估

excludedFromEnforcement

需要排除被prometheus引用的资源(prometheusrules、servicemonitors、podmonitors、probes),仅当enforcedNamespaceLabel设置为true生效

exemplars

在内存中保留的样本最大存储空间为多少。【可以验证下通过设置该值减少内存的占用】

externalLabels

需要增加至每个序列后额外的label。prometheus配置文件的external_labels配置项。

hostAliases

设置ip的别名,

ignoreNamespaceSelectors

将会忽略该配置下的命名空间内的podMonitor、serviceMonitor等资源

image、tag

指定运行的镜像、版本

imagePullSecrets

拉取镜像的授权配置参数对应的secret

initContainers

pod的初始化容器,目前默认的为init-config-reloader,做配置同步。

logFormat、logLevel

日志格式、日志级别

minReadySeconds

pod启动后最少多长时间为ready状态

nodeSelector

pod调度的node选择

overrideHonorLabels

当设置为true,prometheus会将抓取到的指标中的label冲突的项重命名为exporterd_

podMetadata

设置pod的label

podMonitorNamespaceSelector、podMonitorSelector

选择podMonitor的条件

portName

端口名称,默认为web

priorityClassName

pod的优先级,在k8s资源不足时,发生驱逐的优先级

probeNamespaceSelector、probeSelector

选择Probe的条件

prometheusExternalLabelName

prometheus实例的名称,默认为prometheus,如果设置为空,将不会添加external label 至指标。

prometheusRulesExcludedFromEnforce

不被集成至prometheusRule的CRD对象名称列表

query

启动prometheus指定的query参数

queryLogFile

指定query查询的日志路径

remoteRead、remoteWrite

远程读取、远程写入的url地址

replicaExternalLabelName

标记prometheus 副本的label名称,该label将不会添加至序列中作为标识

replicas

运行prometheus的副本数

resources

资源使用的声明

retention、retentionSize

prometheus从内存中持久化指标数据至磁盘的时间、空间

externalURL、routePrefix

访问prometheus的URL和访问接口的前缀设置

ruleNamespaceSelector、ruleSelector

选择rule CRD对象的条件 rules

告警规则相关配置,最小持续时间、最大持续时间、发送重复告警的最小时间

scrapeInterval、scrapeTimeout

抓取指标的周期时间、超时时间

secrets

指定需要挂载至prometheus容器该目录下(/etc/prometheus/secrets/)的所有secret

securityContext

配置容器运行的安全策略,是否root启动等

serviceAccountName

运行prometheus pod的serviceAccount名称,默认设置的为prometheus-k8s

serviceMonitorNamespaceSelector、serviceMonitorSelector

选择serviceMontor的条件

serviceMonitorSelector

运行prometheus容器的SHA值,默认为version的值

storage

prometheus 数据持久化设置

thanos

thanos环境运行的参数,该功能还只是试验阶段

tolerations、topologySpreadConstraints

pod的容忍度、调度的策略

version

prometheus 版本

volumeMounts、volumes

pod的挂载相关

walCompression

使用Snappy启用预写日志压缩

web

启动prometheus服务相关的web配置,是否https、证书等配置。

PrometheusRules的定义就很简单一个rule属性,其结构与prometheus 的rule定义一致,可以通过对应PrometheusRules配置告警规则。

这一节我们对kube-prometheus中对Prometheus CRD定义的属性进行了全面的了解,在后续的工作中如果对Prometheus Operator有特殊的使用场景,可以深入以上某些属性进行理解,满足生成实践。

往期回顾:

Prometheus Operator(四)- kube-Prometheus入门

Prometheus Operator(三)- Blackbox(黑盒)监控

Prometheus Operator(二)- 一文理清CRD

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



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

评论