VMSingle
represents database for storing metrics.
The VMSingle
CRD declaratively defines a single-node VM
installation to run in a Kubernetes cluster.
For each VMSingle
resource, the Operator deploys a properly configured Deployment
in the same namespace.
The VMSingle Pod
s are configured to mount an empty dir or PersistentVolumeClaimSpec
for storing data.
Deployment update strategy set to recreate.
No more than one replica allowed.
For each VMSingle
resource, the Operator adds Service
and VMServiceScrape
in the same namespace prefixed with name from VMSingle.metadata.name
.
Specification #
You can see the full actual specification of the VMSingle
resource in the API docs -> VMSingle.
If you can’t find necessary field in the specification of the custom resource, see Extra arguments section.
Also, you can check out the examples section.
High availability #
VMSingle
doesn’t support high availability by default, for such purpose
use VMCluster
instead or duplicate the setup.
Version management #
To set VMSingle
version add spec.image.tag
name from releases
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMSingle
metadata:
name: example-vmsingle
spec:
image:
repository: victoriametrics/victoria-metrics
tag: v1.93.4
pullPolicy: Always
# ...
Also, you can specify imagePullSecrets
if you are pulling images from private repo:
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMSingle
metadata:
name: example-vmsingle
spec:
image:
repository: victoriametrics/victoria-metrics
tag: v1.93.4
pullPolicy: Always
imagePullSecrets:
- name: my-repo-secret
# ...
Resource management #
You can specify resources for each VMSingle
resource in the spec
section of the VMSingle
CRD.
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMSingle
metadata:
name: vmsingle-resources-example
spec:
# ...
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
# ...
If these parameters are not specified, then,
by default all VMSingle
pods have resource requests and limits from the default values of the following operator parameters:
VM_VMSINGLEDEFAULT_RESOURCE_LIMIT_MEM
- default memory limit forVMSingle
pods,VM_VMSINGLEDEFAULT_RESOURCE_LIMIT_CPU
- default memory limit forVMSingle
pods,VM_VMSINGLEDEFAULT_RESOURCE_REQUEST_MEM
- default memory limit forVMSingle
pods,VM_VMSINGLEDEFAULT_RESOURCE_REQUEST_CPU
- default memory limit forVMSingle
pods.
These default parameters will be used if:
VM_VMSINGLEDEFAULT_USEDEFAULTRESOURCES
is set totrue
(default value),VMSingle
CR doesn’t haveresources
field inspec
section.
Field resources
in VMSingle
spec have higher priority than operator parameters.
If you set VM_VMSINGLEDEFAULT_USEDEFAULTRESOURCES
to false
and don’t specify resources
in VMSingle
CRD,
then VMSingle
pods will be created without resource requests and limits.
Also, you can specify requests without limits - in this case default values for limits will not be used.
Enterprise features #
VMSingle supports features from VictoriaMetrics Enterprise:
For using Enterprise version of vmsingle
you need to change version of VMSingle
to version with -enterprise
suffix using Version management.
All the enterprise apps require -eula
command-line flag to be passed to them.
This flag acknowledges that your usage fits one of the cases listed on this page.
So you can use extraArgs for passing this flag to VMSingle
.
Downsampling #
After that you can pass Downsampling
flag to VMSingle
with extraArgs too.
Here are complete example for Downsampling:
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMSingle
metadata:
name: vmsingle-ent-example
spec:
# enabling enterprise features
image:
# enterprise version of vmsingle
tag: v1.93.5-enterprise
extraArgs:
# should be true and means that you have the legal right to run a vmsingle enterprise
# that can either be a signed contract or an email with confirmation to run the service in a trial period
# https://victoriametrics.com/legal/esa/
eula: true
# using enterprise features: Downsampling
# more details about downsampling you can read on https://docs.victoriametrics.com/#downsampling
downsampling.period: 30d:5m,180d:1h,1y:6h,2y:1d
# ...other fields...
Retention filters #
The same method is used to enable retention filters - here are complete example for Retention filters.
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMSingle
metadata:
name: vmsingle-ent-example
spec:
# enabling enterprise features
image:
# enterprise version of vmsingle
tag: v1.93.5-enterprise
extraArgs:
# should be true and means that you have the legal right to run a vmsingle enterprise
# that can either be a signed contract or an email with confirmation to run the service in a trial period
# https://victoriametrics.com/legal/esa/
eula: true
# using enterprise features: Retention filters
# more details about retention filters you can read on https://docs.victoriametrics.com/#retention-filters
retentionFilter: '{team="juniors"}:3d,{env=~"dev|staging"}:30d'
# ...other fields...
Backup automation #
You can check vmbackupmanager documentation for backup automation. It contains a description of the service and its features. This section covers vmbackumanager integration in vmoperator.
VMSingle
has built-in backup configuration, it uses vmbackupmanager
- proprietary tool for backups.
It supports incremental backups (hourly, daily, weekly, monthly) with popular object storages (aws s3, google cloud storage).
Here is a complete example for backup configuration:
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMSingle
metadata:
name: example-vmsingle
spec:
vmBackup:
# should be true and means that you have the legal right to run a vmsingle enterprise
# that can either be a signed contract or an email with confirmation to run the service in a trial period
# https://victoriametrics.com/legal/esa/
acceptEULA: true
# using enterprise features: Backup automation
# more details about backup automation you can read on https://docs.victoriametrics.com/vmbackupmanager/
destination: "s3://your_bucket/folder"
credentialsSecret:
name: remote-storage-keys
key: credentials
# ...other fields...
---
apiVersion: v1
kind: Secret
metadata:
name: remote-storage-keys
type: Opaque
stringData:
credentials: |-
[default]
aws_access_key_id = your_access_key_id
aws_secret_access_key = your_secret_access_key
You can read more about backup configuration options and mechanics here
Possible configuration options for backup crd can be found at link
Restoring backups #
There are several ways to restore with vmrestore or vmbackupmanager.
Manually mounting disk #
You have to stop VMSingle
by scaling it replicas to zero and manually restore data to the database directory.
Steps:
- Edit
VMSingle
CRD, setreplicaCount: 0
- Wait until database stops
- SSH to some server, where you can mount
VMSingle
disk and mount it manually - Restore files with
vmrestore
- Umount disk
- Edit
VMSingle
CRD, setreplicaCount: 1
- Wait database start
Using VMRestore init container #
- Add init container with
vmrestore
command toVMSingle
CRD, example:apiVersion: operator.victoriametrics.com/v1beta1 kind: VMSingle metadata: name: example-vmsingle spec: vmBackup: # should be true and means that you have the legal right to run a vmsingle enterprise # that can either be a signed contract or an email with confirmation to run the service in a trial period # https://victoriametrics.com/legal/esa/ acceptEULA: true # using enterprise features: Backup automation # more details about backup automation you can read https://docs.victoriametrics.com/vmbackupmanager/ destination: "s3://your_bucket/folder" credentialsSecret: name: remote-storage-keys key: credentials extraArgs: runOnStart: "true" initContainers: - name: vmrestore image: victoriametrics/vmrestore:latest volumeMounts: - mountPath: /victoria-metrics-data name: data - mountPath: /etc/vm/creds name: secret-remote-storage-keys readOnly: true args: - -storageDataPath=/victoria-metrics-data - -src=s3://your_bucket/folder/latest - -credsFilePath=/etc/vm/creds/credentials # ...other fields...
- Apply it, and db will be restored from S3
- Remove
initContainers
and apply CRD.
Note that using VMRestore
will require adjusting src
for each pod because restore will be handled per-pod.
Using VMBackupmanager init container #
Using VMBackupmanager restore in Kubernetes environment is described here.
Advantages of using VMBackupmanager
include:
- Automatic adjustment of
src
for each pod when backup is requested - Graceful handling of case when no restore is required -
VMBackupmanager
will exit with successful status code and won’t prevent pod from starting
Examples #
kind: VMSingle
metadata:
name: vmsingle-example
spec:
retentionPeriod: "12"
removePvcAfterDelete: true
storage:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Gi
extraArgs:
dedup.minScrapeInterval: 60s
resources:
requests:
memory: 500Mi
cpu: 500m
limits:
memory: 10Gi
cpu: 5