本節讨論 Prometheus Operator 的架構。
因為 Prometheus Operator 是基于 Prometheus 的,我們需要先了解一下 Prometheus。
Prometheus 架構
Prometheus 是一個非常優秀的監控工具。準确的說,應該是監控方案。Prometheus 提供了資料搜集、存儲、處理、可視化和告警一套完整的解決方案。Prometheus 的架構如下圖所示:
官網上的原始架構圖比上面這張要複雜一些,為了避免注意力分散,這裡隻保留了最重要的元件。
Prometheus Server
Prometheus Server 負責從 Exporter 拉取和存儲監控資料,并提供一套靈活的查詢語言(PromQL)供使用者使用。
Exporter
Exporter 負責收集目标對象(host, container...)的性能資料,并通過 HTTP 接口供 Prometheus Server 擷取。
可視化元件
監控資料的可視化展現對于監控方案至關重要。以前 Prometheus 自己開發了一套工具,不過後來廢棄了,因為開源社群出現了更為優秀的産品 Grafana。Grafana 能夠與 Prometheus 無縫內建,提供完美的資料展示能力。
Alertmanager
使用者可以定義基于監控資料的告警規則,規則會觸發告警。一旦 Alermanager 收到告警,會通過預定義的方式發出告警通知。支援的方式包括 Email、PagerDuty、Webhook 等.
Prometheus Operator 架構
Prometheus Operator 的目标是盡可能簡化在 Kubernetes 中部署和維護 Prometheus 的工作。其架構如下圖所示:
圖上的每一個對象都是 Kubernetes 中運作的資源。
Operator
Operator 即 Prometheus Operator,在 Kubernetes 中以 Deployment 運作。其職責是部署和管理 Prometheus Server,根據 ServiceMonitor 動态更新 Prometheus Server 的監控對象。
Prometheus Server 會作為 Kubernetes 應用部署到叢集中。為了更好地在 Kubernetes 中管理 Prometheus,CoreOS 的開發人員專門定義了一個命名為
Prometheus
類型的 Kubernetes 定制化資源。我們可以把
Prometheus
看作是一種特殊的 Deployment,它的用途就是專門部署 Prometheus Server。
Service
這裡的 Service 就是 Cluster 中的 Service 資源,也是 Prometheus 要監控的對象,在 Prometheus 中叫做 Target。每個監控對象都有一個對應的 Service。比如要監控 Kubernetes Scheduler,就得有一個與 Scheduler 對應的 Service。當然,Kubernetes 叢集預設是沒有這個 Service 的,Prometheus Operator 會負責建立。
ServiceMonitor
Operator 能夠動态更新 Prometheus 的 Target 清單,ServiceMonitor 就是 Target 的抽象。比如想監控 Kubernetes Scheduler,使用者可以建立一個與 Scheduler Service 相映射的 ServiceMonitor 對象。Operator 則會發現這個新的 ServiceMonitor,并将 Scheduler 的 Target 添加到 Prometheus 的監控清單中。
ServiceMonitor 也是 Prometheus Operator 專門開發的一種 Kubernetes 定制化資源類型。
除了 Prometheus 和 ServiceMonitor,Alertmanager 是 Operator 開發的第三種 Kubernetes 定制化資源。我們可以把
Alertmanager
看作是一種特殊的 Deployment,它的用途就是專門部署 Alertmanager 元件。
學習完架構,下一節我們将部署 Prometheus Operator。
書籍:
1.《每天5分鐘玩轉Kubernetes》
https://item.jd.com/26225745440.html2.《每天5分鐘玩轉Docker容器技術》
https://item.jd.com/16936307278.html3.《每天5分鐘玩轉OpenStack》
https://item.jd.com/12086376.html