本主題說明如何部署適用於 Prometheus 的 TKG 延伸 v1.3.1。Prometheus 是一個系統和服務監控系統。它會以指定的時間間隔從已設定的目標收集度量、評估規則運算式、顯示結果,並且可在發現某些條件為 True 時觸發警示。Alertmanager 會處理 Prometheus 所產生的警示,並將這些警示路由至接收端點。部署 Prometheus 的 TKG 延伸,以針對 Tanzu Kubernetes 叢集收集和檢視度量。

延伸必要條件

使用 Alertmanager 部署適用於 Prometheus 的 TKG 延伸 v1.3.1 以進行叢集監控之前,請遵循以下需求。 除了一般需求之外,Prometheus 監控還需要預設持續性儲存區類別。您可以建立具有預設持續性儲存區類別的叢集,也可以在部署延伸時在 Prometheus 組態檔中指定一個叢集。請參閱 檢閱 TKG 延伸的持續性儲存區需求

部署 Prometheus 延伸

適用於 Prometheus 的 TKG 延伸會安裝多個容器。如需詳細資訊,請參閱 https://prometheus.io/
容器 資源類型 複本 說明
prometheus-alertmanager 部署 1 處理由用戶端應用程式 (例如 Prometheus 伺服器) 傳送的警示。
prometheus-cadvisor DaemonSet 5 分析並公開執行中容器的資源使用率和效能資料
prometheus-kube-state-metrics 部署 1 監控節點狀態和容量、複本集合規性、網繭、工作和 cronjob 狀態、資源請求和限制。
prometheus-node-exporter DaemonSet 5 由核心公開之硬體和作業系統度量的匯出工具。
prometheus-pushgateway 部署 1 可讓您從無法抓取的工作推送度量的服務。
prometheus-server 部署 1 提供核心功能,包括抓取、規則處理和警示。
延伸設定為從位於 https://projects.registry.vmware.com/ 的 VMware 公用登錄提取容器。如果使用私人登錄,請變更資料值和延伸組態中的端點 URL 以便相符。請參閱 設定 Prometheus 延伸
  1. 確認您已完成各個延伸必要條件。請參閱延伸必要條件
  2. 將目錄變更為 Prometheus 延伸。
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/prometheus
  3. 建立 tanzu-system-monitoring 命名空間以及 Prometheus 服務帳戶和角色物件。
    kubectl apply -f namespace-role.yaml
  4. 建立 Prometheus 資料值檔案。

    範例資料值檔案將提供最低組態。

    cp prometheus-data-values.yaml.example prometheus-data-values.yaml
  5. 透過更新 prometheus-data-values.yaml 以設定 Prometheus 延伸。如需欄位和選項的說明,請參閱設定 Prometheus 延伸
    如果未使用預設持續性儲存區類別佈建叢集,請在資料值檔案中進行指定。此外,請確保命名空間具有足夠的儲存區用於持續性磁碟區宣告。
    monitoring:
      prometheus_server:
        image:
          repository: projects.registry.vmware.com/tkg/prometheus
        pvc:
          storage_class: vwt-storage-policy
          storage: "8Gi"
      alertmanager:
        image:
          repository: projects.registry.vmware.com/tkg/prometheus
        pvc:
          storage_class: vwt-storage-policy
          storage: "8Gi"
    ...      
    
  6. 使用 prometheus-data-values 檔案建立 Prometheus 密碼。
    kubectl create secret generic prometheus-data-values --from-file=values.yaml=prometheus-data-values.yaml -n tanzu-system-monitoring
    

    prometheus-data-values 密碼是在 tanzu-system-monitoring 命名空間中建立的。使用 kubectl get secrets -n tanzu-system-monitoring 進行驗證。

  7. 部署 Prometheus 延伸。
    kubectl apply -f prometheus-extension.yaml

    成功後,會建立 Prometheus 應用程式:app.kappctrl.k14s.io/prometheus created

  8. 檢查 Prometheus 應用程式的狀態。
    kubectl get app prometheus -n tanzu-system-monitoring
    狀態應從 Reconciling 變更為 Reconcile succeeded。如果狀態為 Reconcile failed,請參閱〈疑難排解〉。
  9. 檢視有關 Prometheus 應用程式的詳細資訊。
    kubectl get app prometheus -n tanzu-system-monitoring -o yaml
  10. 驗證 Prometheus DaemonSet。
    kubectl get daemonsets -n tanzu-system-monitoring
  11. 驗證 Prometheus 部署。
    kubectl get deployments -n tanzu-system-monitoring

