https://prometheus-operator.dev/
Prometheus Operator
功能
自定义资源类型,用于部署rometheus、AlertManager等组件
简化部署配置,从 Kubernetes 资源配置 Prometheus 相关功能,例如版本、持久性、保留策略。
简化监控目标配置,基于 Kuberentes 标签查询自动生成监控目标,动态服务发现。
安装
Helm:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm fetch prometheus-community/kube-prometheus-stack
helm install -f values.yaml prometheus-stack prometheus-community/kube-prometheus-stack -n monitor
YAML:
git clone https://github.com/prometheus-operator/kube-prometheus.git
cd kube-prometheus && git checkout v0.7.0
# 创建 Operator 及 CRD
kubectl apply -f manifests/setup
until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done
# 等待前置条件(Operator 及 CRD )完成后在进行部署资源对象
kubectl apply -f manifests/
架构
Operator 作为控制器首先会创建 Prometheus、ServiceMonitor、AlertManager、PrometheusRule等资源对象,然后会一直 Watch 这些资源对象的事件变化从而做出修正。
Prometheus
该 CRD 声明 Prometheus 在 Kubernetes 集群中运行的配置,例如持久化、副本数量等。
Operator 通过在指定的命名空间以 StatefulSet 形式部署对应资源,并且挂载同名的 Secret 对象为的配置。
根据 ServiceMonitor 生成监控目标配置,并且在 Secret 对象中更新。
ServiceMonitor
该 CRD 声明 Prometheus 如何监控一组动态的服务,使用标签进行选择那些 Service 进行监控。
按照定义的规则进行发现新的服务,从而无需重新配置。
利用 Service 中的 EndPoint 字段填充在 Prometheus Scrape Target 从而收集监控指标。
PodMonitor
该 CRD 声明 Prometheus 如何监控一组动态的 Pods,使用标签进行选择那些 Pods 进行监控。
按照定义的规则进行发现新的 Pods,从而无需重新配置。
发现的目标可以来自于任何的命名空间,PodMonitorSpec: namespaceSelector 进行约束命名空间。
与 ServiceMonitor 区别就是不需要 Service 资源对象,针对 Pods 标签进行选择。
PrometheusRule
该 CRD 声明 Prometheus 监控指标的告警规则,包括 Recording Rules 及 Alerting。
AlertManager
该 CRD 声明 AlertManager 在 Kubernetes 集群中运行的配置,例如持久化、副本数量等。
Operator 通过在指定的命名空间以 StatefulSet 形式部署对应资源,并且挂载同名的 Secret 对象为的配置。
AlertmanagerConfig
该 CRD 声明 AlertManager 如何去进行告警或者抑制,包括 Route、Receviers。
按照定义的规则进行推送到邮件、微信、钉钉、短信、电话等。