本主题介绍如何部署用于 Prometheus 的 TKG 扩展 v1.3.1。Prometheus 是一种系统和服务监控系统。其按照指定时间间隔从已配置目标收集指标,评估规则表达式,显示结果,并可在观察到符合某种条件时触发警示。Alertmanager 处理 Prometheus 生成的警示,并将其路由到其接收端点。部署用于 Prometheus 的 TKG 扩展,以便收集和查看 Tanzu Kubernetes 集群的衡量指标。
扩展必备条件
- 置备集群。请参见使用 TKGS v1alpha2 API 置备 Tanzu Kubernetes 集群的工作流。
注: 要安装 Prometheus 扩展,必须部署使用默认 serviceDomain 的集群 (
cluster.local
)。 - 连接到集群。请参见以 vCenter Single Sign-On 用户身份连接到 Tanzu Kubernetes 集群。
- 下载 TKG 扩展 v1.3.1 包到运行 kubectl 的客户端主机。
- 在目标 Tanzu Kubernetes 上安装 TKG 扩展必备条件。
部署 Prometheus 扩展
容器 | 资源类型 | 副本 | 描述 |
---|---|---|---|
prometheus-alertmanager |
部署 | 1 | 处理 Prometheus 服务器等客户端应用程序发送的警示。 |
prometheus-cadvisor |
DaemonSet | 5 | 分析并公开来自正在运行的容器的资源使用情况和性能数据 |
prometheus-kube-state-metrics |
部署 | 1 | 监控节点状态和容量、副本集合规性、pod、作业和 cronjob 状态、资源请求和限制。 |
prometheus-node-exporter |
DaemonSet | 5 | 由内核公开的硬件和操作系统衡量指标的导出程序。 |
prometheus-pushgateway |
部署 | 1 | 允许您从无法抓取的作业推送衡量指标的服务。 |
prometheus-server |
部署 | 1 | 提供核心功能,包括提取、规则处理和警示。 |
- 验证您是否已完成每个扩展必备条件。请参见扩展必备条件。
- 将目录更改为 Prometheus 扩展。
cd /tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/prometheus
- 创建
tanzu-system-monitoring
命名空间以及 Prometheus 服务帐户和角色对象。kubectl apply -f namespace-role.yaml
- 创建一个 Prometheus 数据值文件。
示例数据值文件提供了最低配置。
cp prometheus-data-values.yaml.example prometheus-data-values.yaml
- 通过更新
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" ...
- 使用
prometheus-data-values
文件创建 Prometheus 密钥。kubectl create secret generic prometheus-data-values --from-file=values.yaml=prometheus-data-values.yaml -n tanzu-system-monitoring
在
tanzu-system-monitoring
命名空间中创建了prometheus-data-values
密钥。使用kubectl get secrets -n tanzu-system-monitoring
进行验证。 - 部署 Prometheus 扩展。
kubectl apply -f prometheus-extension.yaml
成功后,将创建 Prometheus 应用:
app.kappctrl.k14s.io/prometheus created
。 - 检查 Prometheus 应用的状态。
kubectl get app prometheus -n tanzu-system-monitoring
状态应从Reconciling
更改为Reconcile succeeded
。如果状态为Reconcile failed
,请参见“故障排除”。 - 查看有关 Prometheus 应用的详细信息。
kubectl get app prometheus -n tanzu-system-monitoring -o yaml
- 验证 Prometheus DaemonSet。
kubectl get daemonsets -n tanzu-system-monitoring
- 验证 Prometheus 部署。
kubectl get deployments -n tanzu-system-monitoring
对 Prometheus 部署进行故障排除
如果部署或协调失败,请运行 kubectl get pods -A
以查看 pod 的状态。在正常情况下,您应该看到 pod 的状态为 Running
。如果状态为 ImagePullBackOff
或 ImageCrashLoopBackOff
,则无法从存储库提取容器映像。检查数据值和扩展 YAML 文件中的 URL,并确保它们准确无误。
name-XXXX
是运行
kubectl get pods -A
时的唯一 pod 名称:
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 扩展的配置。
- 从密钥获取 Prometheus 数据值。
kubectl get secret prometheus-data-values -n tanzu-system-monitoring -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > prometheus-data-values.yaml
- 更新 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 扩展。 - 检查扩展的状态。
kubectl get app prometheus -n tanzu-system-monitoring
更新 Prometheus 后,状态应更改为
Reconcile Succeeded
。 - 查看详细状态并进行故障排除。
kubectl get app prometheus -n tanzu-system-monitoring -o yaml
删除 Prometheus 扩展
- 将目录更改为 Prometheus 扩展。
cd /extensions/monitoring/prometheus/
- 删除 Prometheus 应用程序。
kubectl delete app prometheus -n tanzu-system-monitoring
预期结果:
app.kappctrl.k14s.io "prometheus" deleted
。 - 验证是否已删除 Prometheus 应用。
kubectl get app prometheus -n tanzu-system-monitoring
预期结果:
apps.kappctrl.k14s.io "prometheus" not found
。 - 删除
tanzu-system-monitoring
命名空间以及 Prometheus 服务帐户和角色对象。警告: 如果部署了 Grafana,请勿执行此步骤。kubectl delete -f namespace-role.yaml
- 如果要重新部署 Prometheus,请移除密钥
prometheus-data-values
。kubectl delete secret prometheus-data-values -n tanzu-system-monitoring
预期结果:
secret "prometheus-data-values" deleted
。
升级 Prometheus 扩展
- 导出 Prometheus configmap 并将其另存为备份。
kubectl get configmap prometheus -n tanzu-system-monitoring -o 'go-template={{ index .data "prometheus.yaml" }}' > prometheus-configmap.yaml
- 删除现有的 Prometheus 部署。请参见删除 Prometheus 扩展。
- 部署 Prometheus 扩展。请参见部署 Prometheus 扩展。
配置 Prometheus 扩展
/extensions/monitoring/prometheus/prometheus-data-values.yaml
中设置。
参数 | 描述 | 类型 | 默认 |
---|---|---|---|
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 副本数 | integer | 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 副本数 | integer | 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 副本数 | integer | 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 ,Pod 可以使用节点的网络命名空间和网络资源。 |
布尔 | false |
monitoring.node_exporter.deployment.replicas | 节点导出副本数 | integer | 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 副本数 | integer | 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 副本数 | integer | 1 |
monitoring.ingress.enabled | 为 prometheus 和 alertmanager 启用/禁用输入 | 布尔 | false 要使用输入,请将此字段设置为 |
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 | 生成的证书密钥 |
参数 | 描述 | 类型 | 默认 |
---|---|---|---|
evaluation_interval | 评估规则的频率 | 持续时间 | 1m |
scrape_interval | 抓取目标的频率 | 持续时间 | 1m |
scrape_timeout | 直到抓取请求超时的时长 | 持续时间 | 10s |
rule_files | 规则文件指定一组全局组。从所有匹配的文件中读取规则和警示 | Yaml 文件 | |
scrape_configs | 碎片配置列表。 | 列表 | |
job_name | 默认情况下,分配给已抓取指标的作业名称 | string | |
kubernetes_sd_configs | Kubernetes 服务发现配置列表。 | 列表 | |
relabel_configs | 目标重新标记配置列表。 | 列表 | |
操作 | 要根据正则表达式匹配执行的操作。 | string | |
regex | 与所提取的值匹配的正则表达式。 | string | |
source_labels | 源标签从现有标签中选择值。 | string | |
方案 | 配置用于请求的协议方案。 | string | |
tls_config | 配置抓取请求的 TLS 设置。 | string | |
ca_file | 用于验证 API 服务器证书的 CA 证书。 | 文件名 | |
insecure_skip_verify | 禁用服务器证书验证。 | 布尔 | |
bearer_token_file | 可选持有者令牌文件身份验证信息。 | 文件名 | |
替换 | 正则表达式匹配时,执行正则表达式替换所依据的替换值。 | string | |
target_label | 在替换操作中写入所生成值的标签。 | string |
参数 | 描述 | 类型 | 默认 |
---|---|---|---|
resolve_timeout | 如果警示不包括 EndsAt,则 ResolveTimeout 是 alertmanager 使用的默认值 | 持续时间 | 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 | 最初等待针对一组警示发送通知的时长 | 持续时间 | 30 秒 |
repeat_interval | 如果已针对警示成功发送了通知,在再次发送通知之前等待的时长 | 持续时间 | 4 小时 |
接收方 | 通知接收方列表。 | 列表 | |
严重性 | 事件的严重性。 | string | |
通道 | 要发送通知的通道或用户。 | string | |
html | 电子邮件通知的 HTML 正文。 | string | |
文本 | 电子邮件通知的文本正文。 | string | |
send_resolved | 是否通知已解决的警示。 | 文件名 | |
email_configs | 电子邮件集成配置 | 布尔 |
Pod 注释 | 描述 |
---|---|
prometheus.io/scrape |
默认配置将抓取所有 Pod,如果设置为 false,则此注释会从抓取处理过程中排除 Pod。 |
prometheus.io/path |
如果指标路径不是 /metrics,则用此注释进行定义。 |
prometheus.io/port |
在指示的端口上抓取 Pod,而不是 Pod 的已声明端口(如果声明无,则默认为无端口目标)。 |
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