本主题介绍了如何将 Prometheus 部署到工作负载集群中。以下过程适用于 vSphere、Amazon Web Services (AWS) 和 Azure 部署。
Prometheus 是一个监控和警示工具包的开源系统。Tanzu Kubernetes Grid 包含 Prometheus 的签名二进制文件,您可以在工作负载集群上部署这些二进制文件以监控集群运行状况和服务。
kubectl
,如安装 Tanzu CLI 和 Kubernetes CLI 以与 vSphere with Tanzu 主管配合使用或安装 Tanzu CLI 和 Kubernetes 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 启用 Ingress
要启用 Ingress,您可以安装以下可选软件包:
要安装 Prometheus,请执行以下操作:
如果集群没有安装有 Prometheus 软件包的软件包存储库,如 tanzu-standard
存储库,请安装一个:
tanzu package repository add PACKAGE-REPO-NAME --url PACKAGE-REPO-ENDPOINT --namespace tkg-system
其中:
PACKAGE-REPO-NAME
是软件包存储库的名称,如 tanzu-standard
或使用 ADDITIONAL_IMAGE_REGISTRY
变量配置的专用映像注册表的名称。PACKAGE-REPO-ENDPOINT
是软件包存储库的 URL。
tanzu-standard
URL 为 projects.registry.vmware.com/tkg/packages/standard/repo:v2023.10.16
。要从 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.43.0+vmware.1-tkg.4 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.43.0+vmware.1-tkg.4
。
例如:
tanzu package install prometheus --package prometheus.tanzu.vmware.com --namespace my-packages --version 2.43.0+vmware.1-tkg.4
\ 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 软件包。
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
的非 null 值:
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.43.0+vmware.1-tkg.4
。部署 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.10.1+vmware.1-tkg.2 Reconcile succeeded my-packages
prometheus prometheus.tanzu.vmware.com 2.43.0+vmware.1-tkg.4 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
是安装软件包的命名空间。
通过列出集群中正在运行的所有 Pod,确认新服务正在运行。
kubectl get pods -A
在 tanzu-system-monitoring
命名空间中,您应该会看到 pod 中运行的 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 Pod 以及与 Prometheus 组件关联的任何其他资源是在 prometheus-data-values.yaml
中提供的命名空间中创建的。如果使用的是默认命名空间,则会在 tanzu-system-monitoring
命名空间中创建这些 Pod 和资源。
您可以通过两种方法查看 Prometheus 软件包的配置参数:
要检索软件包结构定义,请执行以下操作:
tanzu package available get prometheus.tanzu.vmware.com/2.43.0+vmware.1-tkg.4 -n AVAILABLE-PACKAGE-NAMESPACE --values-schema
此命令列出 Prometheus 软件包的配置参数及其默认值。您可以使用输出更新使用在上述使用自定义值部署 Prometheus 中创建的prometheus-data-values.yml
。
下表列出了 Prometheus 软件包的配置参数,并介绍了其默认值。
您可以在上述使用自定义值部署 Prometheus 创建的 prometheus-data-values.yml
文件中设置以下配置值。
参数 | 描述 | 类型 | 默认 |
---|---|---|---|
namespace |
将在其中部署 Prometheus 的命名空间。 | String | tanzu-system-monitoring |
prometheus.deployment.replicas |
Prometheus 副本数。 | String | 1 |
prometheus.deployment.containers.args |
Prometheus 容器参数。您可以配置此参数以更改保留时间。有关配置 Prometheus 存储参数的信息,请参见 Prometheus 文档。注意 较长保留时间比较短保留时间所需的存储容量多。如果要大幅增加保留时间,则可能需要增加持久卷声明大小。 | 列表 | 不适用 |
prometheus.deployment.containers.resources |
Prometheus 容器资源请求和限制。 | 映射 | {} |
prometheus.deployment.podAnnotations |
Prometheus 部署 Pod 注释。 | 映射 | {} |
prometheus.deployment.podLabels |
Prometheus 部署 Pod 标签。 | 映射 | {} |
prometheus.deployment.configMapReload.containers.args |
Configmap-reload 容器参数。 | 列表 | 不适用 |
prometheus.deployment.configMapReload.containers.resources |
Configmap-reload 容器资源请求和限制。 | 映射 | {} |
prometheus.service.type |
用于公开 Prometheus 的服务类型。支持的值:ClusterIP 。 |
String | ClusterIP |
prometheus.service.port |
Prometheus 服务端口。 | Integer | 80 |
prometheus.service.targetPort |
Prometheus 服务目标端口。 | Integer | 9090 |
prometheus.service.labels |
Prometheus 服务标签。 | 映射 | {} |
prometheus.service.annotations |
Prometheus 服务注释。 | 映射 | {} |
prometheus.pvc.annotations |
存储类注释。 | 映射 | {} |
prometheus.pvc.storageClassName |
用于持久卷声明的存储类。默认情况下,此值为 null,并使用默认置备程序。 | String | null |
prometheus.pvc.accessMode |
定义持久卷声明的访问模式。支持的值:ReadWriteOnce 、ReadOnlyMany 、ReadWriteMany 。 |
String | ReadWriteOnce |
prometheus.pvc.storage |
定义持久卷声明的存储大小。 | String | 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 副本数。 | Integer | 1 |
alertmanager.deployment.containers.resources |
Alertmanager 容器资源请求和限制。 | 映射 | {} |
alertmanager.deployment.podAnnotations |
Alertmanager 部署 Pod 注释。 | 映射 | {} |
alertmanager.deployment.podLabels |
Alertmanager 部署 Pod 标签。 | 映射 | {} |
alertmanager.service.type |
用于公开 Alertmanager 的服务类型。支持的值:ClusterIP 。 |
String | ClusterIP |
alertmanager.service.port |
Alertmanager 服务端口。 | Integer | 80 |
alertmanager.service.targetPort |
Alertmanager 服务目标端口。 | Integer | 9093 |
alertmanager.service.labels |
Alertmanager 服务标签。 | 映射 | {} |
alertmanager.service.annotations |
Alertmanager 服务注释。 | 映射 | {} |
alertmanager.pvc.annotations |
存储类注释。 | 映射 | {} |
alertmanager.pvc.storageClassName |
用于持久卷声明的存储类。默认情况下,此值为 null,并使用默认置备程序。 | String | null |
alertmanager.pvc.accessMode |
定义持久卷声明的访问模式。支持的值:ReadWriteOnce 、ReadOnlyMany 、ReadWriteMany 。 |
String | ReadWriteOnce |
alertmanager.pvc.storage |
定义持久卷声明的存储大小。 | String | 2Gi |
alertmanager.config.alertmanager_yml |
有关警示管理器的全局 YAML 配置的信息,请参见 Prometheus 文档。 | YAML 文件 | alertmanager_yml |
kube_state_metrics.deployment.replicas |
kube-state-metrics 副本数。 | Integer | 1 |
kube_state_metrics.deployment.containers.resources |
kube-state-metrics 容器资源请求和限制。 | 映射 | {} |
kube_state_metrics.deployment.podAnnotations |
kube-state-metrics 部署 Pod 注释。 | 映射 | {} |
kube_state_metrics.deployment.podLabels |
kube-state-metrics 部署 Pod 标签。 | 映射 | {} |
kube_state_metrics.service.type |
用于公开 kube-state-metrics 的服务类型。支持的值:ClusterIP 。 |
String | ClusterIP |
kube_state_metrics.service.port |
kube-state-metrics 服务端口。 | Integer | 80 |
kube_state_metrics.service.targetPort |
kube-state-metrics 服务目标端口。 | Integer | 8080 |
kube_state_metrics.service.telemetryPort |
kube-state-metrics 服务遥测端口。 | Integer | 81 |
kube_state_metrics.service.telemetryTargetPort |
kube-state-metrics 服务目标遥测端口。 | Integer | 8081 |
kube_state_metrics.service.labels |
kube-state-metrics 服务标签。 | 映射 | {} |
kube_state_metrics.service.annotations |
kube-state-metrics 服务注释。 | 映射 | {} |
node_exporter.daemonset.replicas |
节点导出程序副本数。 | Integer | 1 |
node_exporter.daemonset.containers.resources |
节点导出程序容器资源请求和限制。 | 映射 | {} |
node_exporter.daemonset.hostNetwork |
已为此 Pod 请求主机网络连接。 | 布尔 | false |
node_exporter.daemonset.podAnnotations |
节点导出程序部署 Pod 注释。 | 映射 | {} |
node_exporter.daemonset.podLabels |
节点导出程序部署 Pod 标签。 | 映射 | {} |
node_exporter.service.type |
用于公开节点导出程序的服务类型。支持的值:ClusterIP 。 |
String | ClusterIP |
node_exporter.service.port |
节点导出程序服务端口。 | Integer | 9100 |
node_exporter.service.targetPort |
节点导出程序服务目标端口。 | Integer | 9100 |
node_exporter.service.labels |
节点导出程序服务标签。 | 映射 | {} |
node_exporter.service.annotations |
节点导出程序服务注释。 | 映射 | {} |
pushgateway.deployment.replicas |
pushgateway 副本数。 | Integer | 1 |
pushgateway.deployment.containers.resources |
pushgateway 容器资源请求和限制。 | 映射 | {} |
pushgateway.deployment.podAnnotations |
pushgateway 部署 Pod 注释。 | 映射 | {} |
pushgateway.deployment.podLabels |
pushgateway 部署 Pod 标签。 | 映射 | {} |
pushgateway.service.type |
用于公开 pushgateway 的服务类型。支持的值:ClusterIP 。 |
String | ClusterIP |
pushgateway.service.port |
pushgateway 服务端口。 | Integer | 9091 |
pushgateway.service.targetPort |
pushgateway 服务目标端口。 | Integer | 9091 |
pushgateway.service.labels |
pushgateway 服务标签。 | 映射 | {} |
pushgateway.service.annotations |
pushgateway 服务注释。 | 映射 | {} |
cadvisor.daemonset.replicas |
cadvisor 副本数。 | Integer | 1 |
cadvisor.daemonset.containers.resources |
cadvisor 容器资源请求和限制。 | 映射 | {} |
cadvisor.daemonset.podAnnotations |
cadvisor 部署 Pod 注释。 | 映射 | {} |
cadvisor.daemonset.podLabels |
cadvisor 部署 Pod 标签。 | 映射 | {} |
ingress.enabled |
为 prometheus 和 alertmanager 启用/禁用输入。 | 布尔 | false |
ingress.virtual_host_fqdn |
用于访问 promethues 和 alertmanager 的主机名。 | String | prometheus.system.tanzu |
ingress.prometheus_prefix |
prometheus 的路径前缀。 | String | / |
ingress.alertmanager_prefix |
alertmanager 的路径前缀。 | String | /alertmanager/ |
ingress.prometheusServicePort |
要将流量代理到的 Prometheus 服务端口。 | Integer | 80 |
ingress.alertmanagerServicePort |
要将流量代理到的 Alertmanager 服务端口。 | Integer | 80 |
ingress.tlsCertificate.tls.crt |
如果要使用自己的 TLS 证书,则使用可选证书进行输入。默认情况下,将生成一个自签名证书。注意:tls.crt 是密钥,未嵌套。 |
String | Generated cert |
ingress.tlsCertificate.tls.key |
用于输入的可选证书私钥(如果要使用自己的 TLS 证书)。 注意: tls.key 是密钥,未嵌套。 |
String | Generated cert key |
ingress.tlsCertificate.ca.crt |
可选的 CA 证书。注意:ca.crt 是密钥,未嵌套。 |
String | CA certificate |
要在部署后更改 Prometheus 软件包的配置,请更新部署的 Prometheus 软件包:
更新 prometheus-data-values.yaml
文件中的 Prometheus 配置。
更新安装的软件包:
tanzu package installed update prometheus \
--version 2.43.0+vmware.1-tkg.4 \
--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
有关删除的信息,请参见删除软件包。
要为 Alert Manager 配置通知,请编辑 prometheus-data-values.yml
文件中的 alertmanager.config.alertmanager_yml
部分。
有关配置通知(如 Slack 或电子邮件)的信息,请参见 Prometheus 文档中的配置。
默认情况下,Prometheus 上未启用输入。这是因为未对 Prometheus 仪表板的访问进行身份验证。要访问 Prometheus 仪表板,请执行以下操作:
在集群上部署 Contour。
有关部署 Contour 的信息,请参见为 Ingress 控制安装 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 负载均衡器的地址,请参见为 Ingress 控制安装 Contour。
在浏览器中导航到 https://prometheus.system.tanzu
以访问 Prometheus 仪表板。
Prometheus 软件包现在正在运行,并且正在从集群中提取数据。要在 Grafana 仪表板中显示数据,请参见在工作负载集群上部署 Grafana。