疑難排解 Prometheus 部署

如果部署或協調失敗,請執行 kubectl get pods -A 以檢視網繭的狀態。在一般情況下,您應該會看到網繭狀態為 Running。如果狀態為 ImagePullBackOffImageCrashLoopBackOff,則無法從登錄提取容器映像。檢查資料值和延伸 YAML 檔案中的 URL,並確保其正確無誤。

檢查容器記錄,其中 name-XXXXkubectl get pods -A 執行所在的唯一網繭名稱:
kubectl logs pod/prometheus-alertmanager-XXXXX -c prometheus-alertmanager -n tanzu-system-monitoring
kubectl logs pod/prometheus-server-XXXXX -c prometheus-server -n tanzu-system-monitoring

更新 Prometheus 延伸

更新部署到 Tanzu Kubernetes 叢集的 Prometheus 延伸的組態。

  1. 從密碼取得 Prometheus 資料值。
    kubectl get secret prometheus-data-values -n tanzu-system-monitoring -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > prometheus-data-values.yaml
    
  2. 更新 Prometheus 資料值密碼。
    kubectl create secret generic prometheus-data-values --from-file=values.yaml=prometheus-data-values.yaml -n tanzu-system-monitoring -o yaml --dry-run | kubectl replace -f-
    
    將使用更新的資料值來協調 Prometheus 延伸。
    備註: 依預設,kapp-controller 將每 5 分鐘同步一次應用程式。更新應在 5 分鐘內生效。如果您想讓更新立即生效,請變更 prometheus-extension.yaml 中的 syncPeriod 為較小值,然後使用 kubectl apply -f prometheus-extension.yaml 來套用 Fluent Bit 延伸。
  3. 檢查該延伸的狀態。
    kubectl get app prometheus -n tanzu-system-monitoring

    更新 Prometheus 之後,狀態應變更為 Reconcile Succeeded

  4. 檢視詳細狀態和疑難排解。
    kubectl get app prometheus -n tanzu-system-monitoring -o yaml

刪除 Prometheus 延伸

Tanzu Kubernetes 叢集刪除 Prometheus 延伸。
備註: 按順序完成步驟。請不要在完全刪除 Prometheus 應用程式之前,先刪除命名空間、服務帳戶和角色物件。這樣做可能會導致系統錯誤。
注意: Prometheus 和 Grafana 都使用相同的命名空間。刪除命名空間對於其上部署的任何延伸均具有破壞性。如果已部署 Grafana,請不要在刪除 Grafana 之前先刪除命名空間。
  1. 將目錄變更為 Prometheus 延伸。
    cd /extensions/monitoring/prometheus/
  2. 刪除 Prometheus 應用程式。
    kubectl delete app prometheus -n tanzu-system-monitoring

    預期結果:app.kappctrl.k14s.io "prometheus" deleted

  3. 確認 Prometheus 應用程式是否已刪除。
    kubectl get app prometheus -n tanzu-system-monitoring

    預期結果:apps.kappctrl.k14s.io "prometheus" not found

  4. 刪除 tanzu-system-monitoring 命名空間以及 Prometheus 服務帳戶和角色物件。
    警告: 如果已部署 Grafana,請勿執行此步驟。
    kubectl delete -f namespace-role.yaml
  5. 如果您要重新部署 Prometheus,請移除密碼 prometheus-data-values
    kubectl delete secret prometheus-data-values -n tanzu-system-monitoring

    預期結果:secret "prometheus-data-values" deleted

升級 Prometheus 延伸

如果已部署現有 Prometheus 延伸,可以將其升級至最新版本。
  1. 匯出 Prometheus configmap 並將其儲存為備份。
    kubectl get configmap prometheus -n tanzu-system-monitoring -o 'go-template={{ index .data "prometheus.yaml" }}' > prometheus-configmap.yaml
    
  2. 刪除現有的 Prometheus 部署。請參閱刪除 Prometheus 延伸
  3. 部署 Prometheus 延伸。請參閱部署 Prometheus 延伸

