使用 VictoriaMetrics Cluster 与 Helm 搭建 Kubernetes 集群监控方案
2026/9/14 14:26:20 网站建设 项目流程

使用 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.34+
  • Helm 4.1+
  • kubectl 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:8481vminsert: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_namecontainer标签复制为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: node);
  • kubernetes-nodes-cadvisor:抓取 kubelet 暴露的 cAdvisor 容器指标(metrics_path: /metrics/cadvisor);
  • kubernetes-service-endpoints:抓取带有prometheus.io/scrape: "true"注解的 Service 后端 Pod(这正是 Step 2 中给 VictoriaMetrics 三组件打注解的原因);
  • kubernetes-pods:抓取带prometheus.io/scrape注解的 Pod;
  • kubernetes-services:通过 blackbox exporter 做 HTTP 探活(metrics_path: /probe)。

vmagent 本身也通过static_configs抓取自己的指标(localhost:8429),用于后续自监控。需要强调的是,kubernetes-service-endpointskubernetes-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 11m

Pod 处于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端点及端口完全一致(vmselect8481端口),并设为默认数据源;
  • 仪表盘 Provider:让 Grafana 从/var/lib/grafana/dashboards/default目录加载仪表盘文件;
  • 三个预置仪表盘
    • VictoriaMetrics - cluster(gnetId 11176):监控 VictoriaMetrics 集群自身;
    • VictoriaMetrics - vmagent(gnetId 12683):监控 vmagent 的抓取与队列活动;
    • Kubernetes cluster Monitoring (via Prometheus)(gnetId 14205):展示 Kubernetes 集群的整体指标。

安装 Grafana

helm 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/name=grafana,app.kubernetes.io/instance=my-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-cluster
  • vmagent 示例配置:docs/guides/examples/guide-vmcluster-vmagent-values.yaml
  • 集群版架构文档:docs/victoriametrics/Cluster-VictoriaMetrics.md
  • vmagent 详细文档: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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询