Version ArtifactHub License Slack X Reddit

A Helm chart for VictoriaMetrics vmestimator

Prerequisites #

Before installing this chart, ensure your environment meets the following requirements:

  • Kubernetes cluster - A running Kubernetes cluster with sufficient resources
  • Helm - Helm package manager installed and configured

Additional requirements depend on your configuration:

  • Persistent storage - Required if you enable persistent volumes for data retention (enabled by default)
  • kubectl - Needed for cluster management and troubleshooting

For installation instructions, refer to the official documentation:

Quick start #

Install the chart in single-node mode:

      helm install vmestimator vm/victoria-metrics-estimator
    

Configure vmagent to replicate remote write traffic to:

      http://vmestimator-single-vmestimator:8490/cardinality/api/v1/write
    

For cluster mode:

      helm install vmestimator vm/victoria-metrics-estimator --set mode=cluster
    

Send remote write traffic to the vmestimator-storage-vmestimator-insert service and scrape cardinality estimates from the vmestimator-select-vmestimator service. See the vmestimator documentation for architecture and vmagent configuration details.

How to install #

Access a Kubernetes cluster.

Setup chart repository (can be omitted for OCI repositories) #

Add a chart helm repository with follow commands:

      helm repo add vm https://victoriametrics.github.io/helm-charts/

helm repo update

    

List versions of vm/victoria-metrics-estimator chart available to installation:

      helm search repo vm/victoria-metrics-estimator -l

    

Install victoria-metrics-estimator chart #

Export default values of victoria-metrics-estimator chart to file values.yaml:

  • For HTTPS repository

          helm show values vm/victoria-metrics-estimator > values.yaml
    
        
  • For OCI repository

          helm show values oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-estimator > values.yaml
    
        

Change the values according to the need of the environment in values.yaml file.

Consider setting .Values.nameOverride to a small value like vme to avoid hitting resource name limits of 63 characters

Test the installation with command:

  • For HTTPS repository

          helm install vme vm/victoria-metrics-estimator -f values.yaml -n NAMESPACE --debug --dry-run
    
        
  • For OCI repository

          helm install vme oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-estimator -f values.yaml -n NAMESPACE --debug --dry-run
    
        

Install chart with command:

  • For HTTPS repository

          helm install vme vm/victoria-metrics-estimator -f values.yaml -n NAMESPACE
    
        
  • For OCI repository

          helm install vme oci://ghcr.io/victoriametrics/helm-charts/victoria-metrics-estimator -f values.yaml -n NAMESPACE
    
        

Get the pods lists by running this commands:

      kubectl get pods -A | grep 'vme'

    

Get the application by running this command:

      helm list -f vme -n NAMESPACE

    

See the history of versions of vme application with command.

      helm history vme -n NAMESPACE

    

How to uninstall #

Remove application with command.

      helm uninstall vme -n NAMESPACE

    

Parameters #

KeyDescription
config.data:
    streams:
        - interval: 5m
        - group_by:
            - job
          interval: 5m
        - group_by:
            - __name__
          interval: 5m
(object)

vmestimator stream configuration

config.existingConfigMap: ""
(string)

Existing ConfigMap containing the vmestimator configuration

config.key: streams.yaml
(string)

Key in the ConfigMap containing the vmestimator configuration

extraObjects: []
(list)

Additional Kubernetes resources rendered with tpl

fullnameOverride: ""
(string)

Override fully qualified chart name

global.cluster.dnsDomain: cluster.local
(string)

Kubernetes cluster DNS suffix

global.compatibility.openshift.adaptSecurityContext: auto
(string)

OpenShift security context compatibility mode

global.extraLabels: {}
(object)

Labels added to all resources

global.image.registry: ""
(string)

Image registry shared by all components

global.imagePullSecrets: []
(list)

Image pull secrets shared by all components

image.pullPolicy: IfNotPresent
(string)

Image pull policy

image.registry: docker.io
(string)

Image registry

image.repository: victoriametrics/vmestimator
(string)

Image repository

image.tag: ""
(string)

Image tag; defaults to Chart.appVersion

imagePullSecrets: []
(list)

Image pull secrets

ingress.annotations: {}
(object)

Ingress annotations

ingress.className: ""
(string)

Ingress class name

ingress.enabled: false
(bool)

Enable ingress for the public single/select service

ingress.hosts[0].host: vmestimator.local
(string)
ingress.hosts[0].paths[0].path: /
(string)
ingress.hosts[0].paths[0].pathType: Prefix
(string)
ingress.tls: []
(list)
mode: single
(string)

Deployment mode: single or cluster

nameOverride: ""
(string)

Override chart name

networkPolicy.annotations: {}
(object)

Additional annotations

networkPolicy.egress: []
(list)

Egress rules

networkPolicy.enabled: false
(bool)

Enable NetworkPolicy

networkPolicy.ingress: []
(list)

Ingress rules

networkPolicy.labels: {}
(object)

Additional labels

