共计 2665 个字符,预计需要花费 7 分钟才能阅读完成。
何为 prometheus 配置自动更新:
- prometheus CRD 对象变更,导致 prometheus 的配置文件变更,须要 reload prometheus 让配置失效;
- prometheusrule CRD 对象变更,导致 prometheus 的规定文件变更,须要 reload prometheus 让配置失效;
- serviceMonitor/podMonitor 等 CRD 对象变更,导致 prometheus 的配置文件变更,须要 reload prometheus 让配置失效;
prometheus 的 POD 中有 3 个 container,其中蕴含:
- prometheus: prometheus-server,主容器;
- config-reloader: sidecar,负责 reload prometheus 的配置文件;
- rules-reloader: sidecar,负责 reload prometheus 的规定文件;
operator+prometheus+ 2 个 sidecar 一起单干,实现了配置的自动更新。
1. sidecar 的镜像及启动参数
2 个 sidecar 的镜像版本,在 operator 的启动参数中指定:
containers:
- args:
- --kubelet-service=kube-system/kubelet
- --logtostderr=true
- --config-reloader-image=178.104.162.39:443/kubernetes/amd64/configmap-reload:v0.0.1
- --config-reloader-memory=50Mi
- --prometheus-config-reloader=178.104.162.39:443/kubernetes/amd64/prometheus-config-reloader:v0.40.0
image: 178.104.162.39:443/kubernetes/amd64/prometheus-operator:v0.40.0
imagePullPolicy: IfNotPresent
name: prometheus-operator
能够看到,rules-reloader 的镜像版本 v0.0.1,config-reloader 的版本 v0.40.0,因为 config-reloader 的代码跟 operator 的代码放在一起的,所以其版本也跟着 operator 的走。
2 个 sidecar 的源码地位:
- config-reloader: 与 operator 源码在一起,https://github.com/prometheus…
- rules-reloader: https://github.com/jimmidyson…
prometheus 及 sidecar 的启动参数:
prometheus:
Image: 178.104.162.39:443/kubernetes/amd64/prometheus:v2.20.0
Args:
--web.console.templates=/etc/prometheus/consoles
--web.console.libraries=/etc/prometheus/console_libraries
--config.file=/etc/prometheus/config_out/prometheus.env.yaml
--storage.tsdb.path=/prometheus
--storage.tsdb.retention.time=24h
--web.enable-lifecycle
--storage.tsdb.no-lockfile
--web.route-prefix=/
prometheus-config-reloader:
Image: 178.104.162.39:443/kubernetes/amd64/prometheus-config-reloader:v0.40.0
Args:
--log-format=logfmt
--reload-url=http://localhost:9090/-/reload
--config-file=/etc/prometheus/config/prometheus.yaml.gz
--config-envsubst-file=/etc/prometheus/config_out/prometheus.env.yaml
rules-configmap-reloader:
Image: 178.104.162.39:443/kubernetes/amd64/configmap-reload:v0.0.1
Args:
--webhook-url=http://localhost:9090/-/reload
--volume-dir=/etc/prometheus/rules/prometheus-k8s-rulefiles-0
2. sidecar 与 volume 的挂载关系
4 个 volume 别离被 3 个 container 挂载:
- prometheus-k8s-db: 寄存 prometheus data 的目录,仅被 prometheus 挂载;
- prometheus-k8s: 寄存 prometheus 配置压缩文件 prometheus.yaml.gz,仅被 config-reloader 挂载;
- config-out: 寄存 prometheus 配置文件,被 prometheus 和 config-reloader 挂载;
- prometheus-k8s-rulefiles-0: 寄存 prometheus 的规定文件,被 prometheus 和 rules-reloader 挂载;
3. 论断后行
论断不难理解,然而外面的细节太多,对细节感兴趣的话能够浏览前面的详解文章。
- operator 监听到 prometheus 配置变更,会更新 secret(文件 prometheus-yaml.gz,应用 gz 保障 <1M),config-reloader 监控到 prometheus-yaml.gz 文件有变更,将其解压至 prometheus-env.yaml,而后发送 reload 给 prometehus;
- operator 监听到 prometheusrule 配置变更,会更新 configmap(目录 prometheus-k8s-rulefiles-0),rules-reloader 监控到 prometheus-k8s-rulefiles- 0 目录有变更,发送 reload 给 prometheus;
正文完
发表至: prometheus
2021-09-10