关于prometheus:prometheusoperator源码分析-prometheus配置自动更新一

75次阅读

共计 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;

正文完
 0