Installing VictoriaMetrics on Kubernetes with k3s
Learn how to install and configure VictoriaMetrics on Kubernetes using k3s, and integrate it with Grafana for enhanced monitoring capabilities. This guide walks you through the process step-by-step.
Installing VictoriaMetrics on Kubernetes with k3s
The documentation for VictoriaMetrics is a bit of a mess, so here’s what worked for me.
Install the Kubernetes Operator
A Kubernetes Operator (usually):
- Adds a bunch of Kubernetes CRDs, so that you can define resources in YAML.
- Adds a controller that monitors those CRDs and either translates them into standard Kubernetes resources or applies them directly.
From VictoriaMetrics Operator Quick Start:
VM_VERSION=`basename $(curl -fs -o/dev/null -w %{redirect_url} https://github.com/VictoriaMetrics/operator/releases/latest)`
wget https://github.com/VictoriaMetrics/operator/releases/download/$VM_VERSION/bundle_crd.zip
unzip bundle_crd.zip
kubectl apply -f release/crds
kubectl apply -f release/operator
Verify the installation:
kubectl --namespace monitoring-system get all
Example output:
NAME READY STATUS RESTARTS AGE
pod/vm-operator-55f666998d-rgn5v 1/1 Running 0 6m11s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/vm-operator 1/1 1 1 6m11s
NAME DESIRED CURRENT READY AGE
replicaset.apps/vm-operator-55f666998d 1 1 1 6m11s
Define a VMSingle
Create a VMSingle
resource. This configuration causes the operator to create a bunch of other resources, such as a deployment, a replicaset, a service, and a pod:
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMSingle
metadata:
name: vm-database
namespace: monitoring-system
spec:
retentionPeriod: 12w
Check the status of the resources:
kubectl --namespace monitoring-system get all
Example output:
NAME READY STATUS RESTARTS AGE
pod/vm-operator-55f666998d-rgn5v 1/1 Running 0 6m11s
pod/vmsingle-vm-database-8447df86cc-xgt55 0/1 ContainerCreating 0 15s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/vmsingle-vm-database ClusterIP 10.43.31.176 <none> 8429/TCP 15s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/vm-operator 1/1 1 1 6m11s
deployment.apps/vmsingle-vm-database 0/1 1 0 15s
NAME DESIRED CURRENT READY AGE
replicaset.apps/vm-operator-55f666998d 1 1 1 6m11s
replicaset.apps/vmsingle-vm-database-8447df86cc 1 1 0 15s
If the pod crashes, inspect the logs:
kubectl --namespace monitoring-system describe pod vmsingle-vm-database-8447df86cc-xgt55
kubectl --namespace monitoring-system logs vmsingle-vm-database-8447df86cc-xgt55
Example error:
invalid value "" for flag -retentionPeriod: duration cannot be empty
Update the VMSingle
configuration with a valid retention period:
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMSingle
metadata:
name: vm-database
namespace: monitoring-system
spec:
retentionPeriod: 12w
Add Persistent Storage
Add persistent storage to the VMSingle
configuration:
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMSingle
metadata:
name: vm-database
namespace: monitoring-system
spec:
retentionPeriod: 12w
storage:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: longhorn
Accessing the Service
Expose the service and access it via port-forwarding:
kubectl --namespace monitoring-system port-forward --address 0.0.0.0 service/vmsingle-vm-database 8429:8429
Visit http://localhost:8429
to see the VictoriaMetrics home page.
Adding VictoriaMetrics to Grafana
In Grafana, go to Configuration / Data Sources and add a Prometheus data source. Use the following URL:
http://vmsingle-vm-database.monitoring-system.svc.cluster.local:8429
Save and test the configuration. Initially, there may be no data. Enable self-scraping by updating the VMSingle
configuration:
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMSingle
metadata:
name: vm-database
namespace: monitoring-system
spec:
retentionPeriod: 90d
extraArgs:
selfScrapeInterval: 10s
storage:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: longhorn
This enables Grafana’s metrics browser and allows you to explore metrics.
By following these steps, you can successfully install and configure VictoriaMetrics on Kubernetes using k3s and integrate it with Grafana for effective monitoring.