在工作負載叢集上部署 Prometheus

本主題說明如何將 Prometheus 部署到工作負載叢集。以下程序適用於 vSphere、Amazon Web Services (AWS) 和 Azure 部署。

Prometheus

Prometheus 是開放原始碼系統監控和警示工具組。Tanzu Kubernetes Grid 包含 Prometheus 的簽署二進位檔,可供您部署在工作負載叢集上,以監控叢集健全狀況和服務。

必要條件

重要

Tanzu Kubernetes Grid 中對 IPv6 位址的支援有限;請參閱在 IPv6 上部署叢集 (僅限 vSphere)。如果不是部署到純 IPv6 網路環境,則必須在以下步驟中提供 IPv4 位址。

準備工作負載叢集以部署 Prometheus

若要準備叢集,請執行下列動作:

  1. 針對要在其中部署 Prometheus 的工作負載叢集,取得其管理員認證。例如:

    tanzu cluster kubeconfig get my-cluster --admin
    
  2. 將 kubectl 的內容設定為叢集。例如:

    kubectl config use-context my-cluster-admin@my-cluster
    

(選用) 啟用 Prometheus 的入口

若要啟用入口,您可以安裝下列選用套件:

  1. 安裝 cert-manager。如需相關資訊,請參閱安裝 cert-manager 以用於憑證管理
  2. 安裝 Contour。如需相關資訊,請參閱安裝 Contour 以用於入口控制

繼續下面的將 Prometheus 部署到工作負載叢集

將 Prometheus 部署到工作負載叢集

若要安裝 Prometheus:

  1. 如果叢集尚未安裝 standard 套件存放庫,請安裝它:

    附註

    如果要將以計劃為基礎的叢集 (舊版) 為目標,請跳過此步驟。對於以計劃為基礎的叢集,會在 tanzu-package-repo-global 命名空間中的每個叢集中,自動啟用 tanzu-standard 套件存放庫。

    tanzu package repository add tanzu-standard --url PACKAGE-REPOSITORY-ENDPOINT --namespace tkg-system
    

    其中,PACKAGE-REPOSITORY-ENDPOINTstandard 套件存放庫的 URL。對於此版本,URL 為 projects.registry.vmware.com/tkg/packages/standard/repo:v2.1.1

    若要從 Tanzu CLI 取得此值,請參閱列出套件存放庫,或在 Tanzu Mission Control 中查看叢集 (Cluster) 窗格中的附加元件 (Addons) > 存放庫 (Repositories) 清單。

  2. 確認工作負載叢集中有 Prometheus 套件可用:

    tanzu package available list -A
    
  3. 擷取可用套件的版本:

    tanzu package available list prometheus.tanzu.vmware.com -A
    | Retrieving package versions for prometheus.tanzu.vmware.com...
     NAME                           VERSION                          RELEASED-AT           NAMESPACE
     prometheus.tanzu.vmware.com    2.27.0+vmware.1-tkg.1            2020-11-24T18:00:00Z  tanzu-package-repo-global
    

當您準備好部署 Prometheus 時,您可以:

vSphere with Tanzu:若要將 Prometheus 套件部署到由 vSphere 主管叢集建立的工作負載叢集,必須使用自訂值來部署。對於 vSphere 7.0 U3 上的工作負載叢集,其 Prometheus 套件未經過驗證。

使用預設組態部署 Prometheus

