跳至主要内容

Prometheus Federator

Prometheus Federator,也稱為 Project Monitoring v2,部署了一個 Helm Project Operator(基於 rancher/helm-project-operator),這是一個管理部署 Helm chart 的 operator,每個 chart 都包含一個 Project Monitoring Stack,其中每個堆疊包含:

重要:

Prometheus Federator 設計為與已安裝 Prometheus Operator CRD 的叢集中現有的 Prometheus Operator 部署一起部署。

Operator 如何運作?​

  1. 部署此 chart 時,使用者可以在 Project Registration Namespace (cattle-project-<id>) 中建立 spec.helmApiVersion 設定為 monitoring.cattle.io/v1alpha1 的 ProjectHelmCharts CR(在 Rancher UI 中也稱為「Project Monitors」)。
  2. 看到每個 ProjectHelmChartCR 時,operator 將根據 ProjectHelmChart controller 在 Operator / System Namespace 中自動建立的 HelmChart CR 和 HelmRelease CR,代表 Project Owner 在 Project Release Namespace (cattle-project-<id>-monitoring) 中自動部署 Project Prometheus stack。
  3. 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 有三種不同的分類:

  1. Operator / System Namespace:operator 部署到的 namespace(例如,cattle-monitoring-system)。此 namespace 將包含此 operator 監控的所有 ProjectHelmCharts 的所有 HelmChart 和 HelmRelease。只有叢集管理員應該有權存取此 namespace。

  2. 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。

  3. 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 是一個資源密集型應用程式。可以將其安裝到本地叢集,但不建議這樣做。