podSecurityContext.enabled: true
(bool)
podSecurityContext.fsGroup: 2000
(int)
podSecurityContext.runAsGroup: 1000
(int)
podSecurityContext.runAsNonRoot: true
(bool)
podSecurityContext.runAsUser: 1000
(int)
probe.liveness.httpGet: {}
(object)
probe.liveness.initialDelaySeconds: 30
(int)
probe.liveness.periodSeconds: 30
(int)
probe.readiness.httpGet: {}
(object)
probe.readiness.initialDelaySeconds: 5
(int)
probe.readiness.periodSeconds: 5
(int)
securityContext.allowPrivilegeEscalation: false
(bool)
securityContext.capabilities.drop[0]: ALL
(string)
securityContext.enabled: true
(bool)
securityContext.readOnlyRootFilesystem: true
(bool)
select.affinity: {}
(object)
select.command: []
(list)
select.env: []
(list)
select.envFrom: []
(list)
select.extraArgs:
    envflag.enable: true
    envflag.prefix: VM_
    loggerFormat: json
(object)

Additional command-line arguments

select.extraVolumeMounts: []
(list)
select.extraVolumes: []
(list)
select.nodeSelector: {}
(object)
select.podAnnotations: {}
(object)
select.podDisruptionBudget.enabled: false
(bool)
select.podDisruptionBudget.maxUnavailable: 0
(int)
select.podDisruptionBudget.minAvailable: 0
(int)
select.podDisruptionBudget.unhealthyPodEvictionPolicy: null
(string)
select.podLabels: {}
(object)
select.replicaCount: 2
(int)

Number of selector nodes in cluster mode

select.resources: {}
(object)
select.service.annotations: {}
(object)
select.service.labels: {}
(object)
select.service.port: 8490
(int)
select.service.type: ClusterIP
(string)
select.tolerations: []
(list)
select.topologySpreadConstraints: []
(list)
serviceAccount.annotations: {}
(object)

Service account annotations

serviceAccount.automountToken: false
(bool)

Mount the service account token

serviceAccount.create: false
(bool)

Create a service account

serviceAccount.name: ""
(string)

Service account name

serviceMonitor.annotations: {}
(object)

Additional annotations

serviceMonitor.enabled: false
(bool)

Create a VMServiceScrape for the public single/select service

serviceMonitor.extraLabels: {}
(object)

Additional labels

serviceMonitor.interval: ""
(string)

Scrape interval

serviceMonitor.metricRelabelings: []
(list)

Metric relabeling rules

single.affinity: {}
(object)

Pod affinity

single.command: []
(list)

Override the container command

single.env: []
(list)

Additional environment variables

single.envFrom: []
(list)

Additional environment sources

single.extraArgs:
    envflag.enable: true
    envflag.prefix: VM_
    loggerFormat: json
(object)

Additional command-line arguments

single.extraVolumeMounts: []
(list)

Additional volume mounts

single.extraVolumes: []
(list)

Additional volumes

single.nodeSelector: {}
(object)

Pod node selector

single.podAnnotations: {}
(object)

Pod annotations

single.podDisruptionBudget.enabled: false
(bool)

Enable a PodDisruptionBudget

single.podDisruptionBudget.maxUnavailable: 0
(int)

Maximum unavailable pods

single.podDisruptionBudget.minAvailable: 0
(int)

Minimum available pods

single.podDisruptionBudget.unhealthyPodEvictionPolicy: null
(string)

Policy for evicting unhealthy pods

single.podLabels: {}
(object)

Pod labels

single.replicaCount: 1
(int)

Number of single-node replicas

single.resources: {}
(object)

Container resources

single.service.annotations: {}
(object)

Service annotations

single.service.labels: {}
(object)

Service labels

single.service.port: 8490
(int)

Service port

single.service.type: ClusterIP
(string)

Service type

single.tolerations: []
(list)

Pod tolerations

single.topologySpreadConstraints: []
(list)

Pod topology spread constraints

storage.affinity: {}
(object)
storage.command: []
(list)
storage.env: []
(list)
storage.envFrom: []
(list)
storage.extraArgs:
    cardinalityMetrics.exposeAt: /cardinality/metrics
    envflag.enable: true
    envflag.prefix: VM_
    loggerFormat: json
(object)

Additional command-line arguments

storage.extraVolumeMounts: []
(list)
storage.extraVolumes: []
(list)
storage.nodeSelector: {}
(object)
storage.podAnnotations: {}
(object)
storage.podDisruptionBudget.enabled: false
(bool)
storage.podDisruptionBudget.maxUnavailable: 0
(int)
storage.podDisruptionBudget.minAvailable: 0
(int)
storage.podDisruptionBudget.unhealthyPodEvictionPolicy: null
(string)
storage.podLabels: {}
(object)
storage.replicaCount: 3
(int)

Number of storage nodes in cluster mode

storage.resources: {}
(object)
storage.service.annotations: {}
(object)
storage.service.labels: {}
(object)
storage.service.port: 8490
(int)

Port for remote write and selector queries

storage.service.type: ClusterIP
(string)

Service type

storage.tolerations: []
(list)
storage.topologySpreadConstraints: []
(list)
useLegacyNaming: false
(bool)

Use legacy release-name based resource naming instead of operator-style names