確認套件版本並擷取後,您就可以安裝套件。

  1. 使用預設值安裝 Prometheus 套件:

    tanzu package install prometheus \
    --package prometheus.tanzu.vmware.com \
    --version AVAILABLE-PACKAGE-VERSION \
    --namespace TARGET-NAMESPACE
    

    其中:

    • TARGET-NAMESPACE 是要在其中安裝 Prometheus 軟體套件的命名空間。例如,my-packagestanzu-cli-managed-packages 命名空間。

      • 如果未指定 --namespace 旗標,Tanzu CLI 會使用 default 命名空間。Prometheus Pod 及與 Prometheus 元件相關聯的任何其他資源會建立於 tanzu-system-monitoring 命名空間中,請勿將 Prometheus 套件安裝到此命名空間。
      • 指定的命名空間必須已存在,例如,從執行 kubectl create namespace my-packages
    • AVAILABLE-PACKAGE-VERSION 是您在上方所擷取的版本,例如 2.27.0+vmware.1-tkg.1

    例如:

    tanzu package install prometheus --package prometheus.tanzu.vmware.com --namespace my-packages --version 2.27.0+vmware.1-tkg.1
    
    \ Installing package 'prometheus.tanzu.vmware.com'
    | Getting package metadata for 'prometheus.tanzu.vmware.com'
    | Creating service account 'prometheus-my-packages-sa'
    | Creating cluster admin role 'prometheus-my-packages-cluster-role'
    | Creating cluster role binding 'prometheus-my-packages-cluster-rolebinding'
    - Creating package resource
    \ Package install status: Reconciling
    
    Added installed package 'prometheus' in namespace 'my-packages'
    
  2. vSphere with Tanzu:在啟用了 vSphere with Tanzu 功能的 vSphere 8 和 vSphere 7.0 U2 上,tanzu package install prometheus 命令可能傳回 Failed to get final advertise address: No private IP address found, and explicit IP not provided 錯誤。

    若要修正此錯誤,請建立並套用套件覆疊,以重新設定 alertmanager 元件:

    1. 建立 overlay-alertmanager.yaml 檔案,且其中包含:

      ---
      #@ load("@ytt:overlay", "overlay")
      
      #@overlay/match by=overlay.and_op(overlay.subset({"kind": "Deployment"}), overlay.subset({"metadata": {"name": "alertmanager"}}))
      ---
      spec:
        template:
          spec:
            containers:
              #@overlay/match by="name",expects="0+"
              - name: alertmanager
                args:
                  - --cluster.listen-address=
      
    2. 從覆疊建立密碼:

      kubectl create secret generic alertmanager-overlay -n tanzu-package-repo-global -o yaml --dry-run=client --from-file=overlay-alertmanager.yaml | kubectl apply -f -
      
    3. 使用密碼為套件加上註解:

      kubectl annotate PackageInstall prometheus -n tanzu-package-repo-global ext.packaging.carvel.dev/ytt-paths-from-secret-name.1=alertmanager-overlay
      

繼續下面的驗證 Prometheus 部署

使用自訂值部署 Prometheus

若要以使用者提供的值安裝 Prometheus 套件:

  1. 建立組態檔。此檔案設定 Prometheus 套件。

    tanzu package available get prometheus.tanzu.vmware.com/PACKAGE-VERSION --default-values-file-output FILE-PATH
    

    其中,PACKAGE-VERSION 是您要安裝的 Prometheus 套件版本,FILE-PATH 是用來儲存組態檔的位置,例如,prometheus-data-values.yaml。上述命令會建立名為 prometheus-data-values.yaml 的組態檔,其中包含預設值。請注意,在舊版中,此檔案稱為 prometheus-data-values.yaml

    如需在 prometheus-data-values.yaml 中使用的組態參數的相關資訊,請參閱下方的 Prometheus 套件組態參數

  2. vSphere with Tanzu:如果您要將 Prometheus 部署到使用 vSphere 主管叢集建立的工作負載叢集,請在 prometheus-data-values.yaml 檔案中,為 prometheus.pvc.storageClassNamealertmanager.pvc.storageClassName 設定一個非空值:

    ingress:
      enabled: true
      virtual_host_fqdn: "prometheus.corp.tanzu"
      prometheus_prefix: "/"
      alertmanager_prefix: "/alertmanager/"
      prometheusServicePort: 80
      alertmanagerServicePort: 80
    prometheus:
      pvc:
        storageClassName: STORAGE-CLASS
    alertmanager:
      pvc:
        storageClassName: STORAGE-CLASS
    

    其中,STORAGE-CLASS 是叢集儲存區類別的名稱,一如 kubectl get storageclass 所傳回的名稱。

  3. prometheus-data-values.yaml 檔案進行任何必要的變更後,移除其中的所有註解:

    yq -i eval '... comments=""' prometheus-data-values.yaml
    
  4. 部署套件:

    tanzu package install prometheus \
    --package prometheus.tanzu.vmware.com \
    --version PACKAGE-VERSION \
    --values-file prometheus-data-values.yaml \
    --namespace TARGET-NAMESPACE
    

    其中:

    • TARGET-NAMESPACE 是命名空間,且您要在其中安裝 Prometheus 套件、Prometheus 套件應用程式,以及用來說明套件的任何其他 Kubernetes 資源。例如,my-packagestanzu-cli-managed-packages 命名空間。如果未指定 --namespace 旗標,Tanzu CLI 會使用 default 命名空間。Prometheus Pod 及與 Prometheus 元件相關聯的任何其他資源會建立於 tanzu-system-monitoring 命名空間中,請勿將 Prometheus 套件安裝到此命名空間。
    • PACKAGE-VERSION 是您在上方所擷取的版本,例如 2.27.0+vmware.1-tkg.1

