Prometheus Vs. Prometheus Operator
在Prometheus中我们需要手动维护配置文件,而在K8s集群中配置文件的维护十分不方便,因此引入Prometheus Operator ,通过K8s原生资源CRD的方式来管理监控。
在集群中,一组需要监控的export(Service)就是一个ServiceMonitor对象,Prometheus Operator会自动监控ServiceMonitor对象的改变而自动生成对应的配置,这样就不需要手动更改Prometheus的配置了。
上图是Prometheus Operator的架构图,其中Operator是最核心的部分,作为一个控制器,它会创建Prometheus、ServiceMonitor、AlertManager以及PrometheusRule 4个CRD资源对象,随后一直监控并维持这4个资源对象的状态。
其中,所创建的Prometheus资源对象作为Prometheus Server存在,而ServiceMonitor就是exporter的各种抽象,exporter用于提供Metrics数据接口。Prometheus正是通过ServiceMonitor提供的Metrics数据接口来Pull数据的。
Service和ServiceMonitor都是K8s的资源,一个 ServiceMonitor可以通过labelSelector的方式去匹配一类Service,Prometheus也可以通过labelSelector去匹配多个ServiceMonitor。
因此,当我们想要在集群中监控数据时,便可以直接操作Kubernetes集群的资源对象,操作更便捷。
Argo Workflow的ServiceMonitor
Argo Workflow作为一个云原生的编排工具,在Prometheus中,只需建立一个类型为ServiceMonitor的资源对象,并将selector指向workflow-controller,就可以实现对指标的自动拉取。
48