点击上方
蓝字·关注我们
Prometheus Operator心得,解析与Prometheus的差异,通过实际案例分享配置技巧,相信你看完会有收获。
背 景
Prometheus Operator介绍
Prometheus Operator 主要特性如下:
简化部署和管理:通过自定义资源定义(CRD),Prometheus Operator可以自动处理Prometheus及其相关组件的部署和配置更新。只需更新相应的CRD,Prometheus Operator会自动应用这些更改。
自动服务发现:利用ServiceMonitor和PodMonitor,Prometheus Operator能够自动发现并监控Kubernetes集群中的服务和Pod,无需手动配置监控目标。
高可用性配置:支持高可用性模式的Prometheus和Alertmanager集群,通过指定多个副本,确保监控系统的高可用性和可靠性。
与Kubernetes无缝集成:深度集成Kubernetes,利用ConfigMap、Secret、PersistentVolume等Kubernetes原生功能,提供与Kubernetes无缝集成的监控解决方案。
它使用如下的 Kubernetes CRD 资源对 Prometheus进行配置:
Prometheus:配置和管理 Prometheus 实例
Alertmanager:配置和管理 Alertmanager 实例,用于处理告警
ThanosRuler:配置和管理 Thanos Ruler 实例,用于规则评估和告警
ServiceMonitor:定义要由 Prometheus 监控的服务及其端点
PodMonitor:定义要由 Prometheus 监控的 Pod 及其端点
Probe:定义主动探测配置,类似于 HTTP 检查
PrometheusRule:定义 Prometheus 规则,包括告警规则和记录规则
AlertmanagerConfig:定义 Alertmanager 的额外配置,例如路由和接收器
ServiceMonitor的配置
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
labels:
exporter :
pvc-monitor :
kube-prometheus :
name: pvc-monitor
namespace: monitoring-system
spec:
endpoints:
interval: 1m
path: /metrics
relabelings:
action: replace
sourceLabels:
pvc
targetLabel: persistentvolumeclaim
action: labeldrop
regex: (service|endpoint)
port: http
scheme: http
jobLabel: app.kubernetes.io/name
namespaceSelector:
matchNames:
kube-system
selector:
matchLabels:
app: pvc-monitor
- name: Register node-exporter endpoint with Kubernetes service
delegate_to: "{{ k8s_server_ip }}"
vars:
namespace: "{{ k8s_namespace }}"
service_name: "{{ k8s_service_name }}"
port: "{{ node_exporter_port }}"
current_host_ip: "{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}"
command: >
kubectl patch endpoints {{ service_name }} -n {{ namespace }}
--type='json'
-p='[{"op": "add", "path": "/subsets/0/addresses/-", "value": {"ip": "{{ current_host_ip }}"}}]'
when:
- ansible_default_ipv4.address != "{{ k8s_server_ip }}"
- not ip_exists
Prometheus CRD的配置
kubectl edit prometheuses k8s -n monitoring-system
spec:
additionalScrapeConfigs:
key: prometheus-additional.yaml
name: additional-scrape-configs
然后将原有的scrape configs配置保存到prometheus-additional.yaml文件中,如:
job_name: 'kafka-exporter'
static_configs:
targets: ['xxxx:9308']
relabel_configs:
source_labels: [job]
action: replace
target_label: prometheus_replica
regex: (.*)
replacement: $1:1
3.接着将prometheus-additional.yaml的内容进行base64编码,保存为config_encoded.yaml
cat prometheus-additional.yaml | base64 | tr -d '\n' > config_encoded.yaml
4.将config_encoded.yaml的内容粘贴到<新的Base64编码值>位置,保存为secret.yaml
apiVersion: v1
data:
<新的Base64编码值> :
kind: Secret
metadata:
name: additional-scrape-configs
namespace: monitoring-system
type: Opaque
5.最后应用更新后的secret,也就完成了所有配置
kubectl apply -f secret.yaml
后续配置变更,则将第2步调整为如下指令,先将当前的prometheus-additional.yaml配置导出,修改后再进行base64编码和应用更新:
kubectl get secret additional-scrape-configs -n monitoring-system -o jsonpath="{.data.prometheus-additional\.yaml}" | base64 --decode > prometheus-additional.yaml
结 语
欢迎订阅我的公众号「SRE运维手记」,可扫下方二维码,或者微信搜“SRE运维手记”
文章转载自SRE运维手记。点击这里阅读原文了解更多。
CNCF概况(幻灯片)
扫描二维码联系我们!
CNCF (Cloud Native Computing Foundation)成立于2015年12月,隶属于Linux Foundation,是非营利性组织。
CNCF(云原生计算基金会)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。请关注CNCF微信公众号。