
使用 Victoria Metrics Operator 管理 VM 集群
作者 |阳明
来源 | k8s技术圈(ID:kube100)
Operator 我们知道是 Kubernetes 的一大杀器,可以大大简化应用的安装、配置和管理,同样对于 VictoriaMetrics 官方也开发了一个对应的 Operator 来进行管理 - vm-operator,它的设计和实现灵感来自 prometheus-operator,它是管理应用程序监控配置的绝佳工具。
vm-operator 定义了如下一些 CRD:
- VMCluster:定义 VM 集群
- VMAgent:定义 vmagent 实例
- VMServiceScrape:定义从 Service 支持的 Pod 中抓取指标配置
- VMPodScrape:定义从 Pod 中抓取指标配置
- VMRule:定义报警和记录规则
- VMProbe:使用 blackbox exporter 为目标定义探测配置
此外该 Operator 默认还可以识别 prometheus-operator 中的 ServiceMonitor、PodMonitor、PrometheusRule 和 Probe 对象,还允许你使用 CRD 对象来管理 Kubernetes 集群内的 VM 应用。
安装
vm-operator 提供了 Helm Charts 包,所以可以使用 Helm 来进行一键安装:
根据自己的需要定制 values 值,默认的 values.yaml 可以通过下面的命令获得:
我们这里只对下面的内容做了修改:
然后使用下面的命令即可一键安装 vm-operator:
安装完成后可以查看 vm-operator 的状态来验证是否安装成功:
部署 VM 集群
Operator 安装完成后会包含如下所示的一些 CRD:
比如现在我们要来部署 VM,如果只是想要单节点模式则可以直接使用 VMSingle 对象,如果要部署一套 VM 的集群则可以直接使用 VMCluster 来定义一个对象即可,完全不需要我们去手动创建各个组件,Operator 会根据我们的定义去帮我们拉起一套集群起来。
比如这里我们定义一个如下所示的 VMCluster 对象:
这里我们通过 spec.retentionPeriod 指定了数据保留的时长为 1 周,replicaCount 用来指定各个组件的副本数为 2,通过 storage.volumeClaimTemplate 指定了数据持久化的 PVC 模板,整个对象可配置的属性我们可以通过 kubectl explain 来获取:
同样要想获取组件可以定义的属性也可以通过该方式来获取,比如查看 vmstorage 对象可以配置的属性:
直接应用上面定义的对象:
应用后 vm-operator 会 watch 到我们创建了该 CRD 对象,然后会根据我们的定义去自动创建对应的 VM 集群,也就是前面提到的几个组件服务:
我们只通过定义简单的 VMCluster 对象就可以来管理 VM 集群了,是不是非常方便,特别是当你组件副本数量非常多的时候不需要我们去手动配置 -storageNode 参数了。
现在 VM 集群安装成功了,但是现在还没有任何数据,所以还需要去配置监控指标的抓取,这里我们可以直接去创建一个 VMAgent 对象即可,创建一个如下所示的对象:
同样要获取 VMAgent 的所有可配置的属性可以通过 kubectl explain VMAgent.spec 来获取,这里最主要的配置就是通过 remoteWrite.url 来指定远程写入的 URL 地址,也就是 vminsert 组件的服务地址,其他几个属性可以用来对要抓取的指标进行过滤。
直接应用上面的 VMAgent 对象即可开始抓取监控数据:
创建后 vm-operator 会根据对应的描述创建一个对应的 vmagent 实例:
可以看到 vmagent 有两个容器,一个是 vmagent 应用容器,另外一个是用于挂载 Secret 对象的 config-reloader 容器,它会 watch 配置的变化,并发送信号为 vmagent 重新加载配置,该 Secret 对象中就是定义的 vmagent 抓取指标的配置内容。
我们可以运行以下命令使 vmagent 的端口可以从本地机器上访问。
我们可以在浏览器中访问 http://127.0.0.1:8429/targets 来检查 vmagent 采集的集群指标:vmagent 会通过 Kubernetes 服务发现去获取需要抓取的目标,此服务发现由 vm-operator 控制。
验证 VM 集群
接下来我们安装 Grafana 来验证 VM 集群,这里为了简单我们就直接使用 Helm Chart 进行安装:
我们可以在 values 中提前定义数据源和内置一些 dashboard,如下所示:
安装完成后可以使用上面提示的命令在本地暴露 Grafana 服务:
登录的用户名为 admin,密码可以通过下面的命令获取:
我们可以查看下 victoriametrics cluster 的 dashboard:正常可以看到如下所示的页面:
这是因为默认情况下 VMAgent 会采集 VM 集群相关组件的指标,包括 vmagent 本身的,所以我们可以正常看到 VM 集群的 Dashboard,但是没有采集其他的指标,比如 node-exporter,我们可以在 Grafana 中导入 16098 这个 dashboard:
这个时候我们可以通过 VMNodeScrape 这个 CRD 对象来进行定义,VMNodeScrape 对象可以用来自动发现 Kubernetes 节点,创建如下所示的资源对象来采集 node-exporter 指标:
直接应用上面的对象即可:
创建后 vmagent 就会自动去识别该对象去对 node-exporter 进行抓取了:这个时候再去查看 node-exporter 的 dashboard 就正常了:
此外还可以通过 VMServiceScrape 去定义要抓取的 Service 服务(Endpoints),它基于选择器为 vmagent 生成抓取配置,如果想要抓取没有定义 Service 的 Pod 的指标,则可以通过 VMPodScrape 来进行定义,同样还有报警相关的也都有相应的 CRD 来进行管理。vm-operator 大大降低了我们对 VM 集群的管理,非常推荐使用。
