ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

使用 VictoriaMetrics Cluster 与 Helm 搭建 Kubernetes 集群监控方案

2026/9/14 14:26:24 拓冰建站 浏览量
使用 VictoriaMetrics Cluster 与 Helm 搭建 Kubernetes 集群监控方案 使用 VictoriaMetrics Cluster 与 Helm 搭建 Kubernetes 集群监控方案【免费下载链接】VictoriaMetricsVictoriaMetrics: fast, cost-effective monitoring solution and time series database项目地址: https://gitcode.com/GitHub_Trending/vi/VictoriaMetrics导读本指南基于 docs/guides/k8s-monitoring-via-vm-cluster 展开讲解如何在 Kubernetes 上通过 Helm 一键部署 VictoriaMetrics 集群版vminsert/vmstorage/vmselect三组件、使用vmagent通过 Kubernetes 服务发现采集节点与 Pod 指标并将数据落库到 VictoriaMetrics 时序数据库最后接入 Grafana 完成可视化。读完本文你将掌握一套可直接复制的 Kubernetes 可观测性落地路径从 Helm 仓库配置、集群版安装、vmagent 采集、Grafana 数据源与仪表盘接入到最终在浏览器中查看监控结果的完整闭环。本文所有命令与配置均以当前仓库及官方 Helm 生态为准示例配置文件可在仓库内直接查阅guide-vmcluster-vmagent-values.yaml。[!NOTE] 建议 本指南中用到的所有配置文件都应纳入版本控制便于日后回查或调整安装配置。前置准备与环境要求开始之前需要准备以下环境本指南以 GKE 集群为例同样适用于 Amazon EKS 或本地自建集群Kubernetes 集群 1.34Helm 4.1kubectl 1.34三个工具各司其职kubectl负责查看 Pod 与 Service 状态helm负责把 VictoriaMetrics 集群版、vmagent 和 Grafana 以 Chart 形式安装进集群而 Kubernetes 集群本身则提供运行这些组件的运行时环境。1. 添加 VictoriaMetrics Helm 仓库VictoriaMetrics 提供了官方的 Helm Chart 仓库先将其添加到本地 Helm 配置中helm repo add vm https://victoriametrics.github.io/helm-charts/ helm repo update验证仓库是否配置成功helm search repo vm/输出应类似于NAME CHART VERSION APP VERSION DESCRIPTION vm/victoria-metrics-cluster 0.34.0 v1.135.0 VictoriaMetrics Cluster version - high-performa... vm/victoria-metrics-agent 0.31.0 v1.135.0 VictoriaMetrics Agent - collects metrics from v... ...(the list continues)...其中vm/victoria-metrics-cluster用于部署集群版vm/victoria-metrics-agent用于部署采集器 vmagent后续步骤将分别用到这两个 Chart。2. 通过 Helm 安装 VictoriaMetrics 集群版集群版的三组件架构VictoriaMetrics 集群版由三个可独立横向扩展的服务组成这一点在官方集群版文档 Cluster-VictoriaMetrics.md 中有明确描述vminsert接收写入的指标数据并依据指标名与全部标签做一致哈希consistent hashing将数据分散写入到各个vmstorage节点vmstorage存储原始数据并按时间范围与标签过滤条件返回查询结果vmselect执行查询从所有配置的vmstorage节点拉取数据并汇聚结果。vmstorage节点之间互不感知、互不通信、不共享数据属于 shared-nothing 架构因此集群的扩展与维护都更简单可用性也更高。从源码层面看vminsert侧负责把写入请求路由到多个存储节点而vmselect侧则聚合来自所有存储节点的数据。编写集群版 Values 配置文件创建名为victoria-metrics-cluster-values.yml的配置文件cat EOF victoria-metrics-cluster-values.yml vmselect: podAnnotations: prometheus.io/scrape: true prometheus.io/port: 8481 vminsert: podAnnotations: prometheus.io/scrape: true prometheus.io/port: 8480 vmstorage: podAnnotations: prometheus.io/scrape: true prometheus.io/port: 8482 EOF该配置为三个服务各定义了两项关键设置podAnnotations: prometheus.io/scrape: true启用对 VictoriaMetrics Pod 的自动发现与指标抓取自监控podAnnotations: prometheus.io/port: port-number指定抓取指标时使用的端口。8480是 vminsert 的写入端口8481是 vmselect 的读取端口8482是 vmstorage 的存储端口。这些端口号在仓库代码中也有印证例如 app/vmauth/target_url_test.go 中的路由测试即使用vmselect:8481与vminsert:8480作为目标地址。安装集群版执行安装命令helm install vmcluster vm/victoria-metrics-cluster -f victoria-metrics-cluster-values.yml预期输出如下关键信息在于 NOTES 部分给出的写入与读取端点NAME: vmcluster LAST DEPLOYED: Wed Feb 4 12:00:55 2026 NAMESPACE: default STATUS: deployed REVISION: 1 DESCRIPTION: Install complete TEST SUITE: None NOTES: Write API: The Victoria Metrics write api can be accessed via port 8480 with the following DNS name from within your cluster: vmcluster-victoria-metrics-cluster-vminsert.default.svc.cluster.local. ... remote_write: - url: http://insert-service/insert/0/prometheus/ ... Read API: The VictoriaMetrics read api can be accessed via port 8481 with the following DNS name from within your cluster: vmcluster-victoria-metrics-cluster-vmselect.default.svc.cluster.local. ... Input this URL field into Grafana http://select-service/select/0/prometheus/请务必记下两个端点后续步骤会用到remote_write写入端点Step 3 配置 vmagent 时使用remote_write: - url: http://vmcluster-victoria-metrics-cluster-vminsert.default.svc.cluster.local.:8480/insert/0/prometheus/VictoriaMetrics 读取端点Step 4 配置 Grafana 数据源时使用The VictoriaMetrics read api can be accessed via port 8481 with the following DNS name from within your cluster: vmcluster-victoria-metrics-cluster-vmselect.default.svc.cluster.local.URL 中的/insert/0/prometheus/与/select/0/prometheus/中的0表示租户 ID多租户下每个租户拥有独立的命名空间prometheus表示协议类型这也是集群版多租户特性的体现。验证集群状态执行以下命令确认所有 Pod 正常运行kubectl get pods预期输出NAME READY STATUS RESTARTS AGE vmcluster-victoria-metrics-cluster-vminsert-689cbc8f55-95szg 1/1 Running 0 16m vmcluster-victoria-metrics-cluster-vminsert-689cbc8f55-f852l 1/1 Running 0 16m vmcluster-victoria-metrics-cluster-vmselect-977d74cdf-bbgp5 1/1 Running 0 16m vmcluster-victoria-metrics-cluster-vmselect-977d74cdf-vzp6z 1/1 Running 0 16m vmcluster-victoria-metrics-cluster-vmstorage-0 1/1 Running 0 16m vmcluster-victoria-metrics-cluster-vmstorage-1 1/1 Running 0 16m可以看到 vminsert 与 vmselect 各有 2 个副本vmstorage 以有状态副本集形式运行 2 个节点集群已就绪。3. 通过 Helm 安装 vmagent 采集指标要采集 Kubernetes 集群的指标需要安装vmagent。它是 VictoriaMetrics 的轻量级指标采集组件负责抓取、relabel标签重写并将指标发送给集群中的vminsert服务。安装命令helm install vmagent vm/victoria-metrics-agent -f https://docs.victoriametrics.com/guides/examples/guide-vmcluster-vmagent-values.yaml注该示例配置文件已随仓库提供可先行阅读guide-vmcluster-vmagent-values.yaml。如果你的环境无法直接访问远程 URL可先将文件下载到本地再以-f ./guide-vmcluster-vmagent-values.yaml引用。关键配置项解析该 Chart 的 values 文件中包含以下核心设置remoteWrite定义 vmagent 发送遥测数据的vminsert端点其值必须与 Step 2 安装输出中的remote_writeURL 完全一致remoteWrite: - url: http://vmcluster-victoria-metrics-cluster-vminsert.default.svc.cluster.local:8480/insert/0/prometheus/metric_relabel_configs定义标签重写规则用于让后续 Grafana 仪表盘正确展示 Kubernetes 指标。示例配置位于 guide-vmcluster-vmagent-values.yaml 的kubernetes-nodes-cadvisor任务中metric_relabel_configs: - action: replace source_labels: [pod] regex: (.) target_label: pod_name replacement: ${1} - action: replace source_labels: [container] regex: (.) target_label: container_name replacement: ${1} - action: replace target_label: name replacement: k8s_stub - action: replace source_labels: [id] regex: ^/system\.slice/(.)\.service$ target_label: systemd_service_name replacement: ${1}这些规则将pod标签复制为pod_name、container标签复制为container_name并从 systemd 的 cgroup id 中提取systemd_service_name为的是让 Kubernetes 监控仪表盘能按 Pod、容器和 systemd 服务维度正确聚合数据。vmagent 的服务发现采集配置示例文件中的scrape_configs展示了 vmagent 如何利用 Kubernetes 服务发现kubernetes_sd_configs抓取各类目标主要采集任务包括kubernetes-apiservers抓取 kube-apiserver 指标role: endpoints仅保留default;kubernetes;https端点kubernetes-nodes抓取节点级指标role: nodekubernetes-nodes-cadvisor抓取 kubelet 暴露的 cAdvisor 容器指标metrics_path: /metrics/cadvisorkubernetes-service-endpoints抓取带有prometheus.io/scrape: true注解的 Service 后端 Pod这正是 Step 2 中给 VictoriaMetrics 三组件打注解的原因kubernetes-pods抓取带prometheus.io/scrape注解的 Podkubernetes-services通过 blackbox exporter 做 HTTP 探活metrics_path: /probe。vmagent 本身也通过static_configs抓取自己的指标localhost:8429用于后续自监控。需要强调的是kubernetes-service-endpoints与kubernetes-pods任务依赖 Pod/Service 上的prometheus.io/*注解这正是 Step 2 在 values 中配置podAnnotations的用意——它们共同构成了服务发现 → 注解驱动抓取的闭环。验证 vmagent 状态kubectl get pods | grep vmagent预期输出vmagent-victoria-metrics-agent-69974b95b4-mhjph 1/1 Running 0 11mPod 处于Running状态即表示采集器正常工作。4. 通过 Helm 安装并接入 Grafana添加 Grafana Helm 仓库helm repo add grafana-community https://grafana-community.github.io/helm-charts helm repo update配置数据源与仪表盘创建grafana-cluster-values.yml配置文件一次性定义数据源、仪表盘 Provider 和三个预置仪表盘cat EOF grafana-cluster-values.yml datasources: datasources.yaml: apiVersion: 1 datasources: - name: victoriametrics type: prometheus orgId: 1 url: http://vmcluster-victoria-metrics-cluster-vmselect.default.svc.cluster.local:8481/select/0/prometheus/ access: proxy isDefault: true updateIntervalSeconds: 10 editable: true dashboardProviders: dashboardproviders.yaml: apiVersion: 1 providers: - name: default orgId: 1 folder: type: file disableDeletion: true editable: true options: path: /var/lib/grafana/dashboards/default dashboards: default: victoriametrics: gnetId: 11176 datasource: victoriametrics vmagent: gnetId: 12683 datasource: victoriametrics kubernetes: gnetId: 14205 datasource: victoriametrics EOF配置内容说明数据源新增名为victoriametrics的 Prometheus 类型数据源URL 必须与 Step 2 中获得的VictoriaMetrics read api端点及端口完全一致vmselect的8481端口并设为默认数据源仪表盘 Provider让 Grafana 从/var/lib/grafana/dashboards/default目录加载仪表盘文件三个预置仪表盘VictoriaMetrics - clustergnetId 11176监控 VictoriaMetrics 集群自身VictoriaMetrics - vmagentgnetId 12683监控 vmagent 的抓取与队列活动Kubernetes cluster Monitoring (via Prometheus)gnetId 14205展示 Kubernetes 集群的整体指标。安装 Grafanahelm install my-grafana grafana-community/grafana -f grafana-cluster-values.yml预期输出NAME: my-grafana LAST DEPLOYED: Wed Feb 4 15:00:28 2026 NAMESPACE: default STATUS: deployed REVISION: 1 DESCRIPTION: Install complete NOTES: 1. Get your admin user password by running: kubectl get secret --namespace default my-grafana -o jsonpath{.data.admin-password} | base64 --decode ; echo 2. The Grafana server can be accessed via port 80 on the following DNS name from within your cluster: my-grafana.default.svc.cluster.local ... 3. Login with the password from step 1 and the username: admin获取管理员密码使用输出中的第一条命令获取admin用户的初始密码kubectl get secret --namespace default my-grafana -o jsonpath{.data.admin-password} | base64 --decode ; echo端口转发访问 Grafana将 Grafana 服务端口转发到本机便于在浏览器中访问export pod_name$(kubectl get pods --namespace default -l app.kubernetes.io/namegrafana,app.kubernetes.io/instancemy-grafana -o jsonpath{.items[0].metadata.name}) kubectl --namespace default port-forward $pod_name 3000[!WARNING] 注意 安装输出中特别提示本示例默认未启用持久化存储Grafana Pod 被终止后数据会丢失。生产环境请务必按 Grafana 官方 Helm 说明启用持久化Persistent Volume并可进一步配置私有 TLS 证书机构。5. 在浏览器中查看监控结果在浏览器中打开http://127.0.0.1:3000/dashboards使用用户名admin和上一步获取的密码登录。你应该能看到三个已安装的仪表盘选择 Kubernetes Cluster Monitoring这是主仪表盘展示整个 Kubernetes 集群的活动情况VictoriaMetrics 集群仪表盘可用于监控遥测数据写入与资源利用率vmagent 也有独立的仪表盘用于监控抓取与队列活动至此从集群版落库 → vmagent 采集 → Grafana 可视化的完整链路已经打通。6. 总结与后续扩展本次部署完成了三件事为你的 Kubernetes 集群搭建了一套时序数据库VictoriaMetrics 集群版从所有运行中的 Pod、节点和服务采集指标并存入 VictoriaMetrics 数据库使用 Grafana 仪表盘可视化 Kubernetes 集群的资源使用情况。后续可以进一步完善的方面深入了解集群版阅读仓库内的 Cluster-VictoriaMetrics.md掌握多租户、复制replication、自动发现 vmstorage 节点等高级特性数据迁移使用 vmctl 将现有 Prometheus 等系统的历史指标迁移进 VictoriaMetrics告警配置参考仓库内的 vmalert-datasource-managed-alerts-grafana 指南为监控数据配置告警规则Grafana 生产化为 Grafana 启用持久化存储并按需配置私有 TLS 证书机构自监控闭环本方案通过prometheus.io/*注解让 vmagent 反过来抓取 VictoriaMetrics 三组件自身的指标从而实现对监控系统本身的监控这也是生产环境的重要实践。附录本指南涉及的仓库资源本指南主体docs/guides/k8s-monitoring-via-vm-clustervmagent 示例配置docs/guides/examples/guide-vmcluster-vmagent-values.yaml集群版架构文档docs/victoriametrics/Cluster-VictoriaMetrics.mdvmagent 详细文档docs/victoriametrics/vmagent.md集群组件端口在路由测试中的印证app/vmauth/target_url_test.go【免费下载链接】VictoriaMetricsVictoriaMetrics: fast, cost-effective monitoring solution and time series database项目地址: https://gitcode.com/GitHub_Trending/vi/VictoriaMetrics创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考