何为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.0Args: --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.0Args: --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.yamlrules-configmap-reloader:Image: 178.104.162.39:443/kubernetes/amd64/configmap-reload:v0.0.1Args: --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;