繼續下面的驗證 Prometheus 部署

驗證 Prometheus 部署

部署 Prometheus 後,您可以驗證部署是否成功:

  1. 確認已安裝 Prometheus 套件。例如:

    tanzu package installed list -A
    / Retrieving installed packages...
    NAME            PACKAGE-NAME                       PACKAGE-VERSION                STATUS                   NAMESPACE
    cert-manager    cert-manager.tanzu.vmware.com      1.1.0+vmware.1-tkg.2           Reconcile succeeded      my-packages
    prometheus      prometheus.tanzu.vmware.com        2.27.0+vmware.1-tkg.1          Reconcile succeeded      my-packages
    antrea          antrea.tanzu.vmware.com                                           Reconcile succeeded      tkg-system
    metrics-server  metrics-server.tanzu.vmware.com                                   Reconcile succeeded      tkg-system
    vsphere-cpi     vsphere-cpi.tanzu.vmware.com                                      Reconcile succeeded      tkg-system
    vsphere-csi     vsphere-csi.tanzu.vmware.com                                      Reconcile succeeded      tkg-system
    

    prometheus 套件和 prometheus 應用程式會安裝在您執行 tanzu package install 命令時所指定的命名空間中。

  2. 確認 prometheus 應用程式協調成功:

    kubectl get apps -A
    

    例如:

    NAMESPACE     NAME                                DESCRIPTION           SINCE-DEPLOY   AGE
    my-packages   cert-manager                        Reconcile succeeded   74s            29m
    my-packages   prometheus                          Reconcile succeeded   20s            33m
    tkg-system    antrea                              Reconcile succeeded   70s            3h43m
    [...]
    

    如果狀態不是 Reconcile succeeded,請檢視 prometheus 應用程式的完整狀態詳細資料。檢視完整狀態可協助您對問題進行疑難排解:

    kubectl get app prometheus --namespace PACKAGE-NAMESPACE -o yaml
    

    其中,PACKAGE-NAMESPACE 是安裝套件的命名空間。

  3. 列出叢集中正在執行的所有網繭,以確認新服務正在執行:

    kubectl get pods -A
    

    tanzu-system-monitoring 命名空間中,您應該會看到 prometheusalertmanagernode_exporterpushgatewaycadvisorkube_state_metrics 服務正在網繭中執行:

    NAMESPACE               NAME                                    READY   STATUS    RESTARTS   AGE
    [...]
    tanzu-system-monitoring   alertmanager-d6bb4d94d-7fgmb                             1/1     Running   0          35m
    tanzu-system-monitoring   prometheus-cadvisor-pgfck                                1/1     Running   0          35m
    tanzu-system-monitoring   prometheus-kube-state-metrics-868b5b749d-9w5f2           1/1     Running   0          35m
    tanzu-system-monitoring   prometheus-node-exporter-97x6c                           1/1     Running   0          35m
    tanzu-system-monitoring   prometheus-node-exporter-dnrkk                           1/1     Running   0          35m
    tanzu-system-monitoring   prometheus-pushgateway-84cc9b85c6-tgmv6                  1/1     Running   0          35m
    tanzu-system-monitoring   prometheus-server-6479964fb6-kk9g2                       2/2     Running   0          35m
    [...]
    

Prometheus 網繭及與 Prometheus 元件相關聯的任何其他資源會建立在您於 prometheus-data-values.yaml 所提供的命名空間中。如果使用的是預設命名空間,則會在 tanzu-system-monitoring 命名空間中建立。

