Operator
是由CoreOS公司開發的,用來擴展 Kubernetes API,特定的應用程序控制器,它用來建立、配置和管理複雜的有狀態應用,如數據庫、緩存和監控系統。Operator
基於 Kubernetes 的資源和控制器概念之上構建,但同時又包含了應用程序特定的一些專業知識,好比建立一個數據庫的Operator
,則必須對建立的數據庫的各類運維方式很是瞭解,建立Operator
的關鍵是CRD
(自定義資源)的設計。git
CRD
是對 Kubernetes API 的擴展,Kubernetes 中的每一個資源都是一個 API 對象的集合,例如咱們在YAML文件裏定義的那些spec
都是對 Kubernetes 中的資源對象的定義,全部的自定義資源能夠跟 Kubernetes 中內建的資源同樣使用 kubectl 操做。github
Operator
是將運維人員對軟件操做的知識給代碼化,同時利用 Kubernetes 強大的抽象來管理大規模的軟件應用。目前CoreOS
官方提供了幾種Operator
的實現,其中就包括咱們今天的主角:Prometheus Operator
,Operator
的核心實現就是基於 Kubernetes 的如下兩個概念:數據庫
固然咱們若是有對應的需求也徹底能夠本身去實現一個Operator
,接下來咱們就來給你們詳細介紹下Prometheus-Operator
的使用方法。api
首先咱們先來了解下Prometheus-Operator
的架構圖:緩存
上圖是Prometheus-Operator
官方提供的架構圖,其中Operator
是最核心的部分,做爲一個控制器,他會去建立Prometheus
、ServiceMonitor
、AlertManager
以及PrometheusRule
4個CRD
資源對象,而後會一直監控並維持這4個資源對象的狀態。bash
主要部分:架構
其中建立的prometheus
這種資源對象就是做爲Prometheus Server
存在,而ServiceMonitor
就是exporter
的各類抽象,exporter
前面咱們已經學習了,是用來提供專門提供metrics
數據接口的工具,Prometheus
就是經過ServiceMonitor
提供的metrics
數據接口去 pull 數據的,固然alertmanager
這種資源對象就是對應的AlertManager
的抽象,而PrometheusRule
是用來被Prometheus
實例使用的報警規則文件。app
這樣咱們要在集羣中監控什麼數據,就變成了直接去操做 Kubernetes 集羣的資源對象了,是否是方便不少了。上圖中的 Service 和 ServiceMonitor 都是 Kubernetes 的資源,一個 ServiceMonitor 能夠經過 labelSelector 的方式去匹配一類 Service,Prometheus 也能夠經過 labelSelector 去匹配多個ServiceMonitor。運維
採用 helm chart 方式安裝dom
官網地址:https://github.com/coreos/prometheus-operator
$kubectl create ns monitoring helm repo add coreos https://s3-eu-west-1.amazonaws.com/coreos-charts/stable/ helm install coreos/prometheus-operator --name prometheus-operator --namespace monitoring
kube-prometheus
官網地址:https://github.com/coreos/kube-prometheus
helm install coreos/kube-prometheus --name kube-prometheus --namespace monitoring # 採用域名方式訪問,添加 grafana 的 ingress cat>grafana-ingress.yaml<<EOF apiVersion: extensions/v1beta1 kind: Ingress metadata: name: kube-prometheus-grafana namespace: monitoring spec: rules: - host: grafana.domain.com http: paths: - path: / backend: serviceName: kube-prometheus-grafana servicePort: 80 EOF kubectl apply -f grafana-ingress.yaml #deployments kube-prometheus-exporter-kube-state 的images沒法下載,改成國內鏡像 #將 images 地址前綴爲 registry.cn-hangzhou.aliyuncs.com/google_containers kubectl edit deploy kube-prometheus-exporter-kube-state -n monitoring #關閉 grafana 匿名身份驗證 kubectl edit deploy kube-prometheus-grafana -n monitoring #將env GF_AUTH_ANONYMOUS_ENABLED改到false - name: GF_AUTH_ANONYMOUS_ENABLED value: "false"