Prometheus Federator
Prometheus Federator,也稱為 Project Monitoring v2,部署了一個 Helm Project Operator(基於 rancher/helm-project-operator),這是一個管理部署 Helm chart 的 operator,每個 chart 都包含一個 Project Monitoring Stack,其中每個堆疊包含:
- Prometheus(由 Prometheus Operator 外部管理)
- Alertmanager(由 Prometheus Operator 外部管理)
- Grafana(透過內嵌的 Helm chart 部署)
- 基於 kube-prometheus 社群策劃資源集合的預設 PrometheusRules 和 Grafana 儀表板
- 監控已部署資源的預設 ServiceMonitors
Prometheus Federator 設計為與已安 裝 Prometheus Operator CRD 的叢集中現有的 Prometheus Operator 部署一起部署。
Operator 如何運作?
- 部署此 chart 時,使用者可以在 Project Registration Namespace (
cattle-project-<id>) 中建立spec.helmApiVersion設定為monitoring.cattle.io/v1alpha1的 ProjectHelmCharts CR(在 Rancher UI 中也稱為「Project Monitors」)。 - 看到每個 ProjectHelmChartCR 時,operator 將根據 ProjectHelmChart controller 在 Operator / System Namespace 中自動建立的 HelmChart CR 和 HelmRelease CR,代表 Project Owner 在 Project Release Namespace (
cattle-project-<id>-monitoring) 中自動部署 Project Prometheus stack。 - RBAC 將自動分配到 Project Release Namespace,以允許使用者查看已部署的 Project Monitoring Stack 的 Prometheus、Alertmanager 和 Grafana UI;這將基於 Project Registration Namespace 上針對預設 Kubernetes 面向使用者的角色定義的 RBAC。有關更多資訊,請參閱配置 RBAC 章節。
什麼是 Project?
在 Prometheus Federator 中,Project 是一組可以由 metav1.LabelSelector 識別的 namespace。預設情況下,用於識別專案的標籤是 field.cattle.io/projectId,該標籤用於識別包含在給定 Rancher Project 中的 namespace。
配置由 ProjectHelmChart 建立的 Helm release
此 ProjectHelmChart 資源的 spec.values 將對應於提供給 operator 代表使用者部署的底層 Helm chart 的 values.yaml 覆蓋值;要查看底層 chart 的 values.yaml 規格,可以:
- 查看位於
rancher/prometheus-federator下的charts/rancher-project-monitoring的 chart 定義(其中 chart 版本將與此 operator 的版本綁定)。 - 查找在每個 Project Registration Namespace 中自動建立的名為
monitoring.cattle.io.v1alpha1的 ConfigMap,其中將包含用於配置 chart 的values.yaml和questions.yaml(這些直接嵌入到prometheus-federator二進制文件中)。
Namespace
作為基於 rancher/helm-project-operator 的 Project Operator,Prometheus Federator 針對 operator 關注的 namespace 有三種不同的分類:
-
Operator / System Namespace:operator 部署到的 namespace(例如,
cattle-monitoring-system)。此 namespace 將包含此 operator 監控的所有 ProjectHelmCharts 的所有 HelmChart 和 HelmRelease。只有叢集管理員應該有權存取此 namespace。 -
Project Registration Namespace (
cattle-project-<id>):operator 在其中監控 ProjectHelmChart 的一組 namespace。適用於此 namespace 的 RoleBinding 和 ClusterRoleBinding 也將成為在 Project Release Namespace 中建立的自動分配 RBAC 的真實來源。有關詳細資訊,請參閱 RBAC 頁面。Project Owner(admin)、Project Member(edit)和唯讀成員(view)應該有權存取此 namespace。注意事項:-
如果提供了
.Values.global.cattle.projectLabel(預設設定為field.cattle.io/projectId),則 Project Registration Namespace 將由 operator 自動生成並匯入到其綁定的 Project 中。這表示如果觀察到至少一個帶有該標籤的 namespace,operator 應該建立一個 Project Registration Namespace。除非滿足以下條件之一,否則 operator 不會允許刪除這些 namespace:帶有該標籤的所有 namespace 都已消失(例如,這是該專案中的最後一個 namespace,在這種情況下,namespace 將標記為標籤"helm.cattle.io/helm-project-operator-orphaned": "true",表示可以刪除),或者由於專案 ID 在.Values.helmProjectOperator.otherSystemProjectLabelValues下提供(用作 Project 的拒絕清單),它不再監控該專案。這些 namespace 也永遠不會自動刪除,以避免破壞使用者資料;建議使用者在建立或刪除專案時根據需要手動清理這些 namespace。 -
如果未提供
.Values.global.cattle.projectLabel,則 Operator / System Namespace 也將是 Project Registration Namespace。
-
-
Project Release Namespace (
cattle-project-<id>-monitoring):operator 代表 ProjectHelmChart 在其中部署 Project Monitoring Stack 的一組 namespace;operator 還將根據在 Project Registration Namespace 中找到的綁定,自動將 RBAC 分配給 Project Monitoring Stack 在此 namespace 中建立的 Role。只有叢集管理員應該有權存取此 namespace;Project Owner(admin)、Project Member(edit)和唯讀成員(view)將由已部署的 Helm Chart 和 Prometheus Federator 分配對此 namespace 的有限存取權限。注意事項:-
每當在 Project Registration Namespace 中指定 ProjectHelmChart 時,Project Release Namespace 會自動部署並匯入到 ID 在
.Values.helmProjectOperator.projectReleaseNamespaces.labelValue下指定的專案中,如果未指定,則預設為.Values.global.cattle.systemProjectId的值。 -
Project Release Namespace 遵循與 Project Registration Namespace 相同的孤立慣例(請參閱上面的注意事項)。
-
如果
.Values.projectReleaseNamespaces.enabled為 false,則 Project Release Namespace 將與 Project Registration Namespace 相同。
-
Helm 資源(HelmChart、HelmRelease)
部署 ProjectHelmChart 時,Prometheus Federator 將自動建立和管理兩個子自訂資源,這些資源依次管理底層 Helm 資源:
- HelmChart CR(透過 operator 中內嵌的 k3s-io/helm-contoller 管理):此自訂資源會自動在同一 namespace 中建立一個 Job,該 Job 會根據應用於 HelmChart CR 的變更觸發
helm install、helm upgrade或helm uninstall。此 CR 會在 ProjectHelmChart 變更(例如修改 values.yaml)或底層 Project 定義變更(例如從專案中新增或移除 namespace)時自動更新。
如果 ProjectHelmChart 因某種原因無法部署或更新底層 Project Monitoring Stack,則應首先檢查此資源在 Operator / System namespace 中建立的 Job,以查看 Helm 操作是否有問題。但是,這通常只能由叢集管理員存取。
- HelmRelease CR(透過 operator 中內嵌的 rancher/helm-locker 管理):此自訂資源會自動鎖定已部署的 Helm release,並自動覆寫對底層資源的更新,除非變更透過 Helm 操作(由 HelmChart CR 執行的
helm install、helm upgrade或helm uninstall)進行。
HelmRelease CR 會發出 Kubernetes 事件,用於偵測底層 Helm release 何時被修改並將其鎖定回原位置。要查看這些事件,可以使用 kubectl describe helmrelease <helm-release-name> -n <operator/system-namespace>;您也可以查看此 operator 上的日誌,以查看何時偵測到變更以及嘗試對哪些資源進行修改。
這兩個資源都是為 Operator / System namespace 中的所有 Helm chart 建立的,以避免將權限提升到權限不足的使用者。
進階 Helm Project Operator 配置
有關進階配置的更多資訊,請參閱此頁面。
在本地叢集上的 Prometheus Federator
Prometheus Federator 是一個資源密集型應用程式。可以將其安裝到本地 叢集,但不建議這樣做。