本主題說明如何將 Prometheus 部署到工作負載叢集。以下程序適用於 vSphere、Amazon Web Services (AWS) 和 Azure 部署。
Prometheus 是開放原始碼系統監控和警示工具組。Tanzu Kubernetes Grid 包含 Prometheus 的簽署二進位檔,可供您部署在工作負載叢集上,以監控叢集健全狀況和服務。
kubectl
,如安裝 Tanzu CLI 和其他工具以用於 vSphere with Tanzu 主管或安裝 Tanzu CLI 和其他工具以用於獨立管理叢集中所述。cert-manager
和 contour
套件。重要Tanzu Kubernetes Grid 中對 IPv6 位址的支援有限;請參閱在 IPv6 上部署叢集 (僅限 vSphere)。如果不是部署到純 IPv6 網路環境,則必須在以下步驟中提供 IPv4 位址。
若要準備叢集,請執行下列動作:
針對要在其中部署 Prometheus 的工作負載叢集,取得其管理員認證。例如:
tanzu cluster kubeconfig get my-cluster --admin
將 kubectl 的內容設定為叢集。例如:
kubectl config use-context my-cluster-admin@my-cluster
(選用) 啟用 Prometheus 的入口
若要啟用入口,您可以安裝下列選用套件:
繼續下面的將 Prometheus 部署到工作負載叢集。
若要安裝 Prometheus:
如果叢集尚未安裝 standard
套件存放庫,請安裝它:
附註如果要將以計劃為基礎的叢集 (舊版) 為目標,請跳過此步驟。對於以計劃為基礎的叢集,會在
tanzu-package-repo-global
命名空間中的每個叢集中,自動啟用tanzu-standard
套件存放庫。
tanzu package repository add tanzu-standard --url PACKAGE-REPOSITORY-ENDPOINT --namespace tkg-system
其中,PACKAGE-REPOSITORY-ENDPOINT
是 standard
套件存放庫的 URL。對於此版本,URL 為 projects.registry.vmware.com/tkg/packages/standard/repo:v2.1.1
。
若要從 Tanzu CLI 取得此值,請參閱列出套件存放庫,或在 Tanzu Mission Control 中查看叢集 (Cluster) 窗格中的附加元件 (Addons) > 存放庫 (Repositories) 清單。
確認工作負載叢集中有 Prometheus 套件可用:
tanzu package available list -A
擷取可用套件的版本:
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 套件:
tanzu package install prometheus \
--package prometheus.tanzu.vmware.com \
--version AVAILABLE-PACKAGE-VERSION \
--namespace TARGET-NAMESPACE
其中:
TARGET-NAMESPACE
是要在其中安裝 Prometheus 軟體套件的命名空間。例如,my-packages
或 tanzu-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'
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
元件:
建立 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=
從覆疊建立密碼:
kubectl create secret generic alertmanager-overlay -n tanzu-package-repo-global -o yaml --dry-run=client --from-file=overlay-alertmanager.yaml | kubectl apply -f -
使用密碼為套件加上註解:
kubectl annotate PackageInstall prometheus -n tanzu-package-repo-global ext.packaging.carvel.dev/ytt-paths-from-secret-name.1=alertmanager-overlay
繼續下面的驗證 Prometheus 部署。
若要以使用者提供的值安裝 Prometheus 套件:
建立組態檔。此檔案設定 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 套件組態參數。
vSphere with Tanzu:如果您要將 Prometheus 部署到使用 vSphere 主管叢集建立的工作負載叢集,請在 prometheus-data-values.yaml
檔案中,為 prometheus.pvc.storageClassName
和 alertmanager.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
所傳回的名稱。
對 prometheus-data-values.yaml
檔案進行任何必要的變更後,移除其中的所有註解:
yq -i eval '... comments=""' prometheus-data-values.yaml
部署套件:
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-packages
或 tanzu-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 套件。例如:
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
命令時所指定的命名空間中。
確認 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
是安裝套件的命名空間。
列出叢集中正在執行的所有網繭,以確認新服務正在執行:
kubectl get pods -A
在 tanzu-system-monitoring
命名空間中,您應該會看到 prometheus
、alertmanager
、node_exporter
、pushgateway
、cadvisor
和 kube_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 套件的組態參數:
若要擷取套件結構描述:
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 |
定義持續性磁碟區宣告的存取模式。支援的值:ReadWriteOnce 、ReadOnlyMany 、ReadWriteMany 。 |
字串 | 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 |
定義持續性磁碟區宣告的存取模式。支援的值:ReadWriteOnce 、ReadOnlyMany 、ReadWriteMany 。 |
字串 | 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-data-values.yaml
檔案中的 Prometheus 組態。
更新已安裝的套件:
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 套件,請執行:
tanzu package installed delete prometheus --namespace my-packages
如需有關刪除的資訊,請參閱刪除套件。
若要為警示管理員設定通知,請編輯 prometheus-data-values.yml
檔案中的 alertmanager.config.alertmanager_yml
區段。
如需設定通知 (例如 Slack 或電子郵件) 的相關資訊,請參閱 Prometheus 說明文件中的組態。
依預設,Prometheus 上不會啟用入口。這是因為不會驗證對 Prometheus 儀表板的存取權。若要存取 Prometheus 儀表板:
在叢集上部署 Contour。
如需部署 Contour 的相關資訊,請參閱安裝 Contour 以用於入口控制。
將下方的 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:
將 ingress.enabled
從 false
更新為 true
。
建立 DNS 記錄,以將 prometheus.system.tanzu
對應至 Envoy 負載平衡器的位址。
若要取得 Envoy 負載平衡器的位址,請參閱安裝 Contour 以用於入口控制。
在瀏覽器中導覽至 https://prometheus.system.tanzu
,以存取 Prometheus 儀表板。
Prometheus 套件現在正在執行並從叢集抓取資料。若要在 Grafana 儀表板中視覺化資料,請參閱在工作負載叢集上部署 Grafana。