在Prometheus Operator中使用自定义配置
在Prometheus Operator我们通过声明式的创建如Prometheus, ServiceMonitor这些自定义的资源类型来自动化部署和管理Prometheus的相关组件以及配置。而在一些特殊的情况下,对于用户而言,可能还是希望能够手动管理Prometheus配置文件,而非通过Prometheus Operator自动完成。 为什么? 实际上Prometheus Operator对于Job的配置只适用于在Kubernetes中部署和管理的应用程序。如果你希望使用Prometheus监控一些其他的资源,例如AWS或者其他平台中的基础设施或者应用,这些并不在Prometheus Operator的能力范围之内。
为了能够在通过Prometheus Operator创建的Prometheus实例中使用自定义配置文件,我们只能创建一个不包含任何与配置文件内容相关的Prometheus实例
1
apiVersion: monitoring.coreos.com/v1
2
kind: Prometheus
3
metadata:
4
name: inst-cc
5
namespace: monitoring
6
spec:
7
serviceAccountName: prometheus
8
resources:
9
requests:
10
memory: 400Mi
Copied!
将以上内容保存到prometheus-inst-cc.yaml文件中,并且通过kubectl创建:
1
$ kubectl -n monitoring create -f prometheus-inst-cc.yaml
2
prometheus.monitoring.coreos.com/inst-cc created
Copied!
如果查看新建Prometheus的Pod实例YAML定义,我们可以看到Pod中会包含一个volume配置:
1
volumes:
2
- name: config
3
secret:
4
defaultMode: 420
5
secretName: prometheus-inst-cc
Copied!
Prometheus的配置文件实际上是保存在名为prometheus-<name-of-prometheus-object>的Secret中,当用户创建的Prometheus中关联ServiceMonitor这类会影响配置文件内容的定义时,Promethues Operator会自动管理。而如果Prometheus定义中不包含任何与配置相关的定义,那么Secret的管理权限就落到了用户自己手中。
通过修改prometheus-inst-cc的内容,从而可以让用户可以使用自定义的Prometheus配置文件,作为示例,我们创建一个prometheus.yaml文件并添加以下内容:
1
global:
2
scrape_interval: 10s
3
scrape_timeout: 10s
4
evaluation_interval: 10s
Copied!
生成文件内容的base64编码后的内容:
1
$ cat prometheus.yaml | base64
2
Z2xvYmFsOgogIHNjcmFwZV9pbnRlcnZhbDogMTBzCiAgc2NyYXBlX3RpbWVvdXQ6IDEwcwogIGV2YWx1YXRpb25faW50ZXJ2YWw6IDEwcw==
Copied!
修改名为prometheus-inst-cc的Secret内容,如下所示:
1
$ kubectl -n monitoring edit secret prometheus-inst-cc
2
# 省略其它内容
3
data:
4
prometheus.yaml: "Z2xvYmFsOgogIHNjcmFwZV9pbnRlcnZhbDogMTBzCiAgc2NyYXBlX3RpbWVvdXQ6IDEwcwogIGV2YWx1YXRpb25faW50ZXJ2YWw6IDEwcw=="
Copied!
通过port-forward在本地访问新建的Prometheus实例,观察配置文件变化即可:
1
kubectl -n monitoring port-forward statefulsets/prometheus-inst-cc 9091:9090
Copied!
Copy link