設定 Prometheus 延伸

Prometheus 組態在 /extensions/monitoring/prometheus/prometheus-data-values.yaml 中設定。
表 1. Prometheus 組態參數
參數 說明 類型 預設值
monitoring.namespace 將部署 Prometheus 的命名空間 string tanzu-system-monitoring
monitoring.create_namespace 旗標指示是否建立 monitoring.namespace 指定的命名空間 布林值 false
monitoring.prometheus_server.config.prometheus_yaml 要傳遞到 Prometheus 的 Kubernetes 叢集監控組態詳細資料 Yaml 檔案 prometheus.yaml
monitoring.prometheus_server.config.alerting_rules_yaml Prometheus 中定義的詳細警示規則 Yaml 檔案 alerting_rules.yaml
monitoring.prometheus_server.config.recording_rules_yaml Prometheus 中定義的詳細記錄規則 Yaml 檔案 recording_rules.yaml
monitoring.prometheus_server.service.type 用於公開 Prometheus 的服務類型。支援的值:ClusterIP string ClusterIP
monitoring.prometheus_server.enable_alerts.kubernetes_api 在 Prometheus 中為 Kubernetes API 啟用 SLO 警示 布林值 true
monitoring.prometheus_server.sc.aws_type 針對 AWS 上的 storageclass 定義的 AWS 類型 string gp2
monitoring.prometheus_server.sc.aws_fsType 針對 AWS 上的 storageclass 定義的 AWS 檔案系統類型 string ext4
monitoring.prometheus_server.sc.allowVolumeExpansion 定義是否允許針對 AWS 上的 storageclass 進行磁碟區擴充 布林值 true
monitoring.prometheus_server.pvc.annotations 儲存區類別註解 對應 {}
monitoring.prometheus_server.pvc.storage_class 用於持續性磁碟區宣告的儲存區類別。依預設,此為空值,且會使用預設佈建程式 string 空值
monitoring.prometheus_server.pvc.accessMode 定義持續性磁碟區宣告的存取模式。支援的值:ReadWriteOnce、ReadOnlyMany、ReadWriteMany string ReadWriteOnce
monitoring.prometheus_server.pvc.storage 定義持續性磁碟區宣告的儲存區大小。 string 8Gi
monitoring.prometheus_server.deployment.replicas prometheus 複本數 整數 1
monitoring.prometheus_server.image.repository 具有 Prometheus 映像的存放庫的位置。預設為公用 VMware 登錄。如果您要使用私人存放庫 (例如氣隙環境),請變更此值。 string projects.registry.vmware.com/tkg/prometheus
monitoring.prometheus_server.image.name Prometheus 映像的名稱 string prometheus
monitoring.prometheus_server.image.tag Prometheus 映像標籤。如果您要升級版本,則可能需要更新此值。 string v2.17.1_vmware.1
monitoring.prometheus_server.image.pullPolicy Prometheus 映像提取原則 string IfNotPresent
monitoring.alertmanager.config.slack_demo Alertmanager 的 Slack 通知組態 string
slack_demo:
  name: slack_demo
  slack_configs:
  - api_url: https://hooks.slack.com
    channel: '#alertmanager-test'
monitoring.alertmanager.config.email_receiver Alertmanager 的電子郵件通知組態 string
email_receiver:
  name: email-receiver
  email_configs:
  - to: [email protected]
    send_resolved: false
    from: [email protected]
    smarthost: smtp.eample.com:25
    require_tls: false
