Prometheus Operator部署/管理Prometheus Server

一、Prometheus Operator & Kube-Prometheus & Helm chart 部署区别

总结:三者部署 Prometheus 的区别

Kube-Prometheus:目前是k8s集群监控的主流项目,主要使用Prometheus做集群监控,使用Prometheus Operator做监控的运维管理,也就是以上二者的结合。

二、Prometheus-Operator CRD资源

2.1、CRD 全称是 Custom Resource Definition

什么是 CRD?

以 Deployment 为实例,Deployment 没有直接创建 Pod,而是管理 RS,而 RS 管理 Pod,这就是控制器模式。控制器模式允许基于已有的资源定义更高阶的控制器,用来实现更复杂的能力。

特点:

CRD 本身是一种 Kubernetes 内置的资源类型,即自定义资源的定义,用于描述用户定义的资源是什么样子。

2.2、Prometheus-Operator CRD

Prometheus Operator的本职就是一组用户自定义的CRD资源以及Controller的实现,Prometheus Operator负责监听这些自定义资源的变化,并且根据这些资源的定义自动化的完成如Prometheus Server自身以及配置的自动化管理工作。主要包括以下几个功能:

上面架构图中,各组件以不同的方式运行在 Kubernetes 集群中(之前都是用配置文件来配置,现在都是通过资源对象):

CRD 名称作用
Operator根据自定义资源(Custom Resource Definition / CRDs)来部署和管理 Prometheus Server,同时监控这些自定义资源事件的变化来做相应的处理,是整个系统的控制中心。
Prometheus最核心的一个CRD, 控制prometheus server的statefulset状态。该CRD用于部署、管理prometheus stateful实例,以及配置该prometheus实例与ServiceMonitor(通过serviceMonitorNamespaceSelector标签)、Altermanager(通过alertmanagers标签)、PromtheusRule(通过ruleSelector标签)之间的关联。 一个Prometheus crd 资源创建后,promtheus-operator会自动创建一个prometheus stateful实例。
Prometheus ServerOperator 根据自定义资源 Prometheus 类型中定义的内容而部署的 Prometheus Server 集群,这些自定义资源可以看作是用来管理 Prometheus Server 集群的 StatefulSets 资源。
ServiceMonitor纯配置,Operator告诉prometheus server , 要监控的 targets是基于k8s service动态发现。 Operator基于servicemonitor的配置生成promtheus的标准配置文件promtheus.yml。注意的是,ServiceMonitor中的endpoint被转换为prometheus.yml中的kubernetes_sd_configs标签,即服务发现仍然是通过prometheus的原生能力完成的,ServiceMonitor或prometheus-operator并不具备服务发现能力,仅仅是配置转换与应用能力。
Service简单的说就是 Prometheus 监控的对象。提供给ServiceMonitor选取,让Prometheus Server来获取信息。
Alertmanager用于部署和管理promtheus的Altermanager实例.一个Altermanager资源定义会对应于一个stateful实例,prometheus-opertaor会根据Alertmanager中指定replicas、image、RBAC等信息将promtheus的altermanager pod部署,prometheus实例会自动与该Alertmanager相关联,共同完成监控->告警的链路。
PrometheusRule用于生成promtheus的告警规则文件.纯配置项。promtheus-operator会将该资源转换为prometheus的rule文件,挂在于prometheus实例的文件系统中。

三、部署 Kube-Prometheus

3.1、概述

kube-prometheus 是一整套监控解决方案,它使用 Prometheus 采集集群指标,Grafana 做展示,包含如下组件:

注意:kube-promethues与kubernetes的版本对应关系如下:

prometheus-operator/kube-prometheus: Use Prometheus to monitor Kubernetes and applications running on Kubernetes (github.com)

3.2、下载 Kube-Prometheus 代码

方法一:

注:在release-0.11版本之后新增了NetworkPolicy

默认是允许自己访问,如果了解NetworkPolicy可以修改一下默认的规则,可以用查看 ls *networkPolicy*

如果不修改,则会影响到修改NodePort类型也无法访问;

如果不会Networkpolicy可以直接删除就行;

3.3、修改 Kube-Prometheus 镜像源

国外镜像源某些镜像无法拉取,我们这里修改prometheus-operator,prometheus,alertmanager,kube-state-metrics,node-exporter,prometheus-adapter的镜像源为国内镜像源。这里使用的是中科大的镜像源。

3.4、安装operator & kube-Prometheus

创建namespace & CRD资源,如下:

setup 文件夹中包含所有自定义资源配置 CustomResourceDefinition(一般不用修改,也不要轻易修改)

创建所有应用资源:

需要关注的几个控制器文件:

删除所有资源:

3.5、配置Ingress资源对象

四、访问验证

4.1、prometheus

两个Prometheus实例的, Service 添加 sessionAffinity: ClientIP 属性,会根据 ClientIP 来做 session 亲和性,所以我们不用担心请求会到不同的副本上去。

4.2、granfana

4.3、alertmanager

五、总结