Prometheus 套件組態參數

您可以使用兩種方式來檢視 Prometheus 套件的組態參數:

檢閱套件結構描述

若要擷取套件結構描述:

tanzu package available get prometheus.tanzu.vmware.com/2.27.0+vmware.1-tkg.1 -n AVAILABLE-PACKAGE-NAMESPACE --values-schema

此命令會列出 Prometheus 套件的組態參數及其預設值。您可以使用輸出來更新上述使用自訂值部署 Prometheus 中所建立的 prometheus-data-values.yml 檔案。

檢閱組態參數

下表列出 Prometheus 套件的組態參數,並說明其預設值。

您可以在上述使用自訂值部署 Prometheus 中所建立的 prometheus-data-values.yml 檔案中,設定以下組態值。

參數 說明 類型 預設
namespace 將部署 Prometheus 的命名空間。 字串 tanzu-system-monitoring
prometheus.deployment.replicas Prometheus 複本數。 字串 1
prometheus.deployment.containers.args Prometheus 容器引數。您可以設定此參數以變更保留時間。如需有關設定 Prometheus 儲存區參數的相關資訊,請參閱 Prometheus 說明文件附註:保留時間較長需要的儲存區容量,比保留時間較短更多。如果大幅增加保留時間,則可能需要增加持續性磁碟區宣告大小。 清單 不適用
prometheus.deployment.containers.resources Prometheus 容器資源要求和限制。 對應 {}
prometheus.deployment.podAnnotations Prometheus 部署網繭註解。 對應 {}
prometheus.deployment.podLabels Prometheus 部署網繭標籤。 對應 {}
prometheus.deployment.configMapReload.containers.args Configmap-reload 容器引數。 清單 不適用
prometheus.deployment.configMapReload.containers.resources Configmap-reload 容器資源要求和限制。 對應 {}
prometheus.service.type 用於公開 Prometheus 的服務類型。支援的值:ClusterIP 字串 ClusterIP
prometheus.service.port Prometheus 服務連接埠。 整數 80
prometheus.service.targetPort Prometheus 服務目標連接埠。 整數 9090
prometheus.service.labels Prometheus 服務標籤。 對應 {}
prometheus.service.annotations Prometheus 服務註解。 對應 {}
prometheus.pvc.annotations 儲存區類別註解。 對應 {}
prometheus.pvc.storageClassName 用於持續性磁碟區宣告的儲存區類別。依預設,此為空值,且會使用預設佈建程式。 字串 null
prometheus.pvc.accessMode 定義持續性磁碟區宣告的存取模式。支援的值:ReadWriteOnceReadOnlyManyReadWriteMany 字串 ReadWriteOnce
prometheus.pvc.storage 定義持續性磁碟區宣告的儲存區大小。 字串 150Gi
prometheus.config.prometheus_yml 如需全域 Prometheus 組態的相關資訊,請參閱 Prometheus 說明文件 YAML 檔案 prometheus.yaml
prometheus.config.alerting_rules_yml 如需 Prometheus 警示規則的相關資訊,請參閱 Prometheus 說明文件 YAML 檔案 alerting_rules.yaml
prometheus.config.recording_rules_yml 如需 Prometheus 記錄規則的相關資訊,請參閱 Prometheus 說明文件 YAML 檔案 recording_rules.yaml
prometheus.config.alerts_yml 此處設定其他 prometheus 警示規則。 YAML 檔案 alerts_yml.yaml
prometheus.config.rules_yml 此處設定其他 prometheus 記錄規則。 YAML 檔案 rules_yml.yaml
alertmanager.deployment.replicas alertmanager 複本數。 整數 1
alertmanager.deployment.containers.resources Alertmanager 容器資源要求和限制。 對應 {}
alertmanager.deployment.podAnnotations Alertmanager 部署網繭註解。 對應 {}
alertmanager.deployment.podLabels Alertmanager 部署網繭標籤。 對應 {}
alertmanager.service.type 用於公開 Alertmanager 的服務類型。支援的值:ClusterIP 字串 ClusterIP
alertmanager.service.port Alertmanager 服務連接埠。 整數 80
alertmanager.service.targetPort Alertmanager 服務目標連接埠。 整數 9093
alertmanager.service.labels Alertmanager 服務標籤。 對應 {}
alertmanager.service.annotations Alertmanager 服務註解。 對應 {}
alertmanager.pvc.annotations 儲存區類別註解。 對應 {}
alertmanager.pvc.storageClassName 用於持續性磁碟區宣告的儲存區類別。依預設,此為空值,且會使用預設佈建程式。 字串 null
alertmanager.pvc.accessMode 定義持續性磁碟區宣告的存取模式。支援的值:ReadWriteOnceReadOnlyManyReadWriteMany 字串 ReadWriteOnce
alertmanager.pvc.storage 定義持續性磁碟區宣告的儲存區大小。 字串 2Gi
alertmanager.config.alertmanager_yml 如需警示管理員全域 YAML 組態的相關資訊,請參閱 Prometheus 說明文件 YAML 檔案 alertmanager_yml
kube_state_metrics.deployment.replicas kube-state-metrics 複本數。 整數 1
kube_state_metrics.deployment.containers.resources kube-state-metrics 容器資源要求和限制。 對應 {}
kube_state_metrics.deployment.podAnnotations kube-state-metrics 部署網繭註解。 對應 {}
kube_state_metrics.deployment.podLabels kube-state-metrics 部署網繭標籤。 對應 {}
kube_state_metrics.service.type 用於公開 kube-state-metrics 的服務類型。支援的值:ClusterIP 字串 ClusterIP
kube_state_metrics.service.port kube-state-metrics 服務連接埠。 整數 80
kube_state_metrics.service.targetPort kube-state-metrics 服務目標連接埠。 整數 8080
kube_state_metrics.service.telemetryPort kube-state-metrics 服務遙測連接埠。 整數 81
kube_state_metrics.service.telemetryTargetPort kube-state-metrics 服務目標遙測連接埠。 整數 8081
kube_state_metrics.service.labels kube-state-metrics 服務標籤。 對應 {}
kube_state_metrics.service.annotations kube-state-metrics 服務註解。 對應 {}
node_exporter.daemonset.replicas node-exporter 複本數。 整數 1
node_exporter.daemonset.containers.resources node-exporter 容器資源要求和限制。 對應 {}
node_exporter.daemonset.hostNetwork 已為此網繭要求的主機網路。 布林值 false
node_exporter.daemonset.podAnnotations node-exporter 部署網繭註解。 對應 {}
node_exporter.daemonset.podLabels node-exporter 部署網繭標籤。 對應 {}
node_exporter.service.type 用於公開 node-exporter 的服務類型。支援的值:ClusterIP 字串 ClusterIP
node_exporter.service.port node-exporter 服務連接埠。 整數 9100
node_exporter.service.targetPort node-exporter 服務目標連接埠。 整數 9100
node_exporter.service.labels node-exporter 服務標籤。 對應 {}
node_exporter.service.annotations node-exporter 服務註解。 對應 {}
pushgateway.deployment.replicas pushgateway 複本數。 整數 1
pushgateway.deployment.containers.resources pushgateway 容器資源要求和限制。 對應 {}
pushgateway.deployment.podAnnotations pushgateway 部署網繭註解。 對應 {}
pushgateway.deployment.podLabels pushgateway 部署網繭標籤。 對應 {}
pushgateway.service.type 用於公開 pushgateway 的服務類型。支援的值:ClusterIP 字串 ClusterIP
pushgateway.service.port pushgateway 服務連接埠。 整數 9091
pushgateway.service.targetPort pushgateway 服務目標連接埠。 整數 9091
pushgateway.service.labels pushgateway 服務標籤。 對應 {}
pushgateway.service.annotations pushgateway 服務註解。 對應 {}
cadvisor.daemonset.replicas cadvisor 複本數。 整數 1
cadvisor.daemonset.containers.resources cadvisor 容器資源要求和限制。 對應 {}
cadvisor.daemonset.podAnnotations cadvisor 部署網繭註解。 對應 {}
cadvisor.daemonset.podLabels cadvisor 部署網繭標籤。 對應 {}
ingress.enabled 啟用/停用 prometheus 和 alertmanager 的入口。 布林值 false
ingress.virtual_host_fqdn 用於存取 promethues 和 alertmanager 的主機名稱。 字串 prometheus.system.tanzu
ingress.prometheus_prefix prometheus 的路徑前置詞。 字串 /
ingress.alertmanager_prefix alertmanager 的路徑前置詞。 字串 /alertmanager/
ingress.prometheusServicePort 用於 Proxy 流量的 Prometheus 服務連接埠。 整數 80
ingress.alertmanagerServicePort 用於 Proxy 流量的 Alertmanager 服務連接埠。 整數 80
ingress.tlsCertificate.tls.crt 入口的選用憑證 (如果您要使用自己的 TLS 憑證)。依預設會產生自我簽署憑證。附註tls.crt 是金鑰且為非巢狀。 字串 Generated cert
ingress.tlsCertificate.tls.key 入口的可用憑證私密金鑰 (如果您要使用自己的 TLS 憑證)。
附註tls.key 是金鑰且為非巢狀。
字串 Generated cert key
ingress.tlsCertificate.ca.crt 可用的 CA 憑證。附註ca.crt 是金鑰且為非巢狀。 字串 CA certificate