monitoring.alertmanager.service.type 用於公開 Alertmanager 的服務類型。支援的值:ClusterIP string ClusterIP
monitoring.alertmanager.image.repository 具有 Alertmanager 映像的存放庫的位置。預設為公用 VMware 登錄。如果您要使用私人存放庫 (例如氣隙環境),請變更此值。 string projects.registry.vmware.com/tkg/prometheus
monitoring.alertmanager.image.name Alertmanager 映像的名稱 string alertmanager
monitoring.alertmanager.image.tag Alertmanager 映像標籤。如果您要升級版本,則可能需要更新此值。 string v0.20.0_vmware.1
monitoring.alertmanager.image.pullPolicy Alertmanager 映像提取原則 string IfNotPresent
monitoring.alertmanager.pvc.annotations 儲存區類別註解 對應 {}
monitoring.alertmanager.pvc.storage_class 用於持續性磁碟區宣告的儲存區類別。依預設,此為空值,且會使用預設佈建程式。 string 空值
monitoring.alertmanager.pvc.accessMode 定義持續性磁碟區宣告的存取模式。支援的值:ReadWriteOnce、ReadOnlyMany、ReadWriteMany string ReadWriteOnce
monitoring.alertmanager.pvc.storage 定義持續性磁碟區宣告的儲存區大小。 string 2Gi
monitoring.alertmanager.deployment.replicas alertmanager 複本數 整數 1
monitoring.kube_state_metrics.image.repository 包含 kube-state-metircs 映像的存放庫。預設為公用 VMware 登錄。如果您要使用私人存放庫 (例如氣隙環境),請變更此值。 string projects.registry.vmware.com/tkg/prometheus
monitoring.kube_state_metrics.image.name kube-state-metircs 映像的名稱 string kube-state-metrics
monitoring.kube_state_metrics.image.tag kube-state-metircs 映像標籤。如果您要升級版本,則可能需要更新此值。 string v1.9.5_vmware.1
monitoring.kube_state_metrics.image.pullPolicy kube-state-metircs 映像提取原則 string IfNotPresent
monitoring.kube_state_metrics.deployment.replicas Kube-state-metrics 複本數 整數 1
monitoring.node_exporter.image.repository 包含 node-exporter 映像的存放庫。預設為公用 VMware 登錄。如果您要使用私人存放庫 (例如氣隙環境),請變更此值。 string projects.registry.vmware.com/tkg/prometheus
monitoring.node_exporter.image.name node-exporter 映像的名稱 string node-exporter
monitoring.node_exporter.image.tag node-exporter 映像標籤。如果您要升級版本,則可能需要更新此值。 string v0.18.1_vmware.1
monitoring.node_exporter.image.pullPolicy node-exporter 映像提取原則 string IfNotPresent
monitoring.node_exporter.hostNetwork 如果設定為 hostNetwork: true,則網繭可以使用節點的網路命名空間和網路資源。 布林值 false
monitoring.node_exporter.deployment.replicas Node-exporter 複本數 整數 1
monitoring.pushgateway.image.repository 包含 pushgateway 映像的存放庫。預設為公用 VMware 登錄。如果您要使用私人存放庫 (例如氣隙環境),請變更此值。 string projects.registry.vmware.com/tkg/prometheus
monitoring.pushgateway.image.name pushgateway 映像的名稱 string pushgateway
monitoring.pushgateway.image.tag pushgateway 映像標籤。如果您要升級版本,則可能需要更新此值。 string v1.2.0_vmware.1
monitoring.pushgateway.image.pullPolicy pushgateway 映像提取原則 string IfNotPresent
monitoring.pushgateway.deployment.replicas pushgateway 複本數 整數 1
monitoring.cadvisor.image.repository 包含 cadvisor 映像的存放庫。預設為公用 VMware 登錄。如果您要使用私人存放庫 (例如氣隙環境),請變更此值。 string projects.registry.vmware.com/tkg/prometheus
monitoring.cadvisor.image.name cadvisor 映像的名稱 string cadvisor
monitoring.cadvisor.image.tag cadvisor 映像標籤。如果您要升級版本,則可能需要更新此值。 string v0.36.0_vmware.1
monitoring.cadvisor.image.pullPolicy cadvisor 映像提取原則 string IfNotPresent
monitoring.cadvisor.deployment.replicas cadvisor 複本數 整數 1
monitoring.ingress.enabled 啟用/停用 prometheus 和 alertmanager 的入口 布林值

false

若要使用入口,請將此欄位設定為 true,然後部署 Contour。若要存取 Prometheus,請使用將 prometheus.system.tanzu 對應至 worker 節點 IP 位址的項目更新本機 /etc/hosts

