云原生家庭网络(十五):使用 victoria-metrics-k8s-stack 打造监控系统
「收藏时间:2026-09-11 03:51」 【来源:https://zhuanlan.zhihu.com/p/700228826】
📄 原文内容
云原生家庭网络监控系统
如何打造一个云原生家庭网络的监控系统?该如何选型?毫无疑问,在云原生领域,Prometheus 生态已成为监控标配,通常都会部署 Prometheus 来采集监控数据,配合 Grafana 来展示监控面板。
但是,Prometheus 的监控数据会占用很大的存储空间,采集数据时也会占用很大的内存,而路由器的计算资源往往都比较小,可不能像服务器那样奢侈。
好在 VictoriaMetrics 提供了很好的解决方案,兼容 Prometheus 的同时,有更强的性能,占用更小的存储空间和内存,在路由器上替代 Prometheus 再合适不过了,所以,本文将基于 VictoriaMetrics 在路由器上部署监控系统。
victoria-metrics-k8s-stack
Prometheus 社区提供了 kube-prometheus-stack 这个 helm chart 来部署 Prometheus 及其生态内相关的产品,相应的,VictoriaMetrics 社区提供了对等的 chart: victoria-metrics-k8s-stack。
实际上路由器上的监控需求相对监控,也可以直接自己手工写 VictoriaMetrics + Grafana 的部署 YAML,但这个不利于后续的升级,升级不单单是升级容器镜像,相应的 YAML 和应用配置都可能改动,所以如果是要打算后续持续升级,享受最新的功能,建议是用社区的 victoria-metrics-k8s-stack 这个 helm chart 安装。
部署 EnvoyGateway
由于使用社区的 chart 部署,但 chart 中不直接指定 Grafana 使用 HostNetwork 部署,那我们可以使用
使用 victoria-metrics-k8s-stack 部署监控系统
目录结构
monitoring
├── dashboards
│ ├── kustomization.yaml
│ └── router.json
├── kustomization.yaml
├── namespace.yaml
├── values.yaml
└── vm-hostpath-pv.yaml
配置监控面板
dashboards 目录的作用就是配置我们需要自定义的 Grafana 监控面板,router.json 就是监控面板的定义,通过 kustomize 将 json 文件存储到 ConfigMap 中,以下是 dashboards/kustomization.yaml 的定义:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
generatorOptions:
disableNameSuffixHash: true
labels:
grafana_dashboard: "1"
configMapGenerator:
- files:
- router.json
name: router
要点解析:
- 通过
configMapGenerator引用router.json,将Grafana监控面板保存到名为router的ConfigMap中。后续有需要其它的自定义面板,也可以直接在这里增加。 - 通过
generatorOptions为自动生成的ConfigMap加上grafana_dashboard: "1"的 label,这个很关键,用作Grafana的 Sidecar 对监控面板的自动发现,以便让Grafana能够展示我们自定义的面板。
通常使用 node-exporter 提供的监控指标来捏监控面板,社区有开源的 Node Exporter Full 这样的监控面板,但太多了,一般我们可以根据自己的重点关注内容,自己来捏一个适合自己的面板,这里分享下我自己捏的面板(router.json): https://github.com/imroc/grafana-dashboards/blob/main/prometheus/router/router.json
展示效果:




配置主要的 kustomization.yaml
下面我们来配主要的 kustomization.yaml:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: monitoring
resources:
- namespace.yaml
- vm-hostpath-pv.yaml
- dashboards
helmCharts:
- repo: https://victoriametrics.github.io/helm-charts
name: victoria-metrics-k8s-stack
releaseName: monitoring
namespace: monitoring
valuesFile: values.yaml
要点解析:
namespace指定为monitoring,因为监控系统涉及多个组件,单独放到一个命名空间里,方便管理。resources引用namespace.yaml,用于创建monitoring命名空间。resources引用vm-hostpath-pv.yaml,用于为VictoriaMetrics挂载hostPath的PV(因为 chart 里没有提供直接定义 volume 类型的选项,只有手动定一个hostPath类型的PV来被PVC绑定)。resources引用dashboards目录,相当于将前面配置的监控面板加进来。helmCharts引用victoria-metrics-k8s-stack这个 chart,并提供values.yaml来自定义配置。
配置 namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: monitoring
配置 values.yaml
defaultRules:
create: false
defaultDashboardsEnabled: false
experimentalDashboardsEnabled: false
coreDns:
enabled: false
alertmanager:
enabled: false
vmalert:
enabled: false
kubeApiServer:
enabled: false
kubeControllerManager:
enabled: false
kubeEtcd:
enabled: false
kubeScheduler:
enabled: false
victoria-metrics-operator:
createCRD: true
vmagent:
enabled: true
spec:
scrapeInterval: 10s
externalLabels: null
vmsingle:
enabled: true
spec:
resources:
limits:
cpu: 1200m
memory: 1500Mi
storage:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: ""
volumeMode: Filesystem
volumeName: vm-storage
grafana:
service:
type: LoadBalancer
port: 3000
#grafana.ini:
# users:
# home_page: /d/VCx4Fck4k/e8b7af-e794b1-e599a8-e79b91-e68ea7-e5a4a7-e79b98
adminPassword: "123456"
adminUser: "admin"
defaultDashboardsTimezone: "Asia/Shanghai"
auth:
anonymous:
enabled: true
org_name: Main Org.
org_role: Viewer
hide_version: false
testFramework:
enabled: false
要点解析:
- 通过很多
enabled: false禁用掉很多不需要的组件和功能。 - 启用
vmagent用于采集监控配置,配置scrapeInterval可调整采集时间间隔。 - 启用
vmsingle用于存储监控数据,storage配置PVC的定义,指定volumeName为vm-storage,与后续我们手动定义的hostPath类型的PV同名,以便让PVC能够自动绑定该PV。 grafana的service.type指定为LoadBalancer,k3s 内置了servicelb作为LoadBalancer类型Service的实现,会自动为LoadBalancer类型的Service在集群中每个节点都开一个Service中声明的端口。这里端口指定为3000,即访问路由器的3000端口就能访问到Grafana面板。grafana的adminUser和adminPassword分别指定管理员的账号密码,用于登录Grafana。grafana的defaultDashboardsTimezone指定Grafana页面显示时所用的时区,国内我们使用Asia/Shanghai。- 我们可能希望进入
Grafana时默认显示我们自定义的监控面板,可以在进入自定义面板页面后,复制其路径,然后取消上面的grafana.ini的注释,替换home_page的值为复制的路径,这样后续我们进入Grafana页面就默认显示自定义的监控面板了。
配置 vm-hostpath-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: vm-storage
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 10Gi
hostPath:
path: /data/victoria
type: DirectoryOrCreate
persistentVolumeReclaimPolicy: Retain
storageClassName: ""
volumeMode: Filesystem
🔗 阅读原文 | 🕐 剪藏于 2026-09-11 03:51 | 🧩 解析方式:知乎