prometheus-operator監控Kubernetes
Operator
Operator
是由CoreOS公司開發的,用來擴充套件 Kubernetes API,特定的應用程式控制器,它用來建立、配置和管理複雜的有狀態應用,如資料庫、快取和監控系統。Operator
基於 Kubernetes 的資源和控制器概念之上構建,但同時又包含了應用程式特定的一些專業知識,比如建立一個數據庫的Operator
,則必須對建立的資料庫的各種運維方式非常瞭解,建立Operator
的關鍵是CRD
(自定義資源)的設計。
CRD
是對 Kubernetes API 的擴充套件,Kubernetes 中的每個資源都是一個 API 物件的集合,例如我們在YAML檔案裡定義的那些spec
都是對 Kubernetes 中的資源物件的定義,所有的自定義資源可以跟 Kubernetes 中內建的資源一樣使用 kubectl 操作。
Operator
是將運維人員對軟體操作的知識給程式碼化,同時利用 Kubernetes 強大的抽象來管理大規模的軟體應用。目前CoreOS
官方提供了幾種Operator
的實現,其中就包括我們今天的主角:Prometheus Operator
,Operator
的核心實現就是基於 Kubernetes 的以下兩個概念:
- 資源:物件的狀態定義
- 控制器:觀測、分析和行動,以調節資源的分佈
當然我們如果有對應的需求也完全可以自己去實現一個Operator
Prometheus-Operator
的使用方法。
介紹
首先我們先來了解下Prometheus-Operator
的架構圖:
上圖是Prometheus-Operator
官方提供的架構圖,其中Operator
是最核心的部分,作為一個控制器,他會去建立Prometheus
、ServiceMonitor
、AlertManager
以及PrometheusRule
4個CRD
資源物件,然後會一直監控並維持這4個資源物件的狀態。
主要部分:
- Operate: 系統主要控制器,根據自定義的資源(Custom Resource Definition,CRDs)來負責管理與部署;
- Prometheus Server: 由Operator 依據一個自定義資源Prometheus型別中所描述的內容而部署的Prometheus Server集,可以將這個自定義資源看作是一種特別用來管理Prometheus Server的StatefulSet資源;
- ServiceMonitor: 一個Kubernetes自定義資料,該資源描述了Prometheus Server的Target列表,Operator會監聽這個資源的變化來動態更新 Prometheus Server的Scrape targets。而該資源主要透過 Selector 來依據 Labels 選取對應的 Service Endpoint,並讓 Prometheus Serve 透過 Service 進行拉取 Metrics 資料;
- Service: kubernetes 中的 Service 資源,這邊主要用來對應 Kubernetes 中 Metrics Server Pod,然後提供給 ServiceMonitor 選取讓 Prometheus Server 拉取資料,在 Prometheus 術語中可以稱為 Target,即被 Prometheus 監測的物件,如一個部署在 Kubernetes 上的 Node Exporter Service。
- Alertmanager: 接收從 Prometheus 來的 event,再根據定義的 notification 組決定要通知的方法。
其中建立的prometheus
這種資源物件就是作為Prometheus Server
存在,而ServiceMonitor
就是exporter
的各種抽象,exporter
前面我們已經學習了,是用來提供專門提供metrics
資料介面的工具,Prometheus
就是通過ServiceMonitor
提供的metrics
資料介面去 pull 資料的,當然alertmanager
這種資源物件就是對應的AlertManager
的抽象,而PrometheusRule
是用來被Prometheus
例項使用的報警規則檔案。
這樣我們要在叢集中監控什麼資料,就變成了直接去操作 Kubernetes 叢集的資源物件了,是不是方便很多了。上圖中的 Service 和 ServiceMonitor 都是 Kubernetes 的資源,一個 ServiceMonitor 可以通過 labelSelector 的方式去匹配一類 Service,Prometheus 也可以通過 labelSelector 去匹配多個ServiceMonitor。
安裝prometheus-operator
採用 helm chart 方式安裝
官網地址: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"
檢查pod狀態
登入Grafana(admin/admin)
&n