monitoring.ingress.virtual_host_fqdn 用於存取 Prometheus 和 Alertmanager 的主機名稱 string prometheus.system.tanzu
monitoring.ingress.prometheus_prefix prometheus 的路徑前置詞 string /
monitoring.ingress.alertmanager_prefix alertmanager 的路徑前置詞 string /alertmanager/
monitoring.ingress.tlsCertificate.tls.crt 如果您想要使用自己的 TLS 憑證,請為入口提供可選憑證。依預設會產生自我簽署憑證 string 產生的憑證
monitoring.ingress.tlsCertificate.tls.key 如果您想要使用自己的 TLS 憑證,請為入口提供可選憑證私密金鑰。 string 產生的憑證金鑰
表 2. Prometheus_Server Configmap 的可設定欄位
參數 說明 類型 預設值
evaluation_interval 評估規則的頻率 持續時間 1m
scrape_interval 抓取目標的頻率 持續時間 1m
scrape_timeout 經過多長時間後抓取要求逾時 持續時間 10s
rule_files 規則檔案可指定 globs 的清單。從所有符合的檔案讀取規則和警示 Yaml 檔案
scrape_configs 抓取組態的清單。 清單
job_name 依預設指派給已抓取度量的工作名稱 string
kubernetes_sd_configs Kubernetes 服務探索組態的清單。 清單
relabel_configs 目標重新指派標籤組態的清單。 清單
動作 根據 Regex 比對要執行的動作。 string
Regex 比對擷取值所依據的規則運算式。 string
source_labels 來源標籤會從現有標籤中選取值。 string
配置 設定用於要求的通訊協定配置。 string
tls_config 設定抓取要求的 TLS 設定。 string
ca_file 用於驗證 API 伺服器憑證的 CA 憑證。 filename
insecure_skip_verify 停用伺服器憑證的驗證。 布林值
bearer_token_file 可選的 Bearer Token 檔案驗證資訊。 filename
取代 正則運算式比對時執行 Regex 取代所依據的取代值。 string
target_label 在取代動作中結果值要寫入到的標籤。 string
表 3. Alertmanager Configmap 的可設定欄位
參數 說明 類型 預設值
resolve_timeout ResolveTimeout 是 alertmanager 使用的預設值 (如果警示不包含 EndsAt) 持續時間 5m
smtp_smarthost 傳送電子郵件時所使用的 SMTP 主機。 持續時間 1m
slack_api_url Slack webhook URL。 string global.slack_api_url
pagerduty_url API 要求傳送到的 pagerduty URL。 string global.pagerduty_url
範本 從其讀取自訂通知範本定義的檔案 檔案路徑
group_by 按標籤將警示分組 string
group_interval 設定在傳送新增到群組之新警示的相關通知之前要等待的時間 持續時間 5m
group_wait 傳送一組警示通知的初始等待時長 持續時間 30s
repeat_interval 如果已成功傳送警示,則再次傳送通知前要等待的時長 持續時間 4h
接收器 通知接收器清單。 清單
severity 事件的嚴重性。 string
通道 通知要傳送到的通道或使用者。 string
html 電子郵件通知的 HTML 主體。 string
文字 電子郵件通知的文字內文。 string
send_resolved 是否通知已解決的警示。 filename
email_configs 電子郵件整合的組態 布林值
使用網繭上的註解可精細控制抓取程序。這些註解必須是網繭中繼資料的一部分。如果已針對其他物件 (例如,服務或 DaemonSet) 進行設定,則並不會起作用。
表 4. Prometheus 網繭註解
網繭註解 說明
prometheus.io/scrape 預設組態會抓取所有網繭,如果設定為 false,則此註解將會從抓取程序中排除該網繭。
prometheus.io/path 如果度量路徑不是 /metrics,則使用此註解進行定義。
prometheus.io/port 在指示的連接埠上抓取網繭,而非網繭的專用連接埠 (如果未進行宣告,則預設為無連接埠目標)。
下面的 DaemonSet 資訊清單將指示 Prometheus 在連接埠 9102 上抓取其所有網繭。
apiVersion: apps/v1beta2 # for versions before 1.8.0 use extensions/v1beta1
kind: DaemonSet
metadata:
  name: fluentd-elasticsearch
  namespace: weave
  labels:
    app: fluentd-logging
spec:
  selector:
    matchLabels:
      name: fluentd-elasticsearch
  template:
    metadata:
      labels:
        name: fluentd-elasticsearch
      annotations:
        prometheus.io/scrape: 'true'
        prometheus.io/port: '9102'
    spec:
      containers:
      - name: fluentd-elasticsearch
        image: gcr.io/google-containers/fluentd-elasticsearch:1.20