更新正在執行的 Prometheus 部署

若要在部署後變更 Prometheus 套件的組態,請更新已部署的 Prometheus 套件:

  1. 更新 prometheus-data-values.yaml 檔案中的 Prometheus 組態。

  2. 更新已安裝的套件:

    tanzu package installed update prometheus \
    --version 2.27.0+vmware.1-tkg.1 \
    --values-file prometheus-data-values.yaml \
    --namespace my-packages
    

    預期輸出:

    | Updating package 'prometheus'
    - Getting package install for 'prometheus'
    | Updating secret 'prometheus-my-packages-values'
    | Updating package install for 'prometheus'
    
     Updated package install 'prometheus' in namespace 'my-packages'
    

將會使用您新增的值協調 Prometheus 套件。kapp-controller 套用變更可能需要長達五分鐘的時間。

如需有關更新的資訊,請參閱更新套件

刪除 Prometheus 部署

若要移除叢集上的 Prometheus 套件,請執行:

tanzu package installed delete prometheus --namespace my-packages

如需有關刪除的資訊,請參閱刪除套件

在警示管理員中設定通知

若要為警示管理員設定通知,請編輯 prometheus-data-values.yml 檔案中的 alertmanager.config.alertmanager_yml 區段。

如需設定通知 (例如 Slack 或電子郵件) 的相關資訊,請參閱 Prometheus 說明文件中的組態

