You can find the specification for the custom resources on API Docs.
If you can't find necessary field in the specification of custom resource, you can use
extraArgs field for passing additional arguments to the application.
extraArgs is supported for the following custom resources:
Supported flags for each application can be found the in the corresponding documentation:
apiVersion: operator.victoriametrics.com/v1beta1 kind: VMSingle metadata: name: vmsingle-example-exrtaargs spec: retentionPeriod: "1" extraArgs: dedup.minScrapeInterval: 60s # ...
Flag can be replaced with environment variable, it's useful for retrieving value from secret. You can use
extraEnvs field for passing additional arguments to the application.
kind: VMSingle metadata: name: vmsingle-example--exrtaenvs spec: retentionPeriod: "1" extraEnvs: - name: DEDUP_MINSCRAPEINTERVAL valueFrom: secretKeyRef: name: vm-secret key: dedup
This feature really useful for using with
-envflag.enable command-line argument.
Page for every custom resource contains examples section:
In addition, you can find examples of the custom resources for VIctoriMetrics operator in the examples directory of operator repository.
Every custom resource with deployable application has a fields for specifying version (docker image) of component:
VictoriaMetrics operator support high availability for each component of the monitoring stack:
In addition, these CRD support common features, that can be used to increase high availability - resources above have the following fields:
affinity- to schedule pods on different nodes (affinity and anti-affinity in kubernetes docs),
tolerations- to schedule pods on nodes with taints (taints and tolerations in kubernetes docs),
nodeSelector- to schedule pods on nodes with specific labels (node selector in kubernetes docs),
topologySpreadConstraints- to schedule pods on different nodes in the same topology (topology spread constraints in kubernetes docs).
See details about these fields in the Specification.
Operator supports following Enterprise features for VictoriaMetrics components:
More information about enterprise features you can read on VictoriaMetrics Enterprise page.
VictoriaMetrics applications, like many other applications with configuration file deployed at Kubernetes, uses
Secrets for configuration files. Usually, it's out of application scope to watch for configuration on-disk changes. Applications reload their configuration by a signal from a user or some other tool, that knows how to watch for updates. At Kubernetes, the most popular design for this case is a sidecar container, that watches for configuration file changes and sends an HTTP request to the application.
Secret that mounted at
Pod holds a copy of its content. Kubernetes component
kubelet is responsible for content synchronization between an object at Kubernetes API and a file served on disk. It's not efficient to sync its content immediately, and
kubelet eventually synchronizes it. There is a configuration option, that controls this period.
That's why, applications managed by operator don't receive changes immediately. It usually takes 1-2 min, before content will be updated.
It may trigger errors when an application was deleted, but
VMAgent still tries to scrape it.
The naive solution for this case decrease the synchronization period. But it configures globally and may be hard for operator users.
That's why operator uses a few hacks.
ConfigMap updates, operator changes annotation with a time of
Configmap content update. It triggers
ConfigMap's content synchronization by kubelet immediately. It's the case for
VMAlert, it uses
ConfigMap as a configuration source.
Secret it doesn't work. And operator offers its implementation for side-car container. It can be configured with env variable for operator:
- name: VM_USECUSTOMCONFIGRELOADER value: "true"
If it's defined, operator uses own config-reloader instead of prometheus-config-reload.
It watches corresponding
Secret for changes with Kubernetes API watch call and writes content into emptyDir. This emptyDir shared with the application. In case of content changes,
config-reloader sends HTTP requests to the application. It greatly reduces the time for configuration synchronization.