存取 Prometheus 儀表板

依預設,Prometheus 上不會啟用入口。這是因為不會驗證對 Prometheus 儀表板的存取權。若要存取 Prometheus 儀表板:

  1. 在叢集上部署 Contour。

    如需部署 Contour 的相關資訊,請參閱安裝 Contour 以用於入口控制

  2. 將下方的 ingress.enabled 區段複製到 prometheus-data-values.yaml 中。

    ingress:
      enabled: false
      virtual_host_fqdn: "prometheus.system.tanzu"
      prometheus_prefix: "/"
      alertmanager_prefix: "/alertmanager/"
      prometheusServicePort: 80
      alertmanagerServicePort: 80
      #! [Optional] The certificate for the ingress if you want to use your own TLS certificate.
      #! We will issue the certificate by cert-manager when it's empty.
      tlsCertificate:
        #! [Required] the certificate
        tls.crt:
        #! [Required] the private key
        tls.key:
        #! [Optional] the CA certificate
        ca.crt:
    
  3. ingress.enabledfalse 更新為 true

  4. 建立 DNS 記錄,以將 prometheus.system.tanzu 對應至 Envoy 負載平衡器的位址。

    若要取得 Envoy 負載平衡器的位址,請參閱安裝 Contour 以用於入口控制

  5. 在瀏覽器中導覽至 https://prometheus.system.tanzu,以存取 Prometheus 儀表板。

    Prometheus 儀表板

後續步驟

Prometheus 套件現在正在執行並從叢集抓取資料。若要在 Grafana 儀表板中視覺化資料,請參閱在工作負載叢集上部署 Grafana

check-circle-line exclamation-circle-line close-line
Scroll to top icon