From 4dc85613a288e12bc34df1a3fdb57f999904d7b2 Mon Sep 17 00:00:00 2001 From: Github Actions <133988544+victoriametrics-bot@users.noreply.github.com> Date: Mon, 23 Sep 2024 08:17:34 +0300 Subject: [PATCH] Automatic update helm docs from VictoriaMetrics/helm-charts@428cb36 (#7072) Automated changes by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action Signed-off-by: Github Actions <133988544+victoriametrics-bot@users.noreply.github.com> Co-authored-by: AndrewChubatiuk <3162380+AndrewChubatiuk@users.noreply.github.com> --- docs/helm/README.md | 22 +- docs/helm/_index.md | 3 +- docs/helm/victoria-logs-single/README.md | 637 +++--- docs/helm/victoria-metrics-agent/README.md | 1232 ++++++----- docs/helm/victoria-metrics-alert/README.md | 1199 ++++++----- docs/helm/victoria-metrics-anomaly/README.md | 381 ++-- docs/helm/victoria-metrics-auth/README.md | 587 ++--- docs/helm/victoria-metrics-cluster/README.md | 1898 ++++++++++------- .../victoria-metrics-distributed/README.md | 642 ++++-- .../victoriametrics-distributed-topology.webp | Bin 0 -> 73166 bytes docs/helm/victoria-metrics-gateway/README.md | 544 +++-- .../helm/victoria-metrics-k8s-stack/README.md | 1826 +++++++++------- .../img/k8s-stack-overview.webp | Bin 0 -> 94866 bytes docs/helm/victoria-metrics-operator/README.md | 441 ++-- docs/helm/victoria-metrics-single/README.md | 1586 +++++--------- 15 files changed, 6116 insertions(+), 4882 deletions(-) create mode 100644 docs/helm/victoria-metrics-distributed/img/victoriametrics-distributed-topology.webp create mode 100644 docs/helm/victoria-metrics-k8s-stack/img/k8s-stack-overview.webp diff --git a/docs/helm/README.md b/docs/helm/README.md index b01b9069c..d62e10fbd 100644 --- a/docs/helm/README.md +++ b/docs/helm/README.md @@ -123,14 +123,14 @@ helm charts tested at kubernetes versions from 1.28 to 1.30. ## List of Charts -- [Victoria Logs Single-Node](./charts/victoria-logs-single) -- [Victoria Metrics Agent](./charts/victoria-metrics-agent) -- [Victoria Metrics Alert](./charts/victoria-metrics-alert) -- [Victoria Metrics Anomaly](./charts/victoria-metrics-anomaly) -- [Victoria Metrics Auth](./charts/victoria-metrics-auth) -- [Victoria Metrics Cluster](./charts/victoria-metrics-cluster) -- [Victoria Metrics Gateway](./charts/victoria-metrics-gateway) -- [Victoria Metrics Distributed](./charts/victoria-metrics-distributed) -- [Victoria Metrics k8s Stack](./charts/victoria-metrics-k8s-stack) -- [Victoria Metrics Operator](./charts/victoria-metrics-operator) -- [Victoria Metrics Single-node](./charts/victoria-metrics-single) +- [VictoriaLogs Single](https://docs.victoriametrics.com/helm/victorialogs-single) +- [VictoriaMetrics Agent](https://docs.victoriametrics.com/helm/victoriametrics-agent) +- [VictoriaMetrics Alert](https://docs.victoriametrics.com/helm/victoriametrics-alert) +- [VictoriaMetrics Anomaly](https://docs.victoriametrics.com/helm/victoriametrics-anomaly) +- [VictoriaMetrics Auth](https://docs.victoriametrics.com/helm/victoriametrics-auth) +- [VictoriaMetrics Cluster](https://docs.victoriametrics.com/helm/victoriametrics-cluster) +- [VictoriaMetrics Gateway](https://docs.victoriametrics.com/helm/victoriametrics-gateway) +- [VictoriaMetrics Distributed](https://docs.victoriametrics.com/helm/victoriametrics-distributed) +- [VictoriaMetrics K8s Stack](https://docs.victoriametrics.com/helm/victoriametrics-k8s-stack) +- [VictoriaMetrics Operator](https://docs.victoriametrics.com/helm/victoriametrics-operator) +- [VictoriaMetrics Single](https://docs.victoriametrics.com/helm/victoriametrics-single) diff --git a/docs/helm/_index.md b/docs/helm/_index.md index d3de7b0f5..e08635ea5 100644 --- a/docs/helm/_index.md +++ b/docs/helm/_index.md @@ -3,8 +3,9 @@ weight: 0 title: Helm Charts menu: docs: - weight: 0 + weight: 35 identifier: helm + pageRef: /helm/ aliases: - /helm - /helm/index.html diff --git a/docs/helm/victoria-logs-single/README.md b/docs/helm/victoria-logs-single/README.md index af0c308d3..a70af8d9b 100644 --- a/docs/helm/victoria-logs-single/README.md +++ b/docs/helm/victoria-logs-single/README.md @@ -135,29 +135,83 @@ The following tables lists the configurable parameters of the chart and their de Change the values according to the need of the environment in ``victoria-logs-single/values.yaml`` file. - +
- - - - + + + + - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - + - - + - - + - - - - - + + - - + - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + - - + - - + - - - - - - - - - - - - - - - + + + + + + diff --git a/docs/helm/victoria-metrics-agent/README.md b/docs/helm/victoria-metrics-agent/README.md index 0e06b2861..3d71e22f1 100644 --- a/docs/helm/victoria-metrics-agent/README.md +++ b/docs/helm/victoria-metrics-agent/README.md @@ -118,374 +118,396 @@ The following tables lists the configurable parameters of the chart and their de Change the values according to the need of the environment in ``victoria-metrics-agent/values.yaml`` file. -
KeyTypeDefaultDescriptionKeyTypeDefaultDescription
extraObjects list
-[]
+      
+[]
+
 

Add extra specs dynamically to this chart

+
fluent-bitobject
+config:
+    filters: |
+        [FILTER]
+            Name kubernetes
+            Match kube.*
+            Merge_Log On
+            Keep_Log On
+            K8S-Logging.Parser On
+            K8S-Logging.Exclude On
+        [FILTER]
+            Name                nest
+            Match               *
+            Wildcard            pod_name
+            Operation lift
+            Nested_under kubernetes
+            Add_prefix   kubernetes_
+    outputs: |
+        [OUTPUT]
+            Name http
+            Match kube.*
+            Host '{{ include "victoria-logs.server.fullname" . }}'
+            port 9428
+            compress gzip
+            uri /insert/jsonline?_stream_fields=stream,kubernetes_pod_name,kubernetes_container_name,kubernetes_namespace_name&_msg_field=log&_time_field=date
+            format json_lines
+            json_date_format iso8601
+            header AccountID 0
+            header ProjectID 0
+daemonSetVolumeMounts:
+    - mountPath: /var/log
+      name: varlog
+    - mountPath: /var/lib/docker/containers
+      name: varlibdockercontainers
+      readOnly: true
+daemonSetVolumes:
+    - hostPath:
+        path: /var/log
+      name: varlog
+    - hostPath:
+        path: /var/lib/docker/containers
+      name: varlibdockercontainers
+enabled: false
+resources: {}
+
+
+

Values for fluent-bit helm chart

fluent-bit.config.filters tpl
-fluent-bit.config.filters: |
+      
+fluent-bit.config.filters: |
   [FILTER]
       Name kubernetes
       Match kube.*
@@ -173,6 +227,7 @@ fluent-bit.config.filters: |
       Nested_under kubernetes
       Add_prefix   kubernetes_
  
+
 

FluentBit configuration filters

@@ -181,8 +236,8 @@ fluent-bit.config.filters: |
fluent-bit.config.outputs tpl
-fluent-bit.config.outputs: |
+      
+fluent-bit.config.outputs: |
   [OUTPUT]
       Name http
       Match kube.*
@@ -195,152 +250,74 @@ fluent-bit.config.outputs: |
       header AccountID 0
       header ProjectID 0
  
+
 

Note that Host must be replaced to match your VictoriaLogs service name Default format points to VictoriaLogs service.

fluent-bit.daemonSetVolumeMounts[0].mountPathstring
-/var/log
-
-
fluent-bit.daemonSetVolumeMounts[0].namestring
-varlog
-
-
fluent-bit.daemonSetVolumeMounts[1].mountPathstring
-/var/lib/docker/containers
-
-
fluent-bit.daemonSetVolumeMounts[1].namestring
-varlibdockercontainers
-
-
fluent-bit.daemonSetVolumeMounts[1].readOnlybool
-true
-
-
fluent-bit.daemonSetVolumes[0].hostPath.pathstring
-/var/log
-
-
fluent-bit.daemonSetVolumes[0].namestring
-varlog
-
-
fluent-bit.daemonSetVolumes[1].hostPath.pathstring
-/var/lib/docker/containers
-
-
fluent-bit.daemonSetVolumes[1].namestring
-varlibdockercontainers
-
-
fluent-bit.enabled bool
-false
+      
+false
+
 

Enable deployment of fluent-bit

fluent-bit.resourcesglobal.compatibility object
-{}
+      
+openshift:
+    adaptSecurityContext: auto
+
 
global.compatibility.openshift.adaptSecurityContextstring
-auto
-
+

Openshift security context compatibility configuration

global.image.registry string
-""
+      
+""
+
 

Image registry, that can be shared across multiple helm charts

+
global.imagePullSecrets list
-[]
+      
+[]
+
 

Image pull secrets, that can be shared across multiple helm charts

+
global.nameOverride string
-""
+      
+""
+
 

Global name override

+
global.victoriaLogs.server.fullnameOverride string
-null
+      
+null
+
 

Overrides the full name of server component

@@ -349,18 +326,21 @@ null
global.victoriaLogs.server.name string
-server
+      
+server
+
 

Server container name

podDisruptionBudget.enabledbool
-false
+      
podDisruptionBudgetobject
+enabled: false
+extraLabels: {}
+
 

See kubectl explain poddisruptionbudget.spec for more. Details are here

@@ -369,17 +349,20 @@ false
podDisruptionBudget.extraLabels object
-{}
+      
+{}
+
 

PodDisruptionBudget extra labels

+
printNotes bool
-true
+      
+true
+
 

Print chart notes

@@ -388,8 +371,9 @@ true
server.affinity object
-{}
+      
+{}
+
 

Pod affinity

@@ -398,8 +382,9 @@ true
server.containerWorkingDir string
-""
+      
+""
+
 

Container workdir

@@ -408,18 +393,20 @@ true
server.emptyDir object
-{}
+      
+{}
+
 

Use an alternate scheduler, e.g. “stork”. ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/ schedulerName:

+

Use an alternate scheduler, e.g. “stork”. Check details here schedulerName:

server.enabled bool
-true
+      
+true
+
 

Enable deployment of server component. Deployed as StatefulSet

@@ -428,29 +415,33 @@ true
server.env list
-[]
+      
+[]
+
 

Additional environment variables (ex.: secret tokens, flags) https://github.com/VictoriaMetrics/VictoriaMetrics#environment-variables

+

Additional environment variables (ex.: secret tokens, flags). Details are here

server.envFrom list
-[]
+      
+[]
+
 

Specify alternative source for env variables

+
server.extraArgs object
-envflag.enable: "true"
+      
+envflag.enable: "true"
 envflag.prefix: VM_
 loggerFormat: json
+
 

Extra command line arguments for container of component

@@ -459,8 +450,9 @@ loggerFormat: json
server.extraContainers list
-[]
+      
+[]
+
 

Extra containers to run in a pod with Victoria Logs container

@@ -469,8 +461,9 @@ loggerFormat: json
server.extraHostPathMounts list
-[]
+      
+[]
+
 

Additional hostPath mounts

@@ -479,18 +472,20 @@ loggerFormat: json
server.extraLabels object
-{}
+      
+{}
+
 

Sts/Deploy additional labels

+

StatefulSet/Deployment additional labels

server.extraVolumeMounts list
-[]
+      
+[]
+
 

Extra Volume Mounts for the container

@@ -499,8 +494,9 @@ loggerFormat: json
server.extraVolumes list
-[]
+      
+[]
+
 

Extra Volumes for the pod

@@ -509,8 +505,9 @@ loggerFormat: json
server.image.pullPolicy string
-IfNotPresent
+      
+IfNotPresent
+
 

Image pull policy

@@ -519,8 +516,9 @@ IfNotPresent
server.image.registry string
-""
+      
+""
+
 

Image registry

@@ -529,8 +527,9 @@ IfNotPresent
server.image.repository string
-victoriametrics/victoria-logs
+      
+victoriametrics/victoria-logs
+
 

Image repository

@@ -539,8 +538,9 @@ victoriametrics/victoria-logs
server.image.tag string
-""
+      
+""
+
 

Image tag

@@ -549,17 +549,20 @@ victoriametrics/victoria-logs
server.image.variant string
-victorialogs
+      
+victorialogs
+
 

Image tag suffix, which is appended to Chart.AppVersion if no server.image.tag is defined

+
server.imagePullSecrets list
-[]
+      
+[]
+
 

Image pull secrets

@@ -568,8 +571,9 @@ victorialogs
server.ingress.annotations string
-null
+      
+null
+
 

Ingress annotations

@@ -578,8 +582,9 @@ null
server.ingress.enabled bool
-false
+      
+false
+
 

Enable deployment of ingress for server component

@@ -588,8 +593,9 @@ false
server.ingress.extraLabels object
-{}
+      
+{}
+
 

Ingress extra labels

@@ -598,27 +604,42 @@ false
server.ingress.hosts list
-[]
+      
+[]
+
 

Array of host objects

+
server.ingress.ingressClassNamestring
+""
+
+
+

Ingress controller class name

+
server.ingress.pathType string
-Prefix
+      
+Prefix
+
 

pathType is only for k8s >= 1.1=

+

Ingress path type

server.ingress.tls list
-[]
+      
+[]
+
 

Array of TLS objects

@@ -627,8 +648,9 @@ Prefix
server.initContainers list
-[]
+      
+[]
+
 

Init containers for Victoria Logs Pod

@@ -637,8 +659,9 @@ Prefix
server.nodeSelector object
-{}
+      
+{}
+
 

Pod’s node selector. Details are here

@@ -647,8 +670,9 @@ Prefix
server.persistentVolume.accessModes list
-- ReadWriteOnce
+      
+- ReadWriteOnce
+
 

Array of access modes. Must match those of existing PV or dynamic provisioner. Details are here

@@ -657,8 +681,9 @@ Prefix
server.persistentVolume.annotations object
-{}
+      
+{}
+
 

Persistant volume annotations

@@ -667,8 +692,9 @@ Prefix
server.persistentVolume.enabled bool
-false
+      
+false
+
 

Create/use Persistent Volume Claim for server component. Empty dir if false

@@ -677,8 +703,9 @@ false
server.persistentVolume.existingClaim string
-""
+      
+""
+
 

Existing Claim name. If defined, PVC must be created manually before volume will be bound

@@ -687,8 +714,9 @@ false
server.persistentVolume.matchLabels object
-{}
+      
+{}
+
 

Bind Persistent Volume by labels. Must match all labels of targeted PV.

@@ -697,8 +725,9 @@ false
server.persistentVolume.mountPath string
-/storage
+      
+/storage
+
 

Mount path. Server data Persistent Volume mount root path.

@@ -707,8 +736,9 @@ false
server.persistentVolume.size string
-3Gi
+      
+3Gi
+
 

Size of the volume. Should be calculated based on the logs you send and retention policy you set.

@@ -717,8 +747,9 @@ false
server.persistentVolume.storageClassName string
-""
+      
+""
+
 

StorageClass to use for persistent volume. Requires server.persistentVolume.enabled: true. If defined, PVC created automatically

@@ -727,8 +758,9 @@ false
server.persistentVolume.subPath string
-""
+      
+""
+
 

Mount subpath

@@ -737,8 +769,9 @@ false
server.podAnnotations object
-{}
+      
+{}
+
 

Pod’s annotations

@@ -747,8 +780,9 @@ false
server.podLabels object
-{}
+      
+{}
+
 

Pod’s additional labels

@@ -757,8 +791,9 @@ false
server.podManagementPolicy string
-OrderedReady
+      
+OrderedReady
+
 

Pod’s management policy

@@ -767,11 +802,12 @@ OrderedReady
server.podSecurityContext object
-enabled: true
+      
+enabled: true
 fsGroup: 2000
 runAsNonRoot: true
 runAsUser: 1000
+
 

Pod’s security context. Details are here

@@ -780,8 +816,9 @@ runAsUser: 1000
server.priorityClassName string
-""
+      
+""
+
 

Name of Priority Class

@@ -790,12 +827,13 @@ runAsUser: 1000
server.probe.liveness object
-failureThreshold: 10
+      
+failureThreshold: 10
 initialDelaySeconds: 30
 periodSeconds: 30
 tcpSocket: {}
 timeoutSeconds: 5
+
 

Indicates whether the Container is running. If the liveness probe fails, the kubelet kills the Container, and the Container is subjected to its restart policy. If a Container does not provide a liveness probe, the default state is Success.

@@ -804,12 +842,13 @@ timeoutSeconds: 5
server.probe.readiness object
-failureThreshold: 3
+      
+failureThreshold: 3
 httpGet: {}
 initialDelaySeconds: 5
 periodSeconds: 15
 timeoutSeconds: 5
+
 

Indicates whether the Container is ready to service requests. If the readiness probe fails, the endpoints controller removes the Pod’s IP address from the endpoints of all Services that match the Pod. The default state of readiness before the initial delay is Failure. If a Container does not provide a readiness probe, the default state is Success.

@@ -818,8 +857,9 @@ timeoutSeconds: 5
server.probe.startup object
-{}
+      
+{}
+
 

Indicates whether the Container is done with potentially costly initialization. If set it is executed first. If it fails Container is restarted. If it succeeds liveness and readiness probes takes over.

@@ -828,8 +868,9 @@ timeoutSeconds: 5
server.replicaCount int
-1
+      
+1
+
 

Replica count

@@ -838,8 +879,9 @@ timeoutSeconds: 5
server.resources object
-{}
+      
+{}
+
 

Resource object. Details are here

@@ -848,8 +890,9 @@ timeoutSeconds: 5
server.retentionPeriod int
-1
+      
+1
+
 

Data retention period in month

@@ -858,13 +901,14 @@ timeoutSeconds: 5
server.securityContext object
-allowPrivilegeEscalation: false
+      
+allowPrivilegeEscalation: false
 capabilities:
     drop:
         - ALL
 enabled: true
 readOnlyRootFilesystem: true
+
 

Security context to be added to server pods

@@ -873,8 +917,9 @@ readOnlyRootFilesystem: true
server.service.annotations object
-{}
+      
+{}
+
 

Service annotations

@@ -883,8 +928,9 @@ readOnlyRootFilesystem: true
server.service.clusterIP string
-""
+      
+""
+
 

Service ClusterIP

@@ -893,54 +939,64 @@ readOnlyRootFilesystem: true
server.service.externalIPs list
-[]
+      
+[]
+
 

Service External IPs. Details are here

+

Service external IPs. Details are here

server.service.externalTrafficPolicy string
-""
+      
+""
+
 

Service external traffic policy. Check here for details

+
server.service.healthCheckNodePort string
-""
+      
+""
+
 

Health check node port for a service. Check here for details

+
server.service.ipFamilies list
-[]
+      
+[]
+
 

List of service IP families. Check here for details.

+
server.service.ipFamilyPolicy string
-""
+      
+""
+
 

Service IP family policy. Check here for details.

+
server.service.labels object
-{}
+      
+{}
+
 

Service labels

@@ -949,8 +1005,9 @@ readOnlyRootFilesystem: true
server.service.loadBalancerIP string
-""
+      
+""
+
 

Service load balacner IP

@@ -959,8 +1016,9 @@ readOnlyRootFilesystem: true
server.service.loadBalancerSourceRanges list
-[]
+      
+[]
+
 

Load balancer source range

@@ -969,8 +1027,9 @@ readOnlyRootFilesystem: true
server.service.servicePort int
-9428
+      
+9428
+
 

Service port

@@ -979,8 +1038,9 @@ readOnlyRootFilesystem: true
server.service.type string
-ClusterIP
+      
+ClusterIP
+
 

Service type

@@ -989,8 +1049,9 @@ ClusterIP
server.serviceMonitor.annotations object
-{}
+      
+{}
+
 

Service Monitor annotations

@@ -999,8 +1060,9 @@ ClusterIP
server.serviceMonitor.basicAuth object
-{}
+      
+{}
+
 

Basic auth params for Service Monitor

@@ -1009,8 +1071,9 @@ ClusterIP
server.serviceMonitor.enabled bool
-false
+      
+false
+
 

Enable deployment of Service Monitor for server component. This is Prometheus operator object

@@ -1019,8 +1082,9 @@ false
server.serviceMonitor.extraLabels object
-{}
+      
+{}
+
 

Service Monitor labels

@@ -1029,8 +1093,9 @@ false
server.serviceMonitor.metricRelabelings list
-[]
+      
+[]
+
 

Service Monitor metricRelabelings

@@ -1039,8 +1104,9 @@ false
server.serviceMonitor.relabelings list
-[]
+      
+[]
+
 

Service Monitor relabelings

@@ -1049,8 +1115,9 @@ false
server.statefulSet.enabled bool
-true
+      
+true
+
 

Creates statefulset instead of deployment, useful when you want to keep the cache

@@ -1059,8 +1126,9 @@ true
server.statefulSet.podManagementPolicy string
-OrderedReady
+      
+OrderedReady
+
 

Deploy order policy for StatefulSet pods

@@ -1069,8 +1137,9 @@ OrderedReady
server.terminationGracePeriodSeconds int
-60
+      
+60
+
 

Pod’s termination grace period in seconds

@@ -1079,11 +1148,23 @@ OrderedReady
server.tolerations list
-[]
+      
+[]
+
 

Node tolerations for server scheduling to nodes with taints. Details are here

+
server.topologySpreadConstraintslist
+[]
+
+
+

Pod topologySpreadConstraints

+
- - - - + + + + - - + - - - - + + - - - - - - - - - - - + - - + + + + + + - - + - - - - + - - - - + - - - - - - - - - + - - - + + - + - - + - - + - - - - - - - - + - - - - - - + - - + - - + - - + - - + + + + + + + - - - - + - - + - - - - - - - - + - - + - - + - - - + + - + - - + - - + - - + - - + - - - + + + + + + + - - - - - - - - + + - + - - - - - - - - - - + - - + - - + - - - - - + - - + - - - + + - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - - - - - - - - - - - - - - - - + + - + + + + + + + - - +
KeyTypeDefaultDescriptionKeyTypeDefaultDescription
affinity object
-{}
+      
+{}
+
 

Pod affinity

+
annotations object
-{}
+      
+{}
+
 

Annotations to be added to the deployment

config.global.scrape_intervalstring
-10s
+      
configobject
+global:
+    scrape_interval: 10s
+scrape_configs:
+    - job_name: vmagent
+      static_configs:
+        - targets:
+            - localhost:8429
+    - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
+      job_name: kubernetes-apiservers
+      kubernetes_sd_configs:
+        - role: endpoints
+      relabel_configs:
+        - action: keep
+          regex: default;kubernetes;https
+          source_labels:
+            - __meta_kubernetes_namespace
+            - __meta_kubernetes_service_name
+            - __meta_kubernetes_endpoint_port_name
+      scheme: https
+      tls_config:
+        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
+        insecure_skip_verify: true
+    - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
+      job_name: kubernetes-nodes
+      kubernetes_sd_configs:
+        - role: node
+      relabel_configs:
+        - action: labelmap
+          regex: __meta_kubernetes_node_label_(.+)
+        - replacement: kubernetes.default.svc:443
+          target_label: __address__
+        - regex: (.+)
+          replacement: /api/v1/nodes/$1/proxy/metrics
+          source_labels:
+            - __meta_kubernetes_node_name
+          target_label: __metrics_path__
+      scheme: https
+      tls_config:
+        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
+        insecure_skip_verify: true
+    - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
+      honor_timestamps: false
+      job_name: kubernetes-nodes-cadvisor
+      kubernetes_sd_configs:
+        - role: node
+      relabel_configs:
+        - action: labelmap
+          regex: __meta_kubernetes_node_label_(.+)
+        - replacement: kubernetes.default.svc:443
+          target_label: __address__
+        - regex: (.+)
+          replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor
+          source_labels:
+            - __meta_kubernetes_node_name
+          target_label: __metrics_path__
+      scheme: https
+      tls_config:
+        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
+        insecure_skip_verify: true
+    - job_name: kubernetes-service-endpoints
+      kubernetes_sd_configs:
+        - role: endpointslices
+      relabel_configs:
+        - action: drop
+          regex: true
+          source_labels:
+            - __meta_kubernetes_pod_container_init
+        - action: keep_if_equal
+          source_labels:
+            - __meta_kubernetes_service_annotation_prometheus_io_port
+            - __meta_kubernetes_pod_container_port_number
+        - action: keep
+          regex: true
+          source_labels:
+            - __meta_kubernetes_service_annotation_prometheus_io_scrape
+        - action: replace
+          regex: (https?)
+          source_labels:
+            - __meta_kubernetes_service_annotation_prometheus_io_scheme
+          target_label: __scheme__
+        - action: replace
+          regex: (.+)
+          source_labels:
+            - __meta_kubernetes_service_annotation_prometheus_io_path
+          target_label: __metrics_path__
+        - action: replace
+          regex: ([^:]+)(?::\d+)?;(\d+)
+          replacement: $1:$2
+          source_labels:
+            - __address__
+            - __meta_kubernetes_service_annotation_prometheus_io_port
+          target_label: __address__
+        - action: labelmap
+          regex: __meta_kubernetes_service_label_(.+)
+        - source_labels:
+            - __meta_kubernetes_pod_name
+          target_label: pod
+        - source_labels:
+            - __meta_kubernetes_pod_container_name
+          target_label: container
+        - source_labels:
+            - __meta_kubernetes_namespace
+          target_label: namespace
+        - source_labels:
+            - __meta_kubernetes_service_name
+          target_label: service
+        - replacement: ${1}
+          source_labels:
+            - __meta_kubernetes_service_name
+          target_label: job
+        - action: replace
+          source_labels:
+            - __meta_kubernetes_pod_node_name
+          target_label: node
+    - job_name: kubernetes-service-endpoints-slow
+      kubernetes_sd_configs:
+        - role: endpointslices
+      relabel_configs:
+        - action: drop
+          regex: true
+          source_labels:
+            - __meta_kubernetes_pod_container_init
+        - action: keep_if_equal
+          source_labels:
+            - __meta_kubernetes_service_annotation_prometheus_io_port
+            - __meta_kubernetes_pod_container_port_number
+        - action: keep
+          regex: true
+          source_labels:
+            - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow
+        - action: replace
+          regex: (https?)
+          source_labels:
+            - __meta_kubernetes_service_annotation_prometheus_io_scheme
+          target_label: __scheme__
+        - action: replace
+          regex: (.+)
+          source_labels:
+            - __meta_kubernetes_service_annotation_prometheus_io_path
+          target_label: __metrics_path__
+        - action: replace
+          regex: ([^:]+)(?::\d+)?;(\d+)
+          replacement: $1:$2
+          source_labels:
+            - __address__
+            - __meta_kubernetes_service_annotation_prometheus_io_port
+          target_label: __address__
+        - action: labelmap
+          regex: __meta_kubernetes_service_label_(.+)
+        - source_labels:
+            - __meta_kubernetes_pod_name
+          target_label: pod
+        - source_labels:
+            - __meta_kubernetes_pod_container_name
+          target_label: container
+        - source_labels:
+            - __meta_kubernetes_namespace
+          target_label: namespace
+        - source_labels:
+            - __meta_kubernetes_service_name
+          target_label: service
+        - replacement: ${1}
+          source_labels:
+            - __meta_kubernetes_service_name
+          target_label: job
+        - action: replace
+          source_labels:
+            - __meta_kubernetes_pod_node_name
+          target_label: node
+      scrape_interval: 5m
+      scrape_timeout: 30s
+    - job_name: kubernetes-services
+      kubernetes_sd_configs:
+        - role: service
+      metrics_path: /probe
+      params:
+        module:
+            - http_2xx
+      relabel_configs:
+        - action: keep
+          regex: true
+          source_labels:
+            - __meta_kubernetes_service_annotation_prometheus_io_probe
+        - source_labels:
+            - __address__
+          target_label: __param_target
+        - replacement: blackbox
+          target_label: __address__
+        - source_labels:
+            - __param_target
+          target_label: instance
+        - action: labelmap
+          regex: __meta_kubernetes_service_label_(.+)
+        - source_labels:
+            - __meta_kubernetes_namespace
+          target_label: namespace
+        - source_labels:
+            - __meta_kubernetes_service_name
+          target_label: service
+    - job_name: kubernetes-pods
+      kubernetes_sd_configs:
+        - role: pod
+      relabel_configs:
+        - action: drop
+          regex: true
+          source_labels:
+            - __meta_kubernetes_pod_container_init
+        - action: keep_if_equal
+          source_labels:
+            - __meta_kubernetes_pod_annotation_prometheus_io_port
+            - __meta_kubernetes_pod_container_port_number
+        - action: keep
+          regex: true
+          source_labels:
+            - __meta_kubernetes_pod_annotation_prometheus_io_scrape
+        - action: replace
+          regex: (.+)
+          source_labels:
+            - __meta_kubernetes_pod_annotation_prometheus_io_path
+          target_label: __metrics_path__
+        - action: replace
+          regex: ([^:]+)(?::\d+)?;(\d+)
+          replacement: $1:$2
+          source_labels:
+            - __address__
+            - __meta_kubernetes_pod_annotation_prometheus_io_port
+          target_label: __address__
+        - action: labelmap
+          regex: __meta_kubernetes_pod_label_(.+)
+        - source_labels:
+            - __meta_kubernetes_pod_name
+          target_label: pod
+        - source_labels:
+            - __meta_kubernetes_pod_container_name
+          target_label: container
+        - source_labels:
+            - __meta_kubernetes_namespace
+          target_label: namespace
+        - action: replace
+          source_labels:
+            - __meta_kubernetes_pod_node_name
+          target_label: node
+
 
config.scrape_configslist
-- job_name: vmagent
-  static_configs:
-    - targets:
-        - localhost:8429
-- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
-  job_name: kubernetes-apiservers
-  kubernetes_sd_configs:
-    - role: endpoints
-  relabel_configs:
-    - action: keep
-      regex: default;kubernetes;https
-      source_labels:
-        - __meta_kubernetes_namespace
-        - __meta_kubernetes_service_name
-        - __meta_kubernetes_endpoint_port_name
-  scheme: https
-  tls_config:
-    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
-    insecure_skip_verify: true
-- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
-  job_name: kubernetes-nodes
-  kubernetes_sd_configs:
-    - role: node
-  relabel_configs:
-    - action: labelmap
-      regex: __meta_kubernetes_node_label_(.+)
-    - replacement: kubernetes.default.svc:443
-      target_label: __address__
-    - regex: (.+)
-      replacement: /api/v1/nodes/$1/proxy/metrics
-      source_labels:
-        - __meta_kubernetes_node_name
-      target_label: __metrics_path__
-  scheme: https
-  tls_config:
-    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
-    insecure_skip_verify: true
-- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
-  honor_timestamps: false
-  job_name: kubernetes-nodes-cadvisor
-  kubernetes_sd_configs:
-    - role: node
-  relabel_configs:
-    - action: labelmap
-      regex: __meta_kubernetes_node_label_(.+)
-    - replacement: kubernetes.default.svc:443
-      target_label: __address__
-    - regex: (.+)
-      replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor
-      source_labels:
-        - __meta_kubernetes_node_name
-      target_label: __metrics_path__
-  scheme: https
-  tls_config:
-    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
-    insecure_skip_verify: true
-- job_name: kubernetes-service-endpoints
-  kubernetes_sd_configs:
-    - role: endpointslices
-  relabel_configs:
-    - action: drop
-      regex: true
-      source_labels:
-        - __meta_kubernetes_pod_container_init
-    - action: keep_if_equal
-      source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_port
-        - __meta_kubernetes_pod_container_port_number
-    - action: keep
-      regex: true
-      source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_scrape
-    - action: replace
-      regex: (https?)
-      source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_scheme
-      target_label: __scheme__
-    - action: replace
-      regex: (.+)
-      source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_path
-      target_label: __metrics_path__
-    - action: replace
-      regex: ([^:]+)(?::\d+)?;(\d+)
-      replacement: $1:$2
-      source_labels:
-        - __address__
-        - __meta_kubernetes_service_annotation_prometheus_io_port
-      target_label: __address__
-    - action: labelmap
-      regex: __meta_kubernetes_service_label_(.+)
-    - source_labels:
-        - __meta_kubernetes_pod_name
-      target_label: pod
-    - source_labels:
-        - __meta_kubernetes_pod_container_name
-      target_label: container
-    - source_labels:
-        - __meta_kubernetes_namespace
-      target_label: namespace
-    - source_labels:
-        - __meta_kubernetes_service_name
-      target_label: service
-    - replacement: ${1}
-      source_labels:
-        - __meta_kubernetes_service_name
-      target_label: job
-    - action: replace
-      source_labels:
-        - __meta_kubernetes_pod_node_name
-      target_label: node
-- job_name: kubernetes-service-endpoints-slow
-  kubernetes_sd_configs:
-    - role: endpointslices
-  relabel_configs:
-    - action: drop
-      regex: true
-      source_labels:
-        - __meta_kubernetes_pod_container_init
-    - action: keep_if_equal
-      source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_port
-        - __meta_kubernetes_pod_container_port_number
-    - action: keep
-      regex: true
-      source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow
-    - action: replace
-      regex: (https?)
-      source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_scheme
-      target_label: __scheme__
-    - action: replace
-      regex: (.+)
-      source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_path
-      target_label: __metrics_path__
-    - action: replace
-      regex: ([^:]+)(?::\d+)?;(\d+)
-      replacement: $1:$2
-      source_labels:
-        - __address__
-        - __meta_kubernetes_service_annotation_prometheus_io_port
-      target_label: __address__
-    - action: labelmap
-      regex: __meta_kubernetes_service_label_(.+)
-    - source_labels:
-        - __meta_kubernetes_pod_name
-      target_label: pod
-    - source_labels:
-        - __meta_kubernetes_pod_container_name
-      target_label: container
-    - source_labels:
-        - __meta_kubernetes_namespace
-      target_label: namespace
-    - source_labels:
-        - __meta_kubernetes_service_name
-      target_label: service
-    - replacement: ${1}
-      source_labels:
-        - __meta_kubernetes_service_name
-      target_label: job
-    - action: replace
-      source_labels:
-        - __meta_kubernetes_pod_node_name
-      target_label: node
-  scrape_interval: 5m
-  scrape_timeout: 30s
-- job_name: kubernetes-services
-  kubernetes_sd_configs:
-    - role: service
-  metrics_path: /probe
-  params:
-    module:
-        - http_2xx
-  relabel_configs:
-    - action: keep
-      regex: true
-      source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_probe
-    - source_labels:
-        - __address__
-      target_label: __param_target
-    - replacement: blackbox
-      target_label: __address__
-    - source_labels:
-        - __param_target
-      target_label: instance
-    - action: labelmap
-      regex: __meta_kubernetes_service_label_(.+)
-    - source_labels:
-        - __meta_kubernetes_namespace
-      target_label: namespace
-    - source_labels:
-        - __meta_kubernetes_service_name
-      target_label: service
-- job_name: kubernetes-pods
-  kubernetes_sd_configs:
-    - role: pod
-  relabel_configs:
-    - action: drop
-      regex: true
-      source_labels:
-        - __meta_kubernetes_pod_container_init
-    - action: keep_if_equal
-      source_labels:
-        - __meta_kubernetes_pod_annotation_prometheus_io_port
-        - __meta_kubernetes_pod_container_port_number
-    - action: keep
-      regex: true
-      source_labels:
-        - __meta_kubernetes_pod_annotation_prometheus_io_scrape
-    - action: replace
-      regex: (.+)
-      source_labels:
-        - __meta_kubernetes_pod_annotation_prometheus_io_path
-      target_label: __metrics_path__
-    - action: replace
-      regex: ([^:]+)(?::\d+)?;(\d+)
-      replacement: $1:$2
-      source_labels:
-        - __address__
-        - __meta_kubernetes_pod_annotation_prometheus_io_port
-      target_label: __address__
-    - action: labelmap
-      regex: __meta_kubernetes_pod_label_(.+)
-    - source_labels:
-        - __meta_kubernetes_pod_name
-      target_label: pod
-    - source_labels:
-        - __meta_kubernetes_pod_container_name
-      target_label: container
-    - source_labels:
-        - __meta_kubernetes_namespace
-      target_label: namespace
-    - action: replace
-      source_labels:
-        - __meta_kubernetes_pod_node_name
-      target_label: node
-
-

scrape configuration. scrape self by default

+

VMAgent scrape configuration

configMap string
-""
+      
+""
+
 

vmagent scraping configuration: https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/docs/vmagent.md#how-to-collect-metrics-in-prometheus-format use existing configmap if specified otherwise .config values will be used

+

VMAgent scraping configuration use existing configmap if specified otherwise .config values will be used

containerWorkingDir string
-/
+      
+/
+
 

Container working directory

+
deployment object
-enabled: true
+      
+enabled: true
 strategy: {}
+
 

ref: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/

+

K8s Deployment specific variables

+
deployment.strategyobject
+{}
+
+
+

Deployment stragegy. Check here for details

emptyDir object
-{}
+      
+{}
+
 

Empty dir configuration for a case, when persistence is disabled

+
env list
-[]
+      
+[]
+
 

Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

+

Additional environment variables (ex.: secret tokens, flags). Check here for more details.

envFrom list
-[]
+      
+[]
+
 

Specify alternative source for env variables

+
extraArgs object
-envflag.enable: "true"
+      
+envflag.enable: "true"
 envflag.prefix: VM_
 loggerFormat: json
+
 

vmagent extra command line arguments

+

VMAgent extra command line arguments

extraContainers list
-[]
+      
+[]
+
 

Extra containers to run in a pod with vmagent

+
extraHostPathMounts list
-[]
+      
+[]
+
 

Additional hostPath mounts

@@ -494,18 +516,20 @@ loggerFormat: json
extraLabels object
-{}
+      
+{}
+
 

extra Labels for Pods, Deployment and Statefulset

+

Extra labels for Pods, Deployment and Statefulset

extraObjects list
-[]
+      
+[]
+
 

Add extra specs dynamically to this chart

@@ -514,8 +538,9 @@ loggerFormat: json
extraScrapeConfigs list
-[]
+      
+[]
+
 

Extra scrape configs that will be appended to config

@@ -524,8 +549,9 @@ loggerFormat: json
extraVolumeMounts list
-[]
+      
+[]
+
 

Extra Volume Mounts for the container

@@ -534,8 +560,9 @@ loggerFormat: json
extraVolumes list
-[]
+      
+[]
+
 

Extra Volumes for the pod

@@ -544,57 +571,68 @@ loggerFormat: json
fullnameOverride string
-""
+      
+""
+
 

Overrides the fullname prefix

+
global.compatibility.openshift.adaptSecurityContextstring
-auto
+      
global.compatibilityobject
+openshift:
+    adaptSecurityContext: auto
+
 

Openshift security context compatibility configuration

+
global.image.registry string
-""
+      
+""
+
 

Image registry, that can be shared across multiple helm charts

+
global.imagePullSecrets list
-[]
+      
+[]
+
 

Image pull secrets, that can be shared across multiple helm charts

+
horizontalPodAutoscaling object
-enabled: false
+      
+enabled: false
 maxReplicas: 10
 metrics: []
 minReplicas: 1
+
 

Horizontal Pod Autoscaling. Note that it is not intended to be used for vmagents which perform scraping. In order to scale scraping vmagents see: https://docs.victoriametrics.com/vmagent/#scraping-big-number-of-targets

+

Horizontal Pod Autoscaling. Note that it is not intended to be used for vmagents which perform scraping. In order to scale scraping vmagents check here

horizontalPodAutoscaling.enabled bool
-false
+      
+false
+
 

Use HPA for vmagent

@@ -603,8 +641,9 @@ false
horizontalPodAutoscaling.maxReplicas int
-10
+      
+10
+
 

Maximum replicas for HPA to use to to scale vmagent

@@ -613,8 +652,9 @@ false
horizontalPodAutoscaling.metrics list
-[]
+      
+[]
+
 

Metric for HPA to use to scale vmagent

@@ -623,8 +663,9 @@ false
horizontalPodAutoscaling.minReplicas int
-1
+      
+1
+
 

Minimum replicas for HPA to use to scale vmagent

@@ -633,17 +674,20 @@ false
image.pullPolicy string
-IfNotPresent
+      
+IfNotPresent
+
 

Image pull policy

+
image.registry string
-""
+      
+""
+
 

Image registry

@@ -652,8 +696,9 @@ IfNotPresent
image.repository string
-victoriametrics/vmagent
+      
+victoriametrics/vmagent
+
 

Image repository

@@ -662,8 +707,9 @@ victoriametrics/vmagent
image.tag string
-""
+      
+""
+
 

Image tag, set to Chart.AppVersion by default

@@ -672,8 +718,9 @@ victoriametrics/vmagent
image.variant string
-""
+      
+""
+
 

Variant of the image to use. e.g. enterprise, scratch

@@ -682,94 +729,122 @@ victoriametrics/vmagent
imagePullSecrets list
-[]
+      
+[]
+
 

Image pull secrets

+
ingress.annotations object
-{}
+      
+{}
+
 

Ingress annotations

+
ingress.enabled bool
-false
+      
+false
+
 

Enable deployment of ingress for agent

+
ingress.extraLabels object
-{}
+      
+{}
+
 

Ingress extra labels

+
ingress.hosts list
-[]
+      
+[]
+
 

Array of host objects

+
ingress.ingressClassNamestring
+""
+
+
+

Ingress controller class name

+
ingress.pathType string
-Prefix
+      
+Prefix
+
 

pathType is only for k8s >= 1.1=

+

Ingress path type

ingress.tls list
-[]
+      
+[]
+
 

Array of TLS objects

+
initContainers list
-[]
+      
+[]
+
 

Init containers for vmagent

+
license object
-key: ""
+      
+key: ""
 secret:
     key: ""
     name: ""
+
 

Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Documentation - https://docs.victoriametrics.com/enterprise, for more information, visit https://victoriametrics.com/products/enterprise/ . To request a trial license, go to https://victoriametrics.com/products/enterprise/trial/ Supported starting from VictoriaMetrics v1.94.0

+

Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Check docs here, for more information, visit site. Request a trial license here Supported starting from VictoriaMetrics v1.94.0

license.key string
-""
+      
+""
+
 

License key

@@ -778,9 +853,10 @@ secret:
license.secret object
-key: ""
+      
+key: ""
 name: ""
+
 

Use existing secret with license key

@@ -789,8 +865,9 @@ name: ""
license.secret.key string
-""
+      
+""
+
 

Key in secret with license key

@@ -799,8 +876,9 @@ name: ""
license.secret.name string
-""
+      
+""
+
 

Existing secret name

@@ -809,80 +887,97 @@ name: ""
multiTenantUrls list
-[]
+      
+[]
+
 

Destination multitenant endpoint for scraped/received metrics

+
nameOverride string
-""
+      
+""
+
 

Overrides fullname suffix

+
nodeSelector object
-{}
+      
+{}
+
 

Pod’s node selector. Details are here

+
persistence.accessModes[0]string
-ReadWriteOnce
+      
persistence.accessModeslist
+- ReadWriteOnce
+
 

Array of access modes. Must match those of existing PV or dynamic provisioner. Details are here

+
persistence.annotations object
-{}
+      
+{}
+
 

Persistant volume annotations

+
persistence.enabled bool
-false
+      
+false
+
 

Create/use Persistent Volume Claim for server component. Empty dir if false

+
persistence.existingClaim string
-""
+      
+""
+
 

Existing Claim name. If defined, PVC must be created manually before volume will be bound

+
persistence.extraLabels object
-{}
+      
+{}
+
 

Persistant volume additional labels

+
persistence.matchLabels object
-{}
+      
+{}
+
 

Bind Persistent Volume by labels. Must match all labels of targeted PV.

@@ -891,17 +986,31 @@ false
persistence.size string
-10Gi
+      
+10Gi
+
 

Size of the volume. Should be calculated based on the logs you send and retention policy you set.

+
persistence.storageClassNamestring
+""
+
+
+

StorageClass to use for persistent volume. Requires server.persistentVolume.enabled: true. If defined, PVC created automatically

+
podAnnotations object
-{}
+      
+{}
+
 

Annotations to be added to pod

@@ -910,120 +1019,136 @@ false
podDisruptionBudget object
-enabled: false
+      
+enabled: false
 labels: {}
+
 

See kubectl explain poddisruptionbudget.spec for more ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb/

+

See kubectl explain poddisruptionbudget.spec for more or check official documentation

podLabels object
-{}
+      
+{}
+
 

extra Labels for Pods only

+

Extra labels for Pods only

podSecurityContext.enabledbool
-true
+      
podSecurityContextobject
+enabled: true
+
 

Security context to be added to pod

+
priorityClassName string
-""
+      
+""
+
 

priority class to be assigned to the pod(s)

+

Priority class to be assigned to the pod(s)

probe.liveness object
-initialDelaySeconds: 5
+      
+initialDelaySeconds: 5
 periodSeconds: 15
 tcpSocket: {}
 timeoutSeconds: 5
+
 

liveness probe

+

Liveness probe

probe.readiness object
-httpGet: {}
+      
+httpGet: {}
 initialDelaySeconds: 5
 periodSeconds: 15
+
 

readiness probe

+

Readiness probe

probe.startup object
-{}
+      
+{}
+
 

startup probe

+

Startup probe

rbac.annotations object
-{}
+      
+{}
+
 

Role/RoleBinding annotations

+
rbac.create bool
-true
+      
+true
+
 

Enables Role/RoleBinding creation

+
rbac.extraLabels object
-{}
+      
+{}
+
 

Role/RoleBinding labels

+
rbac.namespaced bool
-false
+      
+false
+
 

if true and rbac.enabled, will deploy a Role/Rolebinding instead of a ClusterRole/ClusterRoleBinding

+

If true and rbac.enabled, will deploy a Role/RoleBinding instead of a ClusterRole/ClusterRoleBinding

remoteWriteUrls list
-[]
+      
+[]
+
 

WARN: need to specify at least one remote write url or one multi tenant url

@@ -1032,152 +1157,185 @@ false
replicaCount int
-1
+      
+1
+
 

Replica count

+
resources object
-{}
+      
+{}
+
 

Resource object. Details are here

+
securityContext.enabledbool
-true
+      
securityContextobject
+enabled: true
+
 

Security context to be added to pod’s containers

+
service.annotations object
-{}
+      
+{}
+
 

Service annotations

+
service.clusterIP string
-""
+      
+""
+
 

Service ClusterIP

+
service.enabled bool
-false
+      
+false
+
 

Enable agent service

+
service.externalIPs list
-[]
+      
+[]
+
 

Service external IPs. Check here for details

+
service.externalTrafficPolicy string
-""
+      
+""
+
 

Service external traffic policy. Check here for details

+
service.extraLabels object
-{}
+      
+{}
+
 

Service labels

+
service.healthCheckNodePort string
-""
+      
+""
+
 

Health check node port for a service. Check here for details

+
service.ipFamilies list
-[]
+      
+[]
+
 

List of service IP families. Check here for details.

+
service.ipFamilyPolicy string
-""
+      
+""
+
 

Service IP family policy. Check here for details.

+
service.loadBalancerIP string
-""
+      
+""
+
 

Service load balacner IP

+
service.loadBalancerSourceRanges list
-[]
+      
+[]
+
 

Load balancer source range

+
service.servicePort int
-8429
+      
+8429
+
 

Service port

+
service.type string
-ClusterIP
+      
+ClusterIP
+
 

Service type

+
serviceAccount.annotations object
-{}
+      
+{}
+
 

Annotations to add to the service account

@@ -1186,8 +1344,9 @@ ClusterIP
serviceAccount.create bool
-true
+      
+true
+
 

Specifies whether a service account should be created

@@ -1196,8 +1355,9 @@ true
serviceAccount.name string
-null
+      
+null
+
 

The name of the service account to use. If not set and create is true, a name is generated using the fullname template

@@ -1206,8 +1366,9 @@ null
serviceMonitor.annotations object
-{}
+      
+{}
+
 

Service Monitor annotations

@@ -1216,8 +1377,9 @@ null
serviceMonitor.basicAuth object
-{}
+      
+{}
+
 

Basic auth params for Service Monitor

@@ -1226,8 +1388,9 @@ null
serviceMonitor.enabled bool
-false
+      
+false
+
 

Enable deployment of Service Monitor for server component. This is Prometheus operator object

@@ -1236,8 +1399,9 @@ false
serviceMonitor.extraLabels object
-{}
+      
+{}
+
 

Service Monitor labels

@@ -1246,8 +1410,9 @@ false
serviceMonitor.metricRelabelings list
-[]
+      
+[]
+
 

Service Monitor metricRelabelings

@@ -1256,8 +1421,9 @@ false
serviceMonitor.relabelings list
-[]
+      
+[]
+
 

Service Monitor relabelings

@@ -1266,53 +1432,71 @@ false
statefulset object
-clusterMode: false
+      
+clusterMode: false
 enabled: false
 replicationFactor: 1
 updateStrategy: {}
+
 

ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/

+

K8s StatefulSet specific variables

statefulset.clusterMode bool
-false
+      
+false
+
 

create cluster of vmagents. See https://docs.victoriametrics.com/vmagent#scraping-big-number-of-targets available since 1.77.2 version https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.77.2

+

create cluster of vmagents. Check here available since v1.77.2

statefulset.replicationFactor int
-1
+      
+1
+
 

replication factor for vmagent in cluster mode

tolerationslist
-[]
+      
statefulset.updateStrategyobject
+{}
+
 

StatefulSet update strategy. Check here for details.

+
tolerationslist
+[]
+
+
+

Node tolerations for server scheduling to nodes with taints. Details are here

+
topologySpreadConstraints list
-[]
+      
+[]
+
 

Pod topologySpreadConstraints

+
diff --git a/docs/helm/victoria-metrics-alert/README.md b/docs/helm/victoria-metrics-alert/README.md index 517d598cb..339848074 100644 --- a/docs/helm/victoria-metrics-alert/README.md +++ b/docs/helm/victoria-metrics-alert/README.md @@ -125,157 +125,129 @@ The following tables lists the configurable parameters of the chart and their de Change the values according to the need of the environment in ``victoria-metrics-alert/values.yaml`` file. - +
- - - - + + + + - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + - - + - - + - - + - - - - - - - + - - + - - + - - + - - + + + + + + + - - - - + - - - + - - + - - - - - - - - - + - - + - + - - - - - - - - - - + - - - - - - - - + - - + - - - + + - + - - + - - + - - - - - - + - - + - - + - - + - - + - - - - - - - - - - - - - - - - + - - + - - + - - + - - - - + + - + - - + - - + - - - - - - - - + - - + - - + - - + - - + - - - - + + - + - - - - - - - - - + - - - - + - - - + + - - - - - - - - - - - - - - - - - - - + - - - - + - - + - - + - - + - - + + + + + + + - - - - + - - - - - - - + - - + - - + - - - - - - - - - + - - - + + - + - - + - - - - - - - + + + + + + - - - - + - - - - - - + - - + - - + - - - + + - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - - - + - - - - - - - - - - - - -
KeyTypeDefaultDescriptionKeyTypeDefaultDescription
alertmanager.baseURL string
-""
+      
+""
+
 

external URL, that alertmanager will expose to receivers

+

External URL, that alertmanager will expose to receivers

alertmanager.baseURLPrefix string
-""
+      
+""
+
 

external URL Prefix, Prefix for the internal routes of web endpoints

+

External URL Prefix, Prefix for the internal routes of web endpoints

alertmanager.config.global.resolve_timeoutstring
-5m
+      
alertmanager.configobject
+global:
+    resolve_timeout: 5m
+receivers:
+    - name: devnull
+route:
+    group_by:
+        - alertname
+    group_interval: 10s
+    group_wait: 30s
+    receiver: devnull
+    repeat_interval: 24h
+
 
alertmanager.config.receivers[0].namestring
-devnull
-
+

Alertmanager configuration

alertmanager.config.route.group_by[0]string
-alertname
-
-
alertmanager.config.route.group_intervalstring
-10s
-
-
alertmanager.config.route.group_waitstring
-30s
-
-
alertmanager.config.route.receiverstring
-devnull
-
-
alertmanager.config.route.repeat_intervalstring
-24h
-
-
alertmanager.configMap string
-""
+      
+""
+
 

use existing configmap if specified otherwise .config values will be used

+

Use existing configmap if specified otherwise .config values will be used

alertmanager.emptyDir object
-{}
+      
+{}
+
 

Empty dir configuration if persistence is disabled for Alertmanager

+
alertmanager.enabled bool
-false
+      
+false
+
 

Create alertmanager resources

+
alertmanager.envFrom list
-[]
+      
+[]
+
 

Specify alternative source for env variables

+
alertmanager.extraArgs object
-{}
+      
+{}
+
 

Extra command line arguments for container of component

+
alertmanager.extraContainers list
-[]
+      
+[]
+
 

Extra containers to run in a pod with alertmanager

+
alertmanager.extraHostPathMounts list
-[]
+      
+[]
+
 

Additional hostPath mounts

@@ -284,8 +256,9 @@ false
alertmanager.extraVolumeMounts list
-[]
+      
+[]
+
 

Extra Volume Mounts for the container

@@ -294,8 +267,9 @@ false
alertmanager.extraVolumes list
-[]
+      
+[]
+
 

Extra Volumes for the pod

@@ -304,84 +278,110 @@ false
alertmanager.image object
-registry: ""
+      
+registry: ""
 repository: prom/alertmanager
 tag: v0.25.0
+
 

alertmanager image configuration

+

Alertmanager image configuration

alertmanager.imagePullSecrets list
-[]
+      
+[]
+
 

Image pull secrets

+
alertmanager.ingress.annotations object
-{}
+      
+{}
+
 

Ingress annotations

+
alertmanager.ingress.enabled bool
-false
+      
+false
+
 

Enable deployment of ingress for alertmanager component

+
alertmanager.ingress.extraLabels object
-{}
+      
+{}
+
 

Ingress extra labels

+
alertmanager.ingress.hosts list
-[]
+      
+[]
+
 

Array of host objects

+
alertmanager.ingress.ingressClassNamestring
+""
+
+
+

Ingress controller class name

+
alertmanager.ingress.pathType string
-Prefix
+      
+Prefix
+
 

pathType is only for k8s >= 1.1=

+

Ingress path type

alertmanager.ingress.tls list
-[]
+      
+[]
+
 

Array of TLS objects

+
alertmanager.initContainers list
-[]
+      
+[]
+
 

Additional initContainers to initialize the pod

@@ -390,26 +390,31 @@ Prefix
alertmanager.listenAddress string
-0.0.0.0:9093
+      
+0.0.0.0:9093
+
 

Alertmanager listen address

+
alertmanager.nodeSelector object
-{}
+      
+{}
+
 

Pod’s node selector. Details are here

+
alertmanager.persistentVolume.accessModes list
-- ReadWriteOnce
+      
+- ReadWriteOnce
+
 

Array of access modes. Must match those of existing PV or dynamic provisioner. Details are here

@@ -418,8 +423,9 @@ Prefix
alertmanager.persistentVolume.annotations object
-{}
+      
+{}
+
 

Persistant volume annotations

@@ -428,8 +434,9 @@ Prefix
alertmanager.persistentVolume.enabled bool
-false
+      
+false
+
 

Create/use Persistent Volume Claim for alertmanager component. Empty dir if false

@@ -438,8 +445,9 @@ false
alertmanager.persistentVolume.existingClaim string
-""
+      
+""
+
 

Existing Claim name. If defined, PVC must be created manually before volume will be bound

@@ -448,8 +456,9 @@ false
alertmanager.persistentVolume.mountPath string
-/data
+      
+/data
+
 

Mount path. Alertmanager data Persistent Volume mount root path.

@@ -458,8 +467,9 @@ false
alertmanager.persistentVolume.size string
-50Mi
+      
+50Mi
+
 

Size of the volume. Better to set the same as resource limit memory property.

@@ -468,8 +478,9 @@ false
alertmanager.persistentVolume.storageClassName string
-""
+      
+""
+
 

StorageClass to use for persistent volume. Requires alertmanager.persistentVolume.enabled: true. If defined, PVC created automatically

@@ -478,314 +489,339 @@ false
alertmanager.persistentVolume.subPath string
-""
+      
+""
+
 

Mount subpath

alertmanager.podMetadata.annotationsalertmanager.podMetadata object
-{}
+      
+annotations: {}
+labels: {}
+
 

Alertmanager Pod metadata

+
alertmanager.podMetadata.labelsalertmanager.podSecurityContext object
-{}
+      
+enabled: false
+
 
alertmanager.podSecurityContext.enabledbool
-false
-
+

Pod’s security context. Details are here

alertmanager.priorityClassName string
-""
+      
+""
+
 

Name of Priority Class

+
alertmanager.probe.liveness object
-httpGet:
+      
+httpGet:
     path: '{{ ternary "" .baseURLPrefix (empty .baseURLPrefix) }}/-/healthy'
     port: web
+
 

liveness probe

+

Liveness probe

alertmanager.probe.readiness object
-httpGet:
+      
+httpGet:
     path: '{{ ternary "" .baseURLPrefix (empty .baseURLPrefix) }}/-/ready'
     port: web
+
 

readiness probe

+

Readiness probe

alertmanager.probe.startup object
-httpGet:
+      
+httpGet:
     path: '{{ ternary "" .baseURLPrefix (empty .baseURLPrefix) }}/-/ready'
     port: web
+
 

startup probe

+

Startup probe

alertmanager.resources object
-{}
+      
+{}
+
 

Resource object. Details are here

+
alertmanager.retention string
-120h
+      
+120h
+
 

Alertmanager retention

+
alertmanager.securityContext.enabledbool
-false
+      
alertmanager.securityContextobject
+enabled: false
+
 

Security context to be added to server pods

+
alertmanager.service.annotations object
-{}
+      
+{}
+
 

Service annotations

+
alertmanager.service.clusterIP string
-""
+      
+""
+
 

Service ClusterIP

+
alertmanager.service.externalIPs list
-[]
+      
+[]
+
 

Ref: https://kubernetes.io/docs/user-guide/services/#external-ips

+

Service external IPs. Check here for details

alertmanager.service.externalTrafficPolicy string
-""
+      
+""
+
 

Ref: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip

+

Service external traffic policy. Check here for details

alertmanager.service.healthCheckNodePort string
-""
+      
+""
+
 

Health check node port for a service. Check here for details

+
alertmanager.service.ipFamilies list
-[]
+      
+[]
+
 

List of service IP families. Check here for details.

+
alertmanager.service.ipFamilyPolicy string
-""
+      
+""
+
 

Service IP family policy. Check here for details.

+
alertmanager.service.labels object
-{}
+      
+{}
+
 

Service labels

+
alertmanager.service.loadBalancerIP string
-""
+      
+""
+
 

Service load balacner IP

+
alertmanager.service.loadBalancerSourceRanges list
-[]
+      
+[]
+
 
alertmanager.service.nodePortstring
-""
-
+

Load balancer source range

if you want to force a specific nodePort. Must be use with service.type=NodePort

-
alertmanager.service.portint
-9093
-
-
alertmanager.service.servicePort int
-8880
+      
+8880
+
 

Service port

+
alertmanager.service.type string
-ClusterIP
+      
+ClusterIP
+
 

Service type

+
alertmanager.templates object
-{}
+      
+{}
+
 

Alertmanager extra templates

+
alertmanager.tolerations list
-[]
+      
+[]
+
 

Node tolerations for server scheduling to nodes with taints. Details are here

+
extraObjects list
-[]
+      
+[]
+
 

Add extra specs dynamically to this chart

global.compatibility.openshift.adaptSecurityContextstring
-auto
+      
global.compatibilityobject
+openshift:
+    adaptSecurityContext: auto
+
 

Openshift security context compatibility configuration

+
global.image.registry string
-""
+      
+""
+
 

Image registry, that can be shared across multiple helm charts

+
global.imagePullSecrets list
-[]
+      
+[]
+
 

Image pull secrets, that can be shared across multiple helm charts

+
license object
-key: ""
+      
+key: ""
 secret:
     key: ""
     name: ""
+
 

Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Documentation - https://docs.victoriametrics.com/enterprise, for more information, visit https://victoriametrics.com/products/enterprise/ . To request a trial license, go to https://victoriametrics.com/products/enterprise/trial/ Supported starting from VictoriaMetrics v1.94.0

+

Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Check docs here, for more information, visit site. Request a trial license here Supported starting from VictoriaMetrics v1.94.0

license.key string
-""
+      
+""
+
 

License key

@@ -794,9 +830,10 @@ secret:
license.secret object
-key: ""
+      
+key: ""
 name: ""
+
 

Use existing secret with license key

@@ -805,8 +842,9 @@ name: ""
license.secret.key string
-""
+      
+""
+
 

Key in secret with license key

@@ -815,8 +853,9 @@ name: ""
license.secret.name string
-""
+      
+""
+
 

Existing secret name

@@ -825,99 +864,116 @@ name: ""
rbac.annotations object
-{}
+      
+{}
+
 

Role/RoleBinding annotations

+
rbac.create bool
-true
+      
+true
+
 

Enables Role/RoleBinding creation

+
rbac.extraLabels object
-{}
+      
+{}
+
 

Role/RoleBinding labels

+
rbac.namespaced bool
-false
+      
+false
+
 

If true and rbac.enabled, will deploy a Role/RoleBinding instead of a ClusterRole/ClusterRoleBinding

+
server.affinity object
-{}
+      
+{}
+
 

Pod affinity

+
server.annotations object
-{}
+      
+{}
+
 

Annotations to be added to the deployment

server.config.alerts.groupslist
-[]
+      
server.configobject
+alerts:
+    groups: []
+
 

VMAlert configuration

+
server.configMap string
-""
+      
+""
+
 

vmalert alert rules configuration configuration: use existing configmap if specified otherwise .config values will be used

+

VMAlert alert rules configuration configuration. Use existing configmap if specified

server.datasource object
-basicAuth:
+      
+basicAuth:
     password: ""
     username: ""
 bearer:
     token: ""
     tokenFile: ""
 url: ""
+
 

vmalert reads metrics from source, next section represents its configuration. It can be any service which supports MetricsQL or PromQL.

+

VMAlert reads metrics from source, next section represents its configuration. It can be any service which supports MetricsQL or PromQL.

server.datasource.basicAuth object
-password: ""
+      
+password: ""
 username: ""
+
 

Basic auth for datasource

@@ -926,8 +982,9 @@ username: ""
server.datasource.bearer.token string
-""
+      
+""
+
 

Token with Bearer token. You can use one of token or tokenFile. You don’t need to add “Bearer” prefix string

@@ -936,8 +993,9 @@ username: ""
server.datasource.bearer.tokenFile string
-""
+      
+""
+
 

Token Auth file with Bearer token. You can use one of token or tokenFile

@@ -946,63 +1004,55 @@ username: ""
server.enabled bool
-true
+      
+true
+
 

Create vmalert component

+
server.env list
-[]
+      
+[]
+
 

Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

+

Additional environment variables (ex.: secret tokens, flags). Check here for details.

server.envFrom list
-[]
+      
+[]
+
 

Specify alternative source for env variables

+
server.extraArgs."envflag.enable"string
-"true"
+      
server.extraArgsobject
+envflag.enable: "true"
+envflag.prefix: VM_
+loggerFormat: json
+
 
server.extraArgs."envflag.prefix"string
-VM_
-
+

Extra command line arguments for container of component

server.extraArgs.loggerFormatstring
-json
-
-
server.extraContainers list
-[]
+      
+[]
+
 

Additional containers to run in the same pod

@@ -1011,8 +1061,9 @@ json
server.extraHostPathMounts list
-[]
+      
+[]
+
 

Additional hostPath mounts

@@ -1021,8 +1072,9 @@ json
server.extraVolumeMounts list
-[]
+      
+[]
+
 

Extra Volume Mounts for the container

@@ -1031,8 +1083,9 @@ json
server.extraVolumes list
-[]
+      
+[]
+
 

Extra Volumes for the pod

@@ -1041,95 +1094,123 @@ json
server.fullnameOverride string
-""
+      
+""
+
 

Full name prefix override

+
server.image object
-pullPolicy: IfNotPresent
+      
+pullPolicy: IfNotPresent
 registry: ""
 repository: victoriametrics/vmalert
 tag: ""
 variant: ""
+
 

vmalert image configuration

+

VMAlert image configuration

server.imagePullSecrets list
-[]
+      
+[]
+
 

Image pull secrets

+
server.ingress.annotations object
-{}
+      
+{}
+
 

Ingress annotations

+
server.ingress.enabled bool
-false
+      
+false
+
 

Enable deployment of ingress for vmalert component

+
server.ingress.extraLabels object
-{}
+      
+{}
+
 

Ingress extra labels

+
server.ingress.hosts list
-[]
+      
+[]
+
 

Array of host objects

+
server.ingress.ingressClassNamestring
+""
+
+
+

Ingress controller class name

+
server.ingress.pathType string
-Prefix
+      
+Prefix
+
 

pathType is only for k8s >= 1.1=

+

Ingress path type

server.ingress.tls list
-[]
+      
+[]
+
 

Array of TLS objects

+
server.initContainers list
-[]
+      
+[]
+
 

Additional initContainers to initialize the pod

@@ -1138,55 +1219,63 @@ Prefix
server.labels object
-{}
+      
+{}
+
 

labels to be added to the deployment

+

Labels to be added to the deployment

server.minReadySeconds int
-0
+      
+0
+
 

specifies the minimum number of seconds for which a newly created Pod should be ready without any of its containers crashing/terminating 0 is the standard k8s default

+

Specifies the minimum number of seconds for which a newly created Pod should be ready without any of its containers crashing/terminating 0 is the standard k8s default

server.name string
-server
+      
+server
+
 

Override fullname suffix

+
server.nameOverride string
-""
+      
+""
+
 

Full name suffix override

+
server.nodeSelector object
-{}
+      
+{}
+
 

Pod’s node selector. Details are here

+
server.notifier object
-alertmanager:
+      
+alertmanager:
     basicAuth:
         password: ""
         username: ""
@@ -1194,6 +1283,7 @@ alertmanager:
         token: ""
         tokenFile: ""
     url: ""
+
 

Notifier to use for alerts. Multiple notifiers can be enabled by using notifiers section

@@ -1202,9 +1292,10 @@ alertmanager:
server.notifier.alertmanager.basicAuth object
-password: ""
+      
+password: ""
 username: ""
+
 

Basic auth for alertmanager

@@ -1213,8 +1304,9 @@ username: ""
server.notifier.alertmanager.bearer.token string
-""
+      
+""
+
 

Token with Bearer token. You can use one of token or tokenFile. You don’t need to add “Bearer” prefix string

@@ -1223,8 +1315,9 @@ username: ""
server.notifier.alertmanager.bearer.tokenFile string
-""
+      
+""
+
 

Token Auth file with Bearer token. You can use one of token or tokenFile

@@ -1233,8 +1326,9 @@ username: ""
server.notifiers list
-[]
+      
+[]
+
 

Additional notifiers to use for alerts

@@ -1243,8 +1337,9 @@ username: ""
server.podAnnotations object
-{}
+      
+{}
+
 

Annotations to be added to pod

@@ -1253,9 +1348,10 @@ username: ""
server.podDisruptionBudget object
-enabled: false
+      
+enabled: false
 labels: {}
+
 

See kubectl explain poddisruptionbudget.spec for more. Or check docs

@@ -1264,84 +1360,107 @@ labels: {}
server.podLabels object
-{}
+      
+{}
+
 

Pod’s additional labels

+
server.podSecurityContext.enabledbool
-true
+      
server.podSecurityContextobject
+enabled: true
+
 

Pod’s security context. Details are here

+
server.priorityClassName string
-""
+      
+""
+
 

Name of Priority Class

+
server.probe.liveness object
-failureThreshold: 3
+      
+failureThreshold: 3
 initialDelaySeconds: 5
 periodSeconds: 15
 tcpSocket: {}
 timeoutSeconds: 5
+
 

liveness probe

+

Liveness probe

server.probe.readiness object
-failureThreshold: 3
+      
+failureThreshold: 3
 httpGet: {}
 initialDelaySeconds: 5
 periodSeconds: 15
 timeoutSeconds: 5
+
 

readiness probe

+

Readiness probe

server.probe.startup object
-{}
+      
+{}
+
 

startup probe

+

Startup probe

server.remote.read.basicAuth object
-password: ""
+      
+password: ""
 username: ""
+
 

Basic auth for remote read

+
server.remote.read.bearerobject
+token: ""
+tokenFile: ""
+
+
+

Auth based on Bearer token for remote read

server.remote.read.bearer.token string
-""
+      
+""
+
 

Token with Bearer token. You can use one of token or tokenFile. You don’t need to add “Bearer” prefix string

@@ -1350,8 +1469,9 @@ username: ""
server.remote.read.bearer.tokenFile string
-""
+      
+""
+
 

Token Auth file with Bearer token. You can use one of token or tokenFile

@@ -1360,18 +1480,21 @@ username: ""
server.remote.read.url string
-""
+      
+""
+
 

VMAlert remote read URL

+
server.remote.write.basicAuth object
-password: ""
+      
+password: ""
 username: ""
+
 

Basic auth for remote write

@@ -1380,9 +1503,10 @@ username: ""
server.remote.write.bearer object
-token: ""
+      
+token: ""
 tokenFile: ""
+
 

Auth based on Bearer token for remote write

@@ -1391,8 +1515,9 @@ tokenFile: ""
server.remote.write.bearer.token string
-""
+      
+""
+
 

Token with Bearer token. You can use one of token or tokenFile. You don’t need to add “Bearer” prefix string

@@ -1401,8 +1526,9 @@ tokenFile: ""
server.remote.write.bearer.tokenFile string
-""
+      
+""
+
 

Token Auth file with Bearer token. You can use one of token or tokenFile

@@ -1411,174 +1537,210 @@ tokenFile: ""
server.remote.write.url string
-""
+      
+""
+
 

VMAlert remote write URL

+
server.replicaCount int
-1
+      
+1
+
 

Replica count

+
server.resources object
-{}
+      
+{}
+
 

Resource object. Details are here

+
server.securityContext.enabledbool
-true
+      
server.securityContextobject
+enabled: true
+
 

Security context to be added to server pods

+
server.service.annotations object
-{}
+      
+{}
+
 

Service annotations

+
server.service.clusterIP string
-""
+      
+""
+
 

Service ClusterIP

+
server.service.externalIPs list
-[]
+      
+[]
+
 

Service external IPs. Check here for details

+
server.service.externalTrafficPolicy string
-""
+      
+""
+
 

Service external traffic policy. Check here for details

+
server.service.healthCheckNodePort string
-""
+      
+""
+
 

Health check node port for a service. Check here for details

+
server.service.ipFamilies list
-[]
+      
+[]
+
 

List of service IP families. Check here for details.

+
server.service.ipFamilyPolicy string
-""
+      
+""
+
 

Service IP family policy. Check here for details.

+
server.service.labels object
-{}
+      
+{}
+
 

Service labels

+
server.service.loadBalancerIP string
-""
+      
+""
+
 

Service load balacner IP

+
server.service.loadBalancerSourceRanges list
-[]
+      
+[]
+
 

Load balancer source range

+
server.service.servicePort int
-8880
+      
+8880
+
 

Service port

+
server.service.type string
-ClusterIP
+      
+ClusterIP
+
 

Service type

+
server.strategy object
-rollingUpdate:
+      
+rollingUpdate:
     maxSurge: 25%
     maxUnavailable: 25%
 type: RollingUpdate
+
 

deployment strategy, set to standard k8s default

+

Deployment strategy, set to standard k8s default

server.tolerations list
-[]
+      
+[]
+
 

Node tolerations for server scheduling to nodes with taints. Details are here

+
server.verticalPodAutoscaler object
-enabled: false
+      
+enabled: false
+
 

Vertical Pod Autoscaler

@@ -1587,8 +1749,9 @@ enabled: false
server.verticalPodAutoscaler.enabled bool
-false
+      
+false
+
 

Use VPA for vmalert

@@ -1597,8 +1760,9 @@ false
serviceAccount.annotations object
-{}
+      
+{}
+
 

Annotations to add to the service account

@@ -1607,18 +1771,20 @@ false
serviceAccount.automountToken bool
-true
+      
+true
+
 

mount API token to pod directly

+

Mount API token to pod directly

serviceAccount.create bool
-true
+      
+true
+
 

Specifies whether a service account should be created

@@ -1627,8 +1793,9 @@ true
serviceAccount.name string
-null
+      
+null
+
 

The name of the service account to use. If not set and create is true, a name is generated using the fullname template

@@ -1637,8 +1804,9 @@ null
serviceMonitor.annotations object
-{}
+      
+{}
+
 

Service Monitor annotations

@@ -1647,8 +1815,9 @@ null
serviceMonitor.basicAuth object
-{}
+      
+{}
+
 

Basic auth params for Service Monitor

@@ -1657,8 +1826,9 @@ null
serviceMonitor.enabled bool
-false
+      
+false
+
 

Enable deployment of Service Monitor for server component. This is Prometheus operator object

@@ -1667,8 +1837,9 @@ false
serviceMonitor.extraLabels object
-{}
+      
+{}
+
 

Service Monitor labels

@@ -1677,8 +1848,9 @@ false
serviceMonitor.metricRelabelings list
-[]
+      
+[]
+
 

Service Monitor metricRelabelings

@@ -1687,8 +1859,9 @@ false
serviceMonitor.relabelings list
-[]
+      
+[]
+
 

Service Monitor relabelings

diff --git a/docs/helm/victoria-metrics-anomaly/README.md b/docs/helm/victoria-metrics-anomaly/README.md index 286554f3a..6fd6a3512 100644 --- a/docs/helm/victoria-metrics-anomaly/README.md +++ b/docs/helm/victoria-metrics-anomaly/README.md @@ -131,19 +131,20 @@ For more `vmanomaly` config parameters see https://docs.victoriametrics.com/anom Change the values according to the need of the environment in ``victoria-metrics-anomaly/values.yaml`` file. - +
- - - - + + + + - - - - - - - - - - - - - - - - - - - - + - - + - - - + - - + - - + - - - - - + - - - + + - + - - + - - + - - - - - - + - - - - - - - + - - - - - - - - - - - - - + - - + - - + - - - + + - + - - + - - - - - -
KeyTypeDefaultDescriptionKeyTypeDefaultDescription
affinity object
-{}
+      
+{}
+
 

Affinity configurations

@@ -152,8 +153,9 @@ Change the values according to the need of the environment in ``victoria-metrics
annotations object
-{}
+      
+{}
+
 

Annotations to be added to the deployment

@@ -162,8 +164,8 @@ Change the values according to the need of the environment in ``victoria-metrics
config object
-models: {}
+      
+models: {}
 preset: ""
 reader:
     class: vm
@@ -176,6 +178,7 @@ writer:
     class: vm
     datasource_url: ""
     tenant_id: ""
+
 

Full vmanomaly config section

@@ -184,8 +187,9 @@ writer:
config.models object
-{}
+      
+{}
+
 

Models section

@@ -194,8 +198,9 @@ writer:
config.preset string
-""
+      
+""
+
 

Whether to use preset configuration. If not empty, preset name should be specified.

@@ -204,12 +209,13 @@ writer:
config.reader object
-class: vm
+      
+class: vm
 datasource_url: ""
 queries: {}
 sampling_period: 1m
 tenant_id: ""
+
 

Reader section

@@ -218,8 +224,9 @@ tenant_id: ""
config.reader.class string
-vm
+      
+vm
+
 

Name of the class needed to enable reading from VictoriaMetrics or Prometheus. VmReader is the default option, if not specified.

@@ -228,8 +235,9 @@ vm
config.reader.datasource_url string
-""
+      
+""
+
 

Datasource URL address. Required for example http://single-victoria-metrics-single-server.default.svc.cluster.local:8428 or http://cluster-victoria-metrics-cluster-vminsert.default.svc.cluster.local:8480

@@ -238,18 +246,20 @@ vm
config.reader.queries object
-{}
+      
+{}
+
 

Required. PromQL/MetricsQL query to select data in format: QUERY_ALIAS: “QUERY”. As accepted by “/query_range?query=%s”. See https://docs.victoriametrics.com/anomaly-detection/components/reader/#per-query-parameters for more details.

+

Required. PromQL/MetricsQL query to select data in format: QUERY_ALIAS: “QUERY”. As accepted by “/query_range?query=%s”. See here for more details.

config.reader.sampling_period string
-1m
+      
+1m
+
 

Frequency of the points returned. Will be converted to /query_range?step=%s param (in seconds). Required since 1.9.0.

@@ -258,8 +268,9 @@ vm
config.reader.tenant_id string
-""
+      
+""
+
 

For VictoriaMetrics Cluster version only, tenants are identified by accountID or accountID:projectID. See VictoriaMetrics Cluster multitenancy docs

@@ -268,8 +279,9 @@ vm
config.schedulers object
-{}
+      
+{}
+
 

Scheduler section

@@ -278,10 +290,11 @@ vm
config.writer object
-class: vm
+      
+class: vm
 datasource_url: ""
 tenant_id: ""
+
 

Writer section

@@ -290,8 +303,9 @@ tenant_id: ""
config.writer.class string
-vm
+      
+vm
+
 

Name of the class needed to enable writing to VictoriaMetrics or Prometheus. VmWriter is the default option, if not specified.

@@ -300,8 +314,9 @@ vm
config.writer.datasource_url string
-""
+      
+""
+
 

Datasource URL address. Required for example http://single-victoria-metrics-single-server.default.svc.cluster.local:8428 or http://cluster-victoria-metrics-cluster-vminsert.default.svc.cluster.local:8480

@@ -310,8 +325,9 @@ vm
config.writer.tenant_id string
-""
+      
+""
+
 

For VictoriaMetrics Cluster version only, tenants are identified by accountID or accountID:projectID. See VictoriaMetrics Cluster multitenancy docs

@@ -320,8 +336,9 @@ vm
configMapAnnotations object
-{}
+      
+{}
+
 

Annotations to be added to configMap

@@ -330,26 +347,31 @@ vm
containerWorkingDir string
-/vmanomaly
+      
+/vmanomaly
+
 

Container working directory

+
emptyDir object
-{}
+      
+{}
+
 

Empty dir configuration when persistence is disabled

+
env list
-[]
+      
+[]
+
 

Additional environment variables (ex.: secret tokens, flags)

@@ -358,35 +380,42 @@ vm
envFrom list
-[]
+      
+[]
+
 

Specify alternative source for env variables

+
extraArgs object
-{}
+      
+{}
+
 

Extra command line arguments for container of component

+
extraContainers list
-[]
+      
+[]
+
 

Extra containers to run in a pod with anomaly container

+
extraHostPathMounts list
-[]
+      
+[]
+
 

Additional hostPath mounts

@@ -395,8 +424,9 @@ vm
extraVolumeMounts list
-[]
+      
+[]
+
 

Extra Volume Mounts for the container

@@ -405,8 +435,9 @@ vm
extraVolumes list
-[]
+      
+[]
+
 

Extra Volumes for the pod

@@ -415,44 +446,54 @@ vm
fullnameOverride string
-""
+      
+""
+
 

Full name prefix override

+
global.compatibility.openshift.adaptSecurityContextstring
-auto
+      
global.compatibilityobject
+openshift:
+    adaptSecurityContext: auto
+
 

Openshift security context compatibility configuration

+
global.image.registry string
-""
+      
+""
+
 

Image registry, that can be shared across multiple helm charts

+
global.imagePullSecrets list
-[]
+      
+[]
+
 

Image pull secrets, that can be shared across multiple helm charts

+
image.pullPolicy string
-IfNotPresent
+      
+IfNotPresent
+
 

Pull policy of Docker image

@@ -461,8 +502,9 @@ IfNotPresent
image.registry string
-""
+      
+""
+
 

Victoria Metrics anomaly Docker registry

@@ -471,8 +513,9 @@ IfNotPresent
image.repository string
-victoriametrics/vmanomaly
+      
+victoriametrics/vmanomaly
+
 

Victoria Metrics anomaly Docker repository and image name

@@ -481,8 +524,9 @@ victoriametrics/vmanomaly
image.tag string
-v1.15.9
+      
+v1.15.9
+
 

Tag of Docker image

@@ -491,20 +535,23 @@ v1.15.9
imagePullSecrets list
-[]
+      
+[]
+
 

Image pull secrets

+
license object
-key: ""
+      
+key: ""
 secret:
     key: ""
     name: ""
+
 

License key configuration for vmanomaly. See docs Required starting from v1.5.0.

@@ -513,8 +560,9 @@ secret:
license.key string
-""
+      
+""
+
 

License key for vmanomaly

@@ -523,9 +571,10 @@ secret:
license.secret object
-key: ""
+      
+key: ""
 name: ""
+
 

Use existing secret with license key for vmanomaly

@@ -534,8 +583,9 @@ name: ""
license.secret.key string
-""
+      
+""
+
 

Key in secret with license key

@@ -544,8 +594,9 @@ name: ""
license.secret.name string
-""
+      
+""
+
 

Existing secret name

@@ -554,17 +605,20 @@ name: ""
nameOverride string
-""
+      
+""
+
 

Full name suffix override

+
nodeSelector object
-{}
+      
+{}
+
 

NodeSelector configurations. Details are here

@@ -573,8 +627,8 @@ name: ""
persistentVolume object
-accessModes:
+      
+accessModes:
     - ReadWriteOnce
 annotations: {}
 enabled: false
@@ -582,6 +636,7 @@ existingClaim: ""
 matchLabels: {}
 size: 1Gi
 storageClassName: ""
+
 

Persistence to store models on disk. Available starting from v1.13.0

@@ -590,8 +645,9 @@ storageClassName: ""
persistentVolume.accessModes list
-- ReadWriteOnce
+      
+- ReadWriteOnce
+
 

Array of access modes. Must match those of existing PV or dynamic provisioner. Details are here

@@ -600,8 +656,9 @@ storageClassName: ""
persistentVolume.annotations object
-{}
+      
+{}
+
 

Persistant volume annotations

@@ -610,8 +667,9 @@ storageClassName: ""
persistentVolume.enabled bool
-false
+      
+false
+
 

Create/use Persistent Volume Claim for models dump.

@@ -620,8 +678,9 @@ false
persistentVolume.existingClaim string
-""
+      
+""
+
 

Existing Claim name. If defined, PVC must be created manually before volume will be bound

@@ -630,8 +689,9 @@ false
persistentVolume.matchLabels object
-{}
+      
+{}
+
 

Bind Persistent Volume by labels. Must match all labels of targeted PV.

@@ -640,8 +700,9 @@ false
persistentVolume.size string
-1Gi
+      
+1Gi
+
 

Size of the volume. Should be calculated based on the metrics you send and retention policy you set.

@@ -650,8 +711,9 @@ false
persistentVolume.storageClassName string
-""
+      
+""
+
 

StorageClass to use for persistent volume. Requires server.persistentVolume.enabled: true. If defined, PVC created automatically

@@ -660,8 +722,9 @@ false
podAnnotations object
-{}
+      
+{}
+
 

Annotations to be added to pod

@@ -670,10 +733,11 @@ false
podDisruptionBudget object
-enabled: false
+      
+enabled: false
 labels: {}
 minAvailable: 1
+
 

See kubectl explain poddisruptionbudget.spec for more. Details are here

@@ -682,66 +746,78 @@ minAvailable: 1
podMonitor.annotations object
-{}
+      
+{}
+
 

PodMonitor annotations

+
podMonitor.enabled bool
-false
+      
+false
+
 

Enable PodMonitor

+
podMonitor.extraLabels object
-{}
+      
+{}
+
 

PodMonitor labels

+
podSecurityContext.enabledbool
-true
+      
podSecurityContextobject
+enabled: true
+
 

Pod’s security context. Details are here

+
resources object
-{}
+      
+{}
+
 

Resource object. Details are here

+
securityContext object
-enabled: true
+      
+enabled: true
 runAsGroup: 1000
 runAsNonRoot: true
 runAsUser: 1000
+
 

Ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/

+

Check here for details.

serviceAccount.annotations object
-{}
+      
+{}
+
 

Annotations to add to the service account

@@ -750,8 +826,9 @@ runAsUser: 1000
serviceAccount.create bool
-true
+      
+true
+
 

Specifies whether a service account should be created

@@ -760,8 +837,9 @@ true
serviceAccount.name string
-null
+      
+null
+
 

The name of the service account to use. If not set and create is true, a name is generated using the fullname template

@@ -770,8 +848,9 @@ null
tolerations list
-[]
+      
+[]
+
 

Tolerations configurations. Details are here

diff --git a/docs/helm/victoria-metrics-auth/README.md b/docs/helm/victoria-metrics-auth/README.md index e03f44a93..844662692 100644 --- a/docs/helm/victoria-metrics-auth/README.md +++ b/docs/helm/victoria-metrics-auth/README.md @@ -118,19 +118,20 @@ The following tables lists the configurable parameters of the chart and their de Change the values according to the need of the environment in ``victoria-metrics-auth/values.yaml`` file. - +
- - - - + + + + - - - - @@ -168,63 +172,55 @@ null - - - - + - - - + + - - - - - - - - - - - - - - - + - - - - - - - + - - - + + - + - - + - - + - - - - - - + - - + - - + - - + - - + - - + + + + + + + - - - - + - - + - - + - - + - - + + + + + + + - - - - + - - - - - - - - + - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - - - - - - - - - - diff --git a/docs/helm/victoria-metrics-cluster/README.md b/docs/helm/victoria-metrics-cluster/README.md index 7f29cb591..3e1dedbb2 100644 --- a/docs/helm/victoria-metrics-cluster/README.md +++ b/docs/helm/victoria-metrics-cluster/README.md @@ -124,29 +124,31 @@ The following tables lists the configurable parameters of the chart and their de Change the values according to the need of the environment in ``victoria-metrics-cluster/values.yaml`` file. -
KeyTypeDefaultDescriptionKeyTypeDefaultDescription
affinity object
-{}
+      
+{}
+
 

Affinity configurations

@@ -139,8 +140,9 @@ Change the values according to the need of the environment in ``victoria-metrics
annotations object
-{}
+      
+{}
+
 

Annotations to be added to the deployment

@@ -149,8 +151,9 @@ Change the values according to the need of the environment in ``victoria-metrics
config string
-null
+      
+null
+
 

Config file content.

@@ -159,8 +162,9 @@ null
containerWorkingDir string
-/
+      
+/
+
 
env list
-[]
+      
+[]
+
 

Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

+

Additional environment variables (ex.: secret tokens, flags). Check here for details

envFrom list
-[]
+      
+[]
+
 

Specify alternative source for env variables

+
extraArgs."envflag.enable"string
-"true"
+      
extraArgsobject
+envflag.enable: "true"
+envflag.prefix: VM_
+loggerFormat: json
+
 
extraArgs."envflag.prefix"string
-VM_
-
+

Extra command line arguments for container of component

extraArgs.loggerFormatstring
-json
-
-
extraContainers list
-[]
+      
+[]
+
 

Extra containers to run in a pod with vmauth

+
extraHostPathMounts list
-[]
+      
+[]
+
 

Additional hostPath mounts

@@ -233,8 +229,9 @@ json
extraLabels object
-{}
+      
+{}
+
 

Labels to be added to the deployment and pods

@@ -243,8 +240,9 @@ json
extraObjects list
-[]
+      
+[]
+
 

Add extra specs dynamically to this chart

@@ -253,8 +251,9 @@ json
extraVolumeMounts list
-[]
+      
+[]
+
 

Extra Volume Mounts for the container

@@ -263,8 +262,9 @@ json
extraVolumes list
-[]
+      
+[]
+
 

Extra Volumes for the pod

@@ -273,44 +273,54 @@ json
fullnameOverride string
-""
+      
+""
+
 

Full name prefix override

+
global.compatibility.openshift.adaptSecurityContextstring
-auto
+      
global.compatibilityobject
+openshift:
+    adaptSecurityContext: auto
+
 

Openshift security context compatibility configuration

+
global.image.registry string
-""
+      
+""
+
 

Image registry, that can be shared across multiple helm charts

+
global.imagePullSecrets list
-[]
+      
+[]
+
 

Image pull secrets, that can be shared across multiple helm charts

+
image.pullPolicy string
-IfNotPresent
+      
+IfNotPresent
+
 

Pull policy of Docker image

@@ -319,8 +329,9 @@ IfNotPresent
image.registry string
-""
+      
+""
+
 

Image registry

@@ -329,8 +340,9 @@ IfNotPresent
image.repository string
-victoriametrics/vmauth
+      
+victoriametrics/vmauth
+
 

Victoria Metrics Auth Docker repository and image name

@@ -339,8 +351,9 @@ victoriametrics/vmauth
image.tag string
-""
+      
+""
+
 

Tag of Docker image

@@ -349,149 +362,199 @@ victoriametrics/vmauth
image.variant string
-""
+      
+""
+
 

Variant of the image to use. e.g. enterprise, scratch

+
imagePullSecrets list
-[]
+      
+[]
+
 

Image pull secrets

+
ingress.annotations object
-{}
+      
+{}
+
 

Ingress annotations

+
ingress.enabled bool
-false
+      
+false
+
 

Enable deployment of ingress for vmauth component

+
ingress.extraLabels object
-{}
+      
+{}
+
 

Ingress extra labels

+
ingress.hosts list
-[]
+      
+[]
+
 

Array of host objects

+
ingress.ingressClassNamestring
+""
+
+
+

Ingress controller class name

+
ingress.pathType string
-Prefix
+      
+Prefix
+
 

pathType is only for k8s >= 1.1=

+

Ingress path type

ingress.tls list
-[]
+      
+[]
+
 

Array of TLS objects

+
ingressInternal.annotations object
-{}
+      
+{}
+
 

Ingress annotations

+
ingressInternal.enabled bool
-false
+      
+false
+
 

Enable deployment of internal ingress for vmauth component

+
ingressInternal.extraLabels object
-{}
+      
+{}
+
 

Ingress extra labels

+
ingressInternal.hosts list
-[]
+      
+[]
+
 

Array of host objects

+
ingressInternal.ingressClassNamestring
+""
+
+
+

Ingress controller class name

+
ingressInternal.pathType string
-Prefix
+      
+Prefix
+
 

pathType is only for k8s >= 1.1=

+

Ingress path type

ingressInternal.tls list
-[]
+      
+[]
+
 

Array of TLS objects

+
license object
-key: ""
+      
+key: ""
 secret:
     key: ""
     name: ""
+
 

Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Documentation - https://docs.victoriametrics.com/enterprise, for more information, visit https://victoriametrics.com/products/enterprise/ . To request a trial license, go to https://victoriametrics.com/products/enterprise/trial/ Supported starting from VictoriaMetrics v1.94.0

+

Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Check docs here, for more information, visit site. Request a trial license here Supported starting from VictoriaMetrics v1.94.0

license.key string
-""
+      
+""
+
 

License key

@@ -500,9 +563,10 @@ secret:
license.secret object
-key: ""
+      
+key: ""
 name: ""
+
 

Use existing secret with license key

@@ -511,8 +575,9 @@ name: ""
license.secret.key string
-""
+      
+""
+
 

Key in secret with license key

@@ -521,8 +586,9 @@ name: ""
license.secret.name string
-""
+      
+""
+
 

Existing secret name

@@ -531,27 +597,31 @@ name: ""
nameOverride string
-""
+      
+""
+
 

Full name suffix override

+
nodeSelector object
-{}
+      
+{}
+
 

NodeSelector configurations. Ref: https://kubernetes.io/docs/user-guide/node-selection/

+

NodeSelector configurations. Check here for details

podAnnotations object
-{}
+      
+{}
+
 

Annotations to be added to pod

@@ -560,81 +630,70 @@ name: ""
podDisruptionBudget object
-enabled: false
+      
+enabled: false
 labels: {}
+
 

See kubectl explain poddisruptionbudget.spec for more. Ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb/

+

See kubectl explain poddisruptionbudget.spec for more. Official guide is here

podSecurityContext.enabledbool
-true
+      
podSecurityContextobject
+enabled: true
+
 

Pod’s security context. Details are here

+
probe.liveness object
-initialDelaySeconds: 5
+      
+initialDelaySeconds: 5
 periodSeconds: 15
 tcpSocket: {}
 timeoutSeconds: 5
+
 

liveness probe

+

Liveness probe

probe.readiness object
-initialDelaySeconds: 5
+      
+initialDelaySeconds: 5
 periodSeconds: 15
 tcpSocket: {}
+
 

readiness probe

+

Readiness probe

probe.startup object
-{}
+      
+{}
+
 

startup probe

+

Startup probe

rbac.annotationsobject
-{}
-
-
rbac.extraLabelsobject
-{}
-
-
replicaCount int
-1
+      
+1
+
 

Number of replicas of vmauth

@@ -643,8 +702,9 @@ tcpSocket: {}
resources object
-{}
+      
+{}
+
 

We usually recommend not to specify default resources and to leave this as a conscious choice for the user. This also increases chances charts run on environments with little resources, such as Minikube. If you do want to specify resources, uncomment the following lines, adjust them as necessary, and remove the curly braces after resources:.

@@ -653,144 +713,174 @@ tcpSocket: {}
secretName string
-""
+      
+""
+
 

Use existing secret if specified otherwise .config values will be used. Ref: https://docs.victoriametrics.com/vmauth. Configuration in the given secret must be stored under auth.yml key.

+

Use existing secret if specified otherwise .config values will be used. Check here for details. Configuration in the given secret must be stored under auth.yml key.

securityContext.enabledbool
-true
+      
securityContextobject
+enabled: true
+
 

Container security context. Check here for details.

+
service.annotations object
-{}
+      
+{}
+
 

Service annotations

+
service.clusterIP string
-""
+      
+""
+
 

Service ClusterIP

+
service.enabled bool
-true
+      
+true
+
 

Enable vmauth service

+
service.externalIPs list
-[]
+      
+[]
+
 

Service external IPs. Check here for details

+
service.externalTrafficPolicy string
-""
+      
+""
+
 

Service external traffic policy. Check here for details

+
service.extraLabels object
-{}
+      
+{}
+
 

Service labels

+
service.healthCheckNodePort string
-""
+      
+""
+
 

Health check node port for a service. Check here for details

+
service.ipFamilies list
-[]
+      
+[]
+
 

List of service IP families. Check here for details.

+
service.ipFamilyPolicy string
-""
+      
+""
+
 

Service IP family policy. Check here for details.

+
service.loadBalancerIP string
-""
+      
+""
+
 

Service load balacner IP

+
service.loadBalancerSourceRanges list
-[]
+      
+[]
+
 

Load balancer source range

+
service.servicePort int
-8427
+      
+8427
+
 

Service port

+
service.type string
-ClusterIP
+      
+ClusterIP
+
 

Service type

+
serviceAccount.annotations object
-{}
+      
+{}
+
 

Annotations to add to the service account

@@ -799,8 +889,9 @@ ClusterIP
serviceAccount.create bool
-true
+      
+true
+
 

Specifies whether a service account should be created

@@ -809,8 +900,9 @@ true
serviceAccount.name string
-null
+      
+null
+
 

The name of the service account to use. If not set and create is true, a name is generated using the fullname template

@@ -819,8 +911,9 @@ null
serviceMonitor.annotations object
-{}
+      
+{}
+
 

Service Monitor annotations

@@ -829,8 +922,9 @@ null
serviceMonitor.basicAuth object
-{}
+      
+{}
+
 

Basic auth params for Service Monitor

@@ -839,8 +933,9 @@ null
serviceMonitor.enabled bool
-false
+      
+false
+
 

Enable deployment of Service Monitor for server component. This is Prometheus operator object

@@ -849,8 +944,9 @@ false
serviceMonitor.extraLabels object
-{}
+      
+{}
+
 

Service Monitor labels

@@ -859,8 +955,9 @@ false
serviceMonitor.metricRelabelings list
-[]
+      
+[]
+
 

Service Monitor metricRelabelings

@@ -869,8 +966,9 @@ false
serviceMonitor.relabelings list
-[]
+      
+[]
+
 

Service Monitor relabelings

@@ -879,11 +977,12 @@ false
tolerations list
-[]
+      
+[]
+
 

Tolerations configurations. Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

+

Tolerations configurations. Check here for details

+
- - - - + + + + - - - - - - - + + - + - - + - - + - - - - - - - - + + + + + + + - - + - - + - - + + + + + + + - - + - - + - - + + + + + + + - - - - - - - - - - - - - - - + - - - + + - - - - - - - - - - - - - - - + - - + - - + - - + - - - - - - - - - - - - + - - - - + - - + - - + + + + + + - - - + - - - - - - - + + - - - - - - - - + - - - + + - + - - + - + + + + + + - - - - - - - - - - - - - - - - + - - - + - - + - - + - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - + - - - - - + - - - + + - - - - - - - - - - - - - - - + - - - + - - - - - - - - - - - - - - + - - - - + - - + - - + + + + + + - - - + - - - - - - - - - - - - - - + + - - - + + - + - - + - - - + + - + - - + - + + + + + + - - - - - - - - - - - - - - - - + - - - + - - + - - + - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - + - - - + + - - - - - - - - - - - - - - - + - - - + - - + - - - - - - - - - + - - + - - - - - - - - - - @@ -2169,8 +2441,9 @@ vmstorage-volume - - - - - - - + - - - - + + - + - - + - + + + + + + - - - - - - - - - + + + + + + - - - - + - - - + - - + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - + - - - - - - - - + + + + + + + - - - - - - - - + - - - - - - - - - - - - diff --git a/docs/helm/victoria-metrics-distributed/README.md b/docs/helm/victoria-metrics-distributed/README.md index 7008361c8..4bd2c0637 100644 --- a/docs/helm/victoria-metrics-distributed/README.md +++ b/docs/helm/victoria-metrics-distributed/README.md @@ -18,7 +18,7 @@ This chart sets up multiple VictoriaMetrics cluster instances on multiple [avail The default setup is as shown below: -![victoriametrics-distributed-topology](./victoriametrics-distributed-topology.png) +![victoriametrics-distributed-topology](./img/victoriametrics-distributed-topology.webp) For write: 1. extra-vmagent(optional): scrapes external targets and all the components installed by this chart, sends data to global write entrypoint. @@ -231,223 +231,256 @@ The following tables lists the configurable parameters of the chart and their de Change the values according to the need of the environment in ``victoria-metrics-distributed`/values.yaml`` file. -
KeyTypeDefaultDescriptionKeyTypeDefaultDescription
clusterDomainSuffix string
-cluster.local
+      
+cluster.local
+
 

k8s cluster domain suffix, uses for building storage pods’ FQDN. Details are here

+

K8s cluster domain suffix, uses for building storage pods’ FQDN. Details are here

extraObjects list
-[]
+      
+[]
+
 

Add extra specs dynamically to this chart

@@ -155,57 +157,67 @@ cluster.local
extraSecrets list
-[]
+      
+[]
+
 
global.compatibility.openshift.adaptSecurityContextstring
-auto
+      
global.compatibilityobject
+openshift:
+    adaptSecurityContext: auto
+
 

Openshift security context compatibility configuration

+
global.image.registry string
-""
+      
+""
+
 

Image registry, that can be shared across multiple helm charts

+
global.imagePullSecrets list
-[]
+      
+[]
+
 

Image pull secrets, that can be shared across multiple helm charts

+
license object
-key: ""
+      
+key: ""
 secret:
     key: ""
     name: ""
+
 

Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Documentation - https://docs.victoriametrics.com/enterprise, for more information, visit https://victoriametrics.com/products/enterprise/ . To request a trial license, go to https://victoriametrics.com/products/enterprise/trial/ Supported starting from VictoriaMetrics v1.94.0

+

Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Check docs here, for more information, visit site. Request a trial license here Supported starting from VictoriaMetrics v1.94.0

license.key string
-""
+      
+""
+
 

License key

@@ -214,9 +226,10 @@ secret:
license.secret object
-key: ""
+      
+key: ""
 name: ""
+
 

Use existing secret with license key

@@ -225,8 +238,9 @@ name: ""
license.secret.key string
-""
+      
+""
+
 

Key in secret with license key

@@ -235,8 +249,9 @@ name: ""
license.secret.name string
-""
+      
+""
+
 

Existing secret name

@@ -245,71 +260,119 @@ name: ""
printNotes bool
-true
+      
+true
+
 

Print information after deployment

+
rbac.annotationsobject
+{}
+
+
+

Role/RoleBinding annotations

+
rbac.create bool
-true
+      
+true
+
 

Enables Role/RoleBinding creation

+
rbac.extraLabels object
-{}
+      
+{}
+
 

Role/RoleBinding labels

+
rbac.namespaced bool
-false
+      
+false
+
 

If true and rbac.enabled, will deploy a Role/RoleBinding instead of a ClusterRole/ClusterRoleBinding

+
serviceAccount.annotationsobject
+{}
+
+
+

Service account annotations

+
serviceAccount.automountToken bool
-true
+      
+true
+
 

mount API token to pod directly

+
serviceAccount.create bool
-true
+      
+true
+
 

Specifies whether a service account should be created

+
serviceAccount.extraLabels object
-{}
+      
+{}
+
 

Service account labels

+
serviceAccount.namestring
+null
+
+
+

The name of the service account to use. If not set and create is true, a name is generated using the fullname template

+
vminsert.affinity object
-{}
+      
+{}
+
 

Pod affinity

@@ -318,26 +381,20 @@ true
vminsert.annotations object
-{}
+      
+{}
+
 
vminsert.automountServiceAccountTokenbool
-true
-
+

StatefulSet/Deployment annotations

vminsert.containerWorkingDir string
-""
+      
+""
+
 

Container workdir

@@ -346,8 +403,9 @@ true
vminsert.enabled bool
-true
+      
+true
+
 

Enable deployment of vminsert component. Deployment is used

@@ -356,90 +414,88 @@ true
vminsert.env list
-[]
+      
+[]
+
 

Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

+

Additional environment variables (ex.: secret tokens, flags). Check here for details.

vminsert.envFrom list
-[]
+      
+[]
+
 

Specify alternative source for env variables

+
vminsert.extraArgs."envflag.enable"string
-"true"
+      
vminsert.extraArgsobject
+envflag.enable: "true"
+envflag.prefix: VM_
+loggerFormat: json
+
 
vminsert.extraArgs."envflag.prefix"string
-VM_
-
+

Extra command line arguments for vminsert component

vminsert.extraArgs.loggerFormatstring
-json
-
-
vminsert.extraContainers list
-[]
+      
+[]
+
 

Extra containers to run in a pod with vminsert

+
vminsert.extraLabels object
-{}
+      
+{}
+
 

StatefulSet/Deployment additional labels

+
vminsert.extraVolumeMounts list
-[]
+      
+[]
+
 

Extra Volume Mounts for the container

+
vminsert.extraVolumes list
-[]
+      
+[]
+
 

Extra Volumes for the pod

+
vminsert.fullnameOverride string
-""
+      
+""
+
 

Overrides the full name of vminsert component

@@ -448,8 +504,9 @@ json
vminsert.horizontalPodAutoscaler.behavior object
-{}
+      
+{}
+
 

Behavior settings for scaling by the HPA

@@ -458,8 +515,9 @@ json
vminsert.horizontalPodAutoscaler.enabled bool
-false
+      
+false
+
 

Use HPA for vminsert component

@@ -468,8 +526,9 @@ false
vminsert.horizontalPodAutoscaler.maxReplicas int
-10
+      
+10
+
 

Maximum replicas for HPA to use to to scale the vminsert component

@@ -478,8 +537,9 @@ false
vminsert.horizontalPodAutoscaler.metrics list
-[]
+      
+[]
+
 

Metric for HPA to use to scale the vminsert component

@@ -488,8 +548,9 @@ false
vminsert.horizontalPodAutoscaler.minReplicas int
-2
+      
+2
+
 

Minimum replicas for HPA to use to scale the vminsert component

@@ -498,8 +559,9 @@ false
vminsert.image.pullPolicy string
-IfNotPresent
+      
+IfNotPresent
+
 

Image pull policy

@@ -508,8 +570,9 @@ IfNotPresent
vminsert.image.registry string
-""
+      
+""
+
 

Image registry

@@ -518,8 +581,9 @@ IfNotPresent
vminsert.image.repository string
-victoriametrics/vminsert
+      
+victoriametrics/vminsert
+
 

Image repository

@@ -528,8 +592,9 @@ victoriametrics/vminsert
vminsert.image.tag string
-""
+      
+""
+
 

Image tag override Chart.AppVersion

@@ -538,17 +603,20 @@ victoriametrics/vminsert
vminsert.image.variant string
-cluster
+      
+cluster
+
 

Variant of the image to use. e.g. cluster, enterprise-cluster

+
vminsert.ingress.annotations object
-{}
+      
+{}
+
 

Ingress annotations

@@ -557,8 +625,9 @@ cluster
vminsert.ingress.enabled bool
-false
+      
+false
+
 

Enable deployment of ingress for vminsert component

@@ -567,37 +636,53 @@ false
vminsert.ingress.extraLabels object
-{}
+      
+{}
+
 

Ingress extra labels

+
vminsert.ingress.hosts list
-[]
+      
+[]
+
 

Array of host objects

vminsert.ingress.pathTypevminsert.ingress.ingressClassName string
-Prefix
+      
+""
+
 

pathType is only for k8s >= 1.1=

+

Ingress controller class name

+
vminsert.ingress.pathTypestring
+Prefix
+
+
+

Ingress path type

vminsert.ingress.tls list
-[]
+      
+[]
+
 

Array of TLS objects

@@ -606,27 +691,31 @@ Prefix
vminsert.initContainers list
-[]
+      
+[]
+
 

Init containers for vminsert

+
vminsert.name string
-vminsert
+      
+vminsert
+
 

vminsert container name

+

VMInsert container name

vminsert.nodeSelector object
-{}
+      
+{}
+
 

Pod’s node selector. Details are here

@@ -635,112 +724,140 @@ vminsert
vminsert.podAnnotations object
-{}
+      
+{}
+
 

Pod’s annotations

vminsert.podDisruptionBudget.enabledbool
-false
+      
vminsert.podDisruptionBudgetobject
+enabled: false
+labels: {}
+
 

See kubectl explain poddisruptionbudget.spec for more. Details are here

vminsert.podDisruptionBudget.labelsobject
-{}
-
-
vminsert.podLabels object
-{}
+      
+{}
+
 

Pod’s additional labels

+
vminsert.podSecurityContext.enabledbool
-false
+      
vminsert.podSecurityContextobject
+enabled: false
+
 

Pod’s security context. Details are here

+
vminsert.ports.name string
-http
+      
+http
+
 

VMInsert http port name

+
vminsert.priorityClassName string
-""
+      
+""
+
 

Name of Priority Class

+
vminsert.probeobject
+liveness:
+    failureThreshold: 3
+    initialDelaySeconds: 5
+    periodSeconds: 15
+    tcpSocket: {}
+    timeoutSeconds: 5
+readiness:
+    failureThreshold: 3
+    httpGet: {}
+    initialDelaySeconds: 5
+    periodSeconds: 15
+    timeoutSeconds: 5
+startup: {}
+
+
+

Readiness & Liveness probes

vminsert.probe.liveness object
-failureThreshold: 3
+      
+failureThreshold: 3
 initialDelaySeconds: 5
 periodSeconds: 15
 tcpSocket: {}
 timeoutSeconds: 5
+
 

vminsert liveness probe

+

VMInsert liveness probe

vminsert.probe.readiness object
-failureThreshold: 3
+      
+failureThreshold: 3
 httpGet: {}
 initialDelaySeconds: 5
 periodSeconds: 15
 timeoutSeconds: 5
+
 

vminsert readiness probe

+

VMInsert readiness probe

vminsert.probe.startup object
-{}
+      
+{}
+
 

vminsert startup probe

+

VMInsert startup probe

vminsert.replicaCount int
-2
+      
+2
+
 

Count of vminsert pods

@@ -749,18 +866,20 @@ timeoutSeconds: 5
vminsert.resources object
-{}
+      
+{}
+
 

Resource object

+

Resource object. Details are here

vminsert.securityContext object
-enabled: false
+      
+enabled: false
+
 

Pod’s security context. Details are here

@@ -769,8 +888,9 @@ enabled: false
vminsert.service.annotations object
-{}
+      
+{}
+
 

Service annotations

@@ -779,8 +899,9 @@ enabled: false
vminsert.service.clusterIP string
-""
+      
+""
+
 

Service ClusterIP

@@ -789,27 +910,31 @@ enabled: false
vminsert.service.externalIPs list
-[]
+      
+[]
+
 

Service External IPs. Details are here

+

Service external IPs. Details are here

vminsert.service.externalTrafficPolicy string
-""
+      
+""
+
 

Service external traffic policy. Check here for details

+
vminsert.service.extraPorts list
-[]
+      
+[]
+
 

Extra service ports

@@ -818,35 +943,42 @@ enabled: false
vminsert.service.healthCheckNodePort string
-""
+      
+""
+
 

Health check node port for a service. Check here for details

+
vminsert.service.ipFamilies list
-[]
+      
+[]
+
 

List of service IP families. Check here for details.

+
vminsert.service.ipFamilyPolicy string
-""
+      
+""
+
 

Service IP family policy. Check here for details.

+
vminsert.service.labels object
-{}
+      
+{}
+
 

Service labels

@@ -855,8 +987,9 @@ enabled: false
vminsert.service.loadBalancerIP string
-""
+      
+""
+
 

Service load balancer IP

@@ -865,8 +998,9 @@ enabled: false
vminsert.service.loadBalancerSourceRanges list
-[]
+      
+[]
+
 

Load balancer source range

@@ -875,8 +1009,9 @@ enabled: false
vminsert.service.servicePort int
-8480
+      
+8480
+
 

Service port

@@ -885,8 +1020,9 @@ enabled: false
vminsert.service.targetPort string
-http
+      
+http
+
 

Target port

@@ -895,8 +1031,9 @@ http
vminsert.service.type string
-ClusterIP
+      
+ClusterIP
+
 

Service type

@@ -905,18 +1042,20 @@ ClusterIP
vminsert.service.udp bool
-false
+      
+false
+
 

Make sure that service is not type “LoadBalancer”, as it requires “MixedProtocolLBService” feature gate. ref: https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/

+

Enable UDP port. used if you have spec.opentsdbListenAddr specified Make sure that service is not type LoadBalancer, as it requires MixedProtocolLBService feature gate. Check here for details

vminsert.serviceMonitor.annotations object
-{}
+      
+{}
+
 

Service Monitor annotations

@@ -925,8 +1064,9 @@ false
vminsert.serviceMonitor.basicAuth object
-{}
+      
+{}
+
 

Basic auth params for Service Monitor

@@ -935,8 +1075,9 @@ false
vminsert.serviceMonitor.enabled bool
-false
+      
+false
+
 

Enable deployment of Service Monitor for vminsert component. This is Prometheus operator object

@@ -945,8 +1086,9 @@ false
vminsert.serviceMonitor.extraLabels object
-{}
+      
+{}
+
 

Service Monitor labels

@@ -955,8 +1097,9 @@ false
vminsert.serviceMonitor.metricRelabelings list
-[]
+      
+[]
+
 

Service Monitor metricRelabelings

@@ -965,8 +1108,9 @@ false
vminsert.serviceMonitor.namespace string
-""
+      
+""
+
 

Target namespace of ServiceMonitor manifest

@@ -975,8 +1119,9 @@ false
vminsert.serviceMonitor.relabelings list
-[]
+      
+[]
+
 

Service Monitor relabelings

@@ -985,17 +1130,20 @@ false
vminsert.strategy object
-{}
+      
+{}
+
 

VMInsert strategy

+
vminsert.suppressStorageFQDNsRender bool
-false
+      
+false
+
 

Suppress rendering --storageNode FQDNs based on vmstorage.replicaCount value. If true suppress rendering --storageNodes, they can be re-defined in extraArgs

@@ -1004,8 +1152,9 @@ false
vminsert.tolerations list
-[]
+      
+[]
+
 

Array of tolerations object. Details are here

@@ -1014,8 +1163,9 @@ false
vminsert.topologySpreadConstraints list
-[]
+      
+[]
+
 

Pod topologySpreadConstraints

@@ -1024,8 +1174,9 @@ false
vmselect.affinity object
-{}
+      
+{}
+
 

Pod affinity

@@ -1034,26 +1185,20 @@ false
vmselect.annotations object
-{}
+      
+{}
+
 
vmselect.automountServiceAccountTokenbool
-true
-
+

StatefulSet/Deployment annotations

vmselect.cacheMountPath string
-/cache
+      
+/cache
+
 

Cache root folder

@@ -1062,8 +1207,9 @@ true
vmselect.containerWorkingDir string
-""
+      
+""
+
 

Container workdir

@@ -1072,17 +1218,20 @@ true
vmselect.emptyDir object
-{}
+      
+{}
+
 

Empty dir configuration if persistence is disabled

+
vmselect.enabled bool
-true
+      
+true
+
 

Enable deployment of vmselect component. Can be deployed as Deployment(default) or StatefulSet

@@ -1091,63 +1240,55 @@ true
vmselect.env list
-[]
+      
+[]
+
 

Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

+

Additional environment variables (ex.: secret tokens, flags). Check here for details.

vmselect.envFrom list
-[]
+      
+[]
+
 

Specify alternative source for env variables

+
vmselect.extraArgs."envflag.enable"bool
-true
+      
vmselect.extraArgsobject
+envflag.enable: true
+envflag.prefix: VM_
+loggerFormat: json
+
 
vmselect.extraArgs."envflag.prefix"string
-VM_
-
+

Extra command line arguments for vmselect component

vmselect.extraArgs.loggerFormatstring
-json
-
-
vmselect.extraContainers list
-[]
+      
+[]
+
 

Extra containers to run in a pod with vmselect

+
vmselect.extraHostPathMounts list
-[]
+      
+[]
+
 

Additional hostPath mounts

@@ -1156,17 +1297,20 @@ json
vmselect.extraLabels object
-{}
+      
+{}
+
 

StatefulSet/Deployment additional labels

+
vmselect.extraVolumeMounts list
-[]
+      
+[]
+
 

Extra Volume Mounts for the container

@@ -1175,8 +1319,9 @@ json
vmselect.extraVolumes list
-[]
+      
+[]
+
 

Extra Volumes for the pod

@@ -1185,8 +1330,9 @@ json
vmselect.fullnameOverride string
-""
+      
+""
+
 

Overrides the full name of vmselect component

@@ -1195,8 +1341,9 @@ json
vmselect.horizontalPodAutoscaler.behavior object
-{}
+      
+{}
+
 

Behavior settings for scaling by the HPA

@@ -1205,8 +1352,9 @@ json
vmselect.horizontalPodAutoscaler.enabled bool
-false
+      
+false
+
 

Use HPA for vmselect component

@@ -1215,8 +1363,9 @@ false
vmselect.horizontalPodAutoscaler.maxReplicas int
-10
+      
+10
+
 

Maximum replicas for HPA to use to to scale the vmselect component

@@ -1225,8 +1374,9 @@ false
vmselect.horizontalPodAutoscaler.metrics list
-[]
+      
+[]
+
 

Metric for HPA to use to scale the vmselect component

@@ -1235,8 +1385,9 @@ false
vmselect.horizontalPodAutoscaler.minReplicas int
-2
+      
+2
+
 

Minimum replicas for HPA to use to scale the vmselect component

@@ -1245,8 +1396,9 @@ false
vmselect.image.pullPolicy string
-IfNotPresent
+      
+IfNotPresent
+
 

Image pull policy

@@ -1255,8 +1407,9 @@ IfNotPresent
vmselect.image.registry string
-""
+      
+""
+
 

Image registry

@@ -1265,8 +1418,9 @@ IfNotPresent
vmselect.image.repository string
-victoriametrics/vmselect
+      
+victoriametrics/vmselect
+
 

Image repository

@@ -1275,8 +1429,9 @@ victoriametrics/vmselect
vmselect.image.tag string
-""
+      
+""
+
 

Image tag override Chart.AppVersion

@@ -1285,17 +1440,20 @@ victoriametrics/vmselect
vmselect.image.variant string
-cluster
+      
+cluster
+
 

Variant of the image to use. e.g. cluster, enterprise-cluster

+
vmselect.ingress.annotations object
-{}
+      
+{}
+
 

Ingress annotations

@@ -1304,8 +1462,9 @@ cluster
vmselect.ingress.enabled bool
-false
+      
+false
+
 

Enable deployment of ingress for vmselect component

@@ -1314,37 +1473,53 @@ false
vmselect.ingress.extraLabels object
-{}
+      
+{}
+
 

Ingress extra labels

+
vmselect.ingress.hosts list
-[]
+      
+[]
+
 

Array of host objects

vmselect.ingress.pathTypevmselect.ingress.ingressClassName string
-Prefix
+      
+""
+
 

pathType is only for k8s >= 1.1=

+

Ingress controller class name

+
vmselect.ingress.pathTypestring
+Prefix
+
+
+

Ingress path type

vmselect.ingress.tls list
-[]
+      
+[]
+
 

Array of TLS objects

@@ -1353,27 +1528,31 @@ Prefix
vmselect.initContainers list
-[]
+      
+[]
+
 

Init containers for vmselect

+
vmselect.name string
-vmselect
+      
+vmselect
+
 

Vmselect container name

+

VMSelect container name

vmselect.nodeSelector object
-{}
+      
+{}
+
 

Pod’s node selector. Details are here

@@ -1382,8 +1561,9 @@ vmselect
vmselect.persistentVolume.accessModes list
-- ReadWriteOnce
+      
+- ReadWriteOnce
+
 

Array of access mode. Must match those of existing PV or dynamic provisioner. Details are here

@@ -1392,8 +1572,9 @@ vmselect
vmselect.persistentVolume.annotations object
-{}
+      
+{}
+
 

Persistent volume annotations

@@ -1402,8 +1583,9 @@ vmselect
vmselect.persistentVolume.enabled bool
-false
+      
+false
+
 

Create/use Persistent Volume Claim for vmselect component. Empty dir if false. If true, vmselect will create/use a Persistent Volume Claim

@@ -1412,8 +1594,9 @@ false
vmselect.persistentVolume.existingClaim string
-""
+      
+""
+
 

Existing Claim name. Requires vmselect.persistentVolume.enabled: true. If defined, PVC must be created manually before volume will be bound

@@ -1422,8 +1605,9 @@ false
vmselect.persistentVolume.labels object
-{}
+      
+{}
+
 

Persistent volume labels

@@ -1432,8 +1616,9 @@ false
vmselect.persistentVolume.size string
-2Gi
+      
+2Gi
+
 

Size of the volume. Better to set the same as resource limit memory property

@@ -1442,8 +1627,9 @@ false
vmselect.persistentVolume.subPath string
-""
+      
+""
+
 

Mount subpath

@@ -1452,112 +1638,151 @@ false
vmselect.podAnnotations object
-{}
+      
+{}
+
 

Pod’s annotations

vmselect.podDisruptionBudget.enabledbool
-false
+      
vmselect.podDisruptionBudgetobject
+enabled: false
+labels: {}
+
 

See kubectl explain poddisruptionbudget.spec for more. Details are here

vmselect.podDisruptionBudget.labelsobject
-{}
+      
vmselect.podDisruptionBudget.enabledbool
+false
+
 

See kubectl explain poddisruptionbudget.spec for more. Details are here

+
vmselect.podLabels object
-{}
+      
+{}
+
 

Pod’s additional labels

+
vmselect.podSecurityContext.enabledbool
-true
+      
vmselect.podSecurityContextobject
+enabled: true
+
 

Pod’s security context. Details are here

+
vmselect.ports.name string
-http
+      
+http
+
 

VMSelect http port name

+
vmselect.priorityClassName string
-""
+      
+""
+
 

Name of Priority Class

+
vmselect.probeobject
+liveness:
+    failureThreshold: 3
+    initialDelaySeconds: 5
+    periodSeconds: 15
+    tcpSocket: {}
+    timeoutSeconds: 5
+readiness:
+    failureThreshold: 3
+    httpGet: {}
+    initialDelaySeconds: 5
+    periodSeconds: 15
+    timeoutSeconds: 5
+startup: {}
+
+
+

Readiness & Liveness probes

vmselect.probe.liveness object
-failureThreshold: 3
+      
+failureThreshold: 3
 initialDelaySeconds: 5
 periodSeconds: 15
 tcpSocket: {}
 timeoutSeconds: 5
+
 

vmselect liveness probe

+

VMSelect liveness probe

vmselect.probe.readiness object
-failureThreshold: 3
+      
+failureThreshold: 3
 httpGet: {}
 initialDelaySeconds: 5
 periodSeconds: 15
 timeoutSeconds: 5
+
 

vmselect readiness probe

+

VMSelect readiness probe

vmselect.probe.startup object
-{}
+      
+{}
+
 

vmselect startup probe

+

VMSelect startup probe

vmselect.replicaCount int
-2
+      
+2
+
 

Count of vmselect pods

@@ -1566,18 +1791,20 @@ timeoutSeconds: 5
vmselect.resources object
-{}
+      
+{}
+
 

Resource object

+

Resource object. Details are here

vmselect.securityContext object
-enabled: true
+      
+enabled: true
+
 

Pod’s security context. Details are here

@@ -1586,8 +1813,9 @@ enabled: true
vmselect.service.annotations object
-{}
+      
+{}
+
 

Service annotations

@@ -1596,8 +1824,9 @@ enabled: true
vmselect.service.clusterIP string
-""
+      
+""
+
 

Service ClusterIP

@@ -1606,27 +1835,31 @@ enabled: true
vmselect.service.externalIPs list
-[]
+      
+[]
+
 

Service External IPs. Details are here

+

Service external IPs. Details are here

vmselect.service.externalTrafficPolicy string
-""
+      
+""
+
 

Service external traffic policy. Check here for details

+
vmselect.service.extraPorts list
-[]
+      
+[]
+
 

Extra service ports

@@ -1635,35 +1868,42 @@ enabled: true
vmselect.service.healthCheckNodePort string
-""
+      
+""
+
 

Health check node port for a service. Check here for details

+
vmselect.service.ipFamilies list
-[]
+      
+[]
+
 

List of service IP families. Check here for details.

+
vmselect.service.ipFamilyPolicy string
-""
+      
+""
+
 

Service IP family policy. Check here for details.

+
vmselect.service.labels object
-{}
+      
+{}
+
 

Service labels

@@ -1672,8 +1912,9 @@ enabled: true
vmselect.service.loadBalancerIP string
-""
+      
+""
+
 

Service load balacner IP

@@ -1682,8 +1923,9 @@ enabled: true
vmselect.service.loadBalancerSourceRanges list
-[]
+      
+[]
+
 

Load balancer source range

@@ -1692,8 +1934,9 @@ enabled: true
vmselect.service.servicePort int
-8481
+      
+8481
+
 

Service port

@@ -1702,8 +1945,9 @@ enabled: true
vmselect.service.targetPort string
-http
+      
+http
+
 

Target port

@@ -1712,8 +1956,9 @@ http
vmselect.service.type string
-ClusterIP
+      
+ClusterIP
+
 

Service type

@@ -1722,8 +1967,9 @@ ClusterIP
vmselect.serviceMonitor.annotations object
-{}
+      
+{}
+
 

Service Monitor annotations

@@ -1732,8 +1978,9 @@ ClusterIP
vmselect.serviceMonitor.basicAuth object
-{}
+      
+{}
+
 

Basic auth params for Service Monitor

@@ -1742,8 +1989,9 @@ ClusterIP
vmselect.serviceMonitor.enabled bool
-false
+      
+false
+
 

Enable deployment of Service Monitor for vmselect component. This is Prometheus operator object

@@ -1752,8 +2000,9 @@ false
vmselect.serviceMonitor.extraLabels object
-{}
+      
+{}
+
 

Service Monitor labels

@@ -1762,8 +2011,9 @@ false
vmselect.serviceMonitor.metricRelabelings list
-[]
+      
+[]
+
 

Service Monitor metricRelabelings

@@ -1772,8 +2022,9 @@ false
vmselect.serviceMonitor.namespace string
-""
+      
+""
+
 

Target namespace of ServiceMonitor manifest

@@ -1782,8 +2033,9 @@ false
vmselect.serviceMonitor.relabelings list
-[]
+      
+[]
+
 

Service Monitor relabelings

@@ -1792,8 +2044,9 @@ false
vmselect.statefulSet.enabled bool
-false
+      
+false
+
 

Deploy StatefulSet instead of Deployment for vmselect. Useful if you want to keep cache data.

@@ -1802,8 +2055,9 @@ false
vmselect.statefulSet.podManagementPolicy string
-OrderedReady
+      
+OrderedReady
+
 

Deploy order policy for StatefulSet pods

@@ -1812,17 +2066,20 @@ OrderedReady
vmselect.strategy object
-{}
+      
+{}
+
 

VMSelect strategy

+
vmselect.suppressStorageFQDNsRender bool
-false
+      
+false
+
 

Suppress rendering --storageNode FQDNs based on vmstorage.replicaCount value. If true suppress rendering --storageNodes, they can be re-defined in extraArgs

@@ -1831,8 +2088,9 @@ false
vmselect.tolerations list
-[]
+      
+[]
+
 

Array of tolerations object. Details are here

@@ -1841,8 +2099,9 @@ false
vmselect.topologySpreadConstraints list
-[]
+      
+[]
+
 

Pod topologySpreadConstraints

@@ -1851,8 +2110,9 @@ false
vmstorage.affinity object
-{}
+      
+{}
+
 

Pod affinity

@@ -1861,26 +2121,20 @@ false
vmstorage.annotations object
-{}
+      
+{}
+
 
vmstorage.automountServiceAccountTokenbool
-true
-
+

StatefulSet/Deployment annotations

vmstorage.containerWorkingDir string
-""
+      
+""
+
 

Container workdir

@@ -1889,18 +2143,20 @@ true
vmstorage.emptyDir object
-{}
+      
+{}
+
 

Use an alternate scheduler, e.g. “stork”. ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/ schedulerName:

+

Empty dir configuration if persistence is disabled

vmstorage.enabled bool
-true
+      
+true
+
 

Enable deployment of vmstorage component. StatefulSet is used

@@ -1909,63 +2165,55 @@ true
vmstorage.env list
-[]
+      
+[]
+
 

Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

+

Additional environment variables (ex.: secret tokens, flags). Check here for details

vmstorage.envFrom list
-[]
+      
+[]
+
 

Specify alternative source for env variables

+
vmstorage.extraArgs."envflag.enable"string
-"true"
+      
vmstorage.extraArgsobject
+envflag.enable: "true"
+envflag.prefix: VM_
+loggerFormat: json
+
 
vmstorage.extraArgs."envflag.prefix"string
-VM_
-
+

Additional vmstorage container arguments. Extra command line arguments for vmstorage component

vmstorage.extraArgs.loggerFormatstring
-json
-
-
vmstorage.extraContainers list
-[]
+      
+[]
+
 

Extra containers to run in a pod with vmstorage

+
vmstorage.extraHostPathMounts list
-[]
+      
+[]
+
 

Additional hostPath mounts

@@ -1974,26 +2222,31 @@ json
vmstorage.extraLabels object
-{}
+      
+{}
+
 

StatefulSet/Deployment additional labels

+
vmstorage.extraSecretMounts list
-[]
+      
+[]
+
 

Extra secret mounts for vmstorage

+
vmstorage.extraVolumeMounts list
-[]
+      
+[]
+
 

Extra Volume Mounts for the container

@@ -2002,8 +2255,9 @@ json
vmstorage.extraVolumes list
-[]
+      
+[]
+
 

Extra Volumes for the pod

@@ -2012,8 +2266,9 @@ json
vmstorage.fullnameOverride string
-null
+      
+null
+
 

Overrides the full name of vmstorage component

@@ -2022,8 +2277,9 @@ null
vmstorage.image.pullPolicy string
-IfNotPresent
+      
+IfNotPresent
+
 

Image pull policy

@@ -2032,8 +2288,9 @@ IfNotPresent
vmstorage.image.registry string
-""
+      
+""
+
 

Image registry

@@ -2042,8 +2299,9 @@ IfNotPresent
vmstorage.image.repository string
-victoriametrics/vmstorage
+      
+victoriametrics/vmstorage
+
 

Image repository

@@ -2052,8 +2310,9 @@ victoriametrics/vmstorage
vmstorage.image.tag string
-""
+      
+""
+
 

Image tag override Chart.AppVersion

@@ -2062,36 +2321,42 @@ victoriametrics/vmstorage
vmstorage.image.variant string
-cluster
+      
+cluster
+
 

Variant of the image to use. e.g. cluster, enterprise-cluster

+
vmstorage.initContainers list
-[]
+      
+[]
+
 

Init containers for vmstorage

+
vmstorage.name string
-vmstorage
+      
+vmstorage
+
 

vmstorage container name

+

VMStorage container name

vmstorage.nodeSelector object
-{}
+      
+{}
+
 

Pod’s node selector. Details are here

@@ -2100,8 +2365,9 @@ vmstorage
vmstorage.persistentVolume.accessModes list
-- ReadWriteOnce
+      
+- ReadWriteOnce
+
 

Array of access modes. Must match those of existing PV or dynamic provisioner. Details are here

@@ -2110,8 +2376,9 @@ vmstorage
vmstorage.persistentVolume.annotations object
-{}
+      
+{}
+
 

Persistent volume annotations

@@ -2120,8 +2387,9 @@ vmstorage
vmstorage.persistentVolume.enabled bool
-true
+      
+true
+
 

Create/use Persistent Volume Claim for vmstorage component. Empty dir if false. If true, vmstorage will create/use a Persistent Volume Claim

@@ -2130,8 +2398,9 @@ true
vmstorage.persistentVolume.existingClaim string
-""
+      
+""
+
 

Existing Claim name. Requires vmstorage.persistentVolume.enabled: true. If defined, PVC must be created manually before volume will be bound

@@ -2140,8 +2409,9 @@ true
vmstorage.persistentVolume.labels object
-{}
+      
+{}
+
 

Persistent volume labels

@@ -2150,8 +2420,9 @@ true
vmstorage.persistentVolume.mountPath string
-/storage
+      
+/storage
+
 

Data root path. Vmstorage data Persistent Volume mount root path

@@ -2160,8 +2431,9 @@ true
vmstorage.persistentVolume.name string
-vmstorage-volume
+      
+vmstorage-volume
+
 
vmstorage.persistentVolume.size string
-8Gi
+      
+8Gi
+
 

Size of the volume.

@@ -2179,8 +2452,9 @@ vmstorage-volume
vmstorage.persistentVolume.storageClassName string
-""
+      
+""
+
 

Storage class name. Will be empty if not setted

@@ -2189,8 +2463,9 @@ vmstorage-volume
vmstorage.persistentVolume.subPath string
-""
+      
+""
+
 

Mount subpath

@@ -2199,8 +2474,9 @@ vmstorage-volume
vmstorage.podAnnotations object
-{}
+      
+{}
+
 

Pod’s annotations

@@ -2209,9 +2485,10 @@ vmstorage-volume
vmstorage.podDisruptionBudget object
-enabled: false
+      
+enabled: false
 labels: {}
+
 

See kubectl explain poddisruptionbudget.spec for more. Details are here

@@ -2220,93 +2497,128 @@ labels: {}
vmstorage.podLabels object
-{}
+      
+{}
+
 

Pod’s additional labels

+
vmstorage.podManagementPolicy string
-OrderedReady
+      
+OrderedReady
+
 

Deploy order policy for StatefulSet pods

vmstorage.podSecurityContext.enabledbool
-false
+      
vmstorage.podSecurityContextobject
+enabled: false
+
 

Pod’s security context. Details are here

+
vmstorage.ports.name string
-http
+      
+http
+
 

VMStorage http port name

+
vmstorage.priorityClassName string
-""
+      
+""
+
 

Name of Priority Class

+
vmstorage.probeobject
+liveness:
+    failureThreshold: 10
+    initialDelaySeconds: 30
+    periodSeconds: 30
+    tcpSocket: {}
+    timeoutSeconds: 5
+readiness:
+    failureThreshold: 3
+    httpGet: {}
+    initialDelaySeconds: 5
+    periodSeconds: 15
+    timeoutSeconds: 5
+startup: {}
+
+
+

Readiness & Liveness probes

vmstorage.probe.liveness object
-failureThreshold: 10
+      
+failureThreshold: 10
 initialDelaySeconds: 30
 periodSeconds: 30
 tcpSocket: {}
 timeoutSeconds: 5
+
 

vmstorage liveness probe

+

VMStorage liveness probe

vmstorage.probe.readiness object
-failureThreshold: 3
+      
+failureThreshold: 3
 httpGet: {}
 initialDelaySeconds: 5
 periodSeconds: 15
 timeoutSeconds: 5
+
 

vmstorage readiness probe

+

VMStorage readiness probe

vmstorage.probe.startup object
-{}
+      
+{}
+
 

vmstorage startup probe

+

VMStorage startup probe

vmstorage.replicaCount int
-2
+      
+2
+
 

Count of vmstorage pods

@@ -2315,8 +2627,9 @@ timeoutSeconds: 5
vmstorage.resources object
-{}
+      
+{}
+
 

Resource object. Details are here

@@ -2325,18 +2638,31 @@ timeoutSeconds: 5
vmstorage.retentionPeriod int
-1
+      
+1
+
 

Data retention period. Supported values 1w, 1d, number without measurement means month, e.g. 2 = 2month

+
vmstorage.schedulerNamestring
+""
+
+
+

Use an alternate scheduler, e.g. “stork”. Check here for details

vmstorage.securityContext object
-enabled: false
+      
+enabled: false
+
 

Pod’s security context. Details are here

@@ -2345,8 +2671,9 @@ enabled: false
vmstorage.service.annotations object
-{}
+      
+{}
+
 

Service annotations

@@ -2355,17 +2682,20 @@ enabled: false
vmstorage.service.externalTrafficPolicy string
-""
+      
+""
+
 

Service external traffic policy. Check here for details

+
vmstorage.service.extraPorts list
-[]
+      
+[]
+
 

Extra service ports

@@ -2374,35 +2704,42 @@ enabled: false
vmstorage.service.healthCheckNodePort string
-""
+      
+""
+
 

Health check node port for a service. Check here for details

+
vmstorage.service.ipFamilies list
-[]
+      
+[]
+
 

List of service IP families. Check here for details.

+
vmstorage.service.ipFamilyPolicy string
-""
+      
+""
+
 

Service IP family policy. Check here for details.

+
vmstorage.service.labels object
-{}
+      
+{}
+
 

Service labels

@@ -2411,8 +2748,9 @@ enabled: false
vmstorage.service.servicePort int
-8482
+      
+8482
+
 

Service port

@@ -2421,8 +2759,9 @@ enabled: false
vmstorage.service.vminsertPort int
-8400
+      
+8400
+
 

Port for accepting connections from vminsert

@@ -2431,8 +2770,9 @@ enabled: false
vmstorage.service.vmselectPort int
-8401
+      
+8401
+
 

Port for accepting connections from vmselect

@@ -2441,8 +2781,9 @@ enabled: false
vmstorage.serviceMonitor.annotations object
-{}
+      
+{}
+
 

Service Monitor annotations

@@ -2451,8 +2792,9 @@ enabled: false
vmstorage.serviceMonitor.basicAuth object
-{}
+      
+{}
+
 

Basic auth params for Service Monitor

@@ -2461,8 +2803,9 @@ enabled: false
vmstorage.serviceMonitor.enabled bool
-false
+      
+false
+
 

Enable deployment of Service Monitor for vmstorage component. This is Prometheus operator object

@@ -2471,8 +2814,9 @@ false
vmstorage.serviceMonitor.extraLabels object
-{}
+      
+{}
+
 

Service Monitor labels

@@ -2481,8 +2825,9 @@ false
vmstorage.serviceMonitor.metricRelabelings list
-[]
+      
+[]
+
 

Service Monitor metricRelabelings

@@ -2491,8 +2836,9 @@ false
vmstorage.serviceMonitor.namespace string
-""
+      
+""
+
 

Target namespace of ServiceMonitor manifest

@@ -2501,8 +2847,9 @@ false
vmstorage.serviceMonitor.relabelings list
-[]
+      
+[]
+
 

Service Monitor relabelings

@@ -2511,8 +2858,9 @@ false
vmstorage.terminationGracePeriodSeconds int
-60
+      
+60
+
 

Pod’s termination grace period in seconds

@@ -2521,18 +2869,20 @@ false
vmstorage.tolerations list
-[]
+      
+[]
+
 

Array of tolerations object. Node tolerations for server scheduling to nodes with taints. Details are here #

+

Array of tolerations object. Node tolerations for server scheduling to nodes with taints. Details are here

vmstorage.topologySpreadConstraints list
-[]
+      
+[]
+
 

Pod topologySpreadConstraints

@@ -2541,259 +2891,295 @@ false
vmstorage.vmbackupmanager.destination string
-""
+      
+""
+
 

backup destination at S3, GCS or local filesystem. Pod name will be included to path!

+

Backup destination at S3, GCS or local filesystem. Pod name will be included to path!

vmstorage.vmbackupmanager.disableDaily bool
-false
+      
+false
+
 

disable daily backups

+

Disable daily backups

vmstorage.vmbackupmanager.disableHourly bool
-false
+      
+false
+
 

disable hourly backups

+

Disable hourly backups

vmstorage.vmbackupmanager.disableMonthly bool
-false
+      
+false
+
 

disable monthly backups

+

Disable monthly backups

vmstorage.vmbackupmanager.disableWeekly bool
-false
+      
+false
+
 

disable weekly backups

+

Disable weekly backups

vmstorage.vmbackupmanager.enabled bool
-false
+      
+false
+
 

enable automatic creation of backup via vmbackupmanager. vmbackupmanager is part of Enterprise packages

+

Enable automatic creation of backup via vmbackupmanager. vmbackupmanager is part of Enterprise packages

vmstorage.vmbackupmanager.env list
-[]
+      
+[]
+
 

Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

+

Additional environment variables (ex.: secret tokens, flags). Check here for details

vmstorage.vmbackupmanager.extraArgs."envflag.enable"string
-"true"
+      
vmstorage.vmbackupmanager.extraArgsobject
+envflag.enable: "true"
+envflag.prefix: VM_
+loggerFormat: json
+
 
vmstorage.vmbackupmanager.extraArgs."envflag.prefix"string
-VM_
-
+

Extra command line arguments for container of component

vmstorage.vmbackupmanager.extraArgs.loggerFormatstring
-json
-
-
vmstorage.vmbackupmanager.extraSecretMounts list
-[]
+      
+[]
+
 

Extra secret mounts for vmbackupmanager

+
vmstorage.vmbackupmanager.image.registry string
-""
+      
+""
+
 

vmbackupmanager image registry

+

VMBackupManager image registry

vmstorage.vmbackupmanager.image.repository string
-victoriametrics/vmbackupmanager
+      
+victoriametrics/vmbackupmanager
+
 

vmbackupmanager image repository

+

VMBackupManager image repository

vmstorage.vmbackupmanager.image.tag string
-""
+      
+""
+
 

vmbackupmanager image tag override Chart.AppVersion

+

VMBackupManager image tag override Chart.AppVersion

vmstorage.vmbackupmanager.image.variant string
-cluster
+      
+cluster
+
 

Variant of the image tag to use. e.g. enterprise.

+
vmstorage.vmbackupmanager.probeobject
+liveness:
+    failureThreshold: 10
+    initialDelaySeconds: 30
+    periodSeconds: 30
+    tcpSocket:
+        port: manager-http
+    timeoutSeconds: 5
+readiness:
+    failureThreshold: 3
+    httpGet:
+        port: manager-http
+    initialDelaySeconds: 5
+    periodSeconds: 15
+    timeoutSeconds: 5
+startup: {}
+
+
+

Readiness & Liveness probes

+
vmstorage.vmbackupmanager.probe.liveness object
-failureThreshold: 10
+      
+failureThreshold: 10
 initialDelaySeconds: 30
 periodSeconds: 30
 tcpSocket:
     port: manager-http
 timeoutSeconds: 5
+
 

vmbackupmanager liveness probe

+

VMBackupManager liveness probe

vmstorage.vmbackupmanager.probe.readiness object
-failureThreshold: 3
+      
+failureThreshold: 3
 httpGet:
     port: manager-http
 initialDelaySeconds: 5
 periodSeconds: 15
 timeoutSeconds: 5
+
 

vmbackupmanager readiness probe

+

VMBackupManager readiness probe

vmstorage.vmbackupmanager.probe.startup object
-{}
+      
+{}
+
 

vmbackupmanager startup probe

+

VMBackupManager startup probe

vmstorage.vmbackupmanager.resources object
-{}
+      
+{}
+
 

Resource object. Details are here

+
vmstorage.vmbackupmanager.restore object
-onStart:
+      
+onStart:
     enabled: false
+
 

Allows to enable restore options for pod. Read more: https://docs.victoriametrics.com/vmbackupmanager#restore-commands

+

Allows to enable restore options for pod. Check here for details

vmstorage.vmbackupmanager.retention object
-keepLastDaily: 2
+      
+keepLastDaily: 2
 keepLastHourly: 2
 keepLastMonthly: 2
 keepLastWeekly: 2
+
 

backups’ retention settings

+

Backups’ retention settings

vmstorage.vmbackupmanager.retention.keepLastDaily int
-2
+      
+2
+
 

keep last N daily backups. 0 means delete all existing daily backups. Specify -1 to turn off

+

Keep last N daily backups. 0 means delete all existing daily backups. Specify -1 to turn off

vmstorage.vmbackupmanager.retention.keepLastHourly int
-2
+      
+2
+
 

keep last N hourly backups. 0 means delete all existing hourly backups. Specify -1 to turn off

+

Keep last N hourly backups. 0 means delete all existing hourly backups. Specify -1 to turn off

vmstorage.vmbackupmanager.retention.keepLastMonthly int
-2
+      
+2
+
 

keep last N monthly backups. 0 means delete all existing monthly backups. Specify -1 to turn off

+

Keep last N monthly backups. 0 means delete all existing monthly backups. Specify -1 to turn off

vmstorage.vmbackupmanager.retention.keepLastWeekly int
-2
+      
+2
+
 

keep last N weekly backups. 0 means delete all existing weekly backups. Specify -1 to turn off

+

Keep last N weekly backups. 0 means delete all existing weekly backups. Specify -1 to turn off

+
- - - - + + + + - - - - - - - - - - - - + + + + + + - - - - - - - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + - - - - + + - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/helm/victoria-metrics-distributed/img/victoriametrics-distributed-topology.webp b/docs/helm/victoria-metrics-distributed/img/victoriametrics-distributed-topology.webp new file mode 100644 index 0000000000000000000000000000000000000000..06ecb2696ddbde60cdeda5097e445e6b99edee87 GIT binary patch literal 73166 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 Q)0RgVU6yOXzyJUM0CVH4r~m)} literal 0 HcmV?d00001 diff --git a/docs/helm/victoria-metrics-gateway/README.md b/docs/helm/victoria-metrics-gateway/README.md index ade7b3154..76b5a4863 100644 --- a/docs/helm/victoria-metrics-gateway/README.md +++ b/docs/helm/victoria-metrics-gateway/README.md @@ -185,19 +185,20 @@ The following tables lists the configurable parameters of the chart and their de Change the values according to the need of the environment in ``victoria-metrics-gateway/values.yaml`` file. -
KeyTypeDefaultDescriptionKeyTypeDefaultDescription
availabilityZoneslist
-- allowIngest: true
-  allowQuery: true
-  extraAffinity: {}
-  name: zone-eu-1
-  nodeSelector:
-    topology.kubernetes.io/zone: zone-eu-1
-  topologySpreadConstraints:
-    - maxSkew: 1
-      topologyKey: kubernetes.io/hostname
-      whenUnsatisfiable: ScheduleAnyway
-  vmagent:
-    annotations: {}
-    enabled: true
-    name: ""
-    spec: {}
-  vmauthCrossAZQuery:
-    enabled: true
-    name: ""
-    spec: {}
-  vmauthIngest:
-    enabled: true
-    name: ""
-    spec:
-        extraArgs:
-            discoverBackendIPs: "true"
-  vmauthQueryPerZone:
-    enabled: true
-    name: ""
-    spec:
-        extraArgs:
-            discoverBackendIPs: "true"
-  vmcluster:
-    enabled: true
-    name: ""
-    spec:
-        replicationFactor: 2
-        retentionPeriod: "14"
-        vminsert:
-            extraArgs: {}
-            replicaCount: 2
-            resources: {}
-        vmselect:
-            extraArgs: {}
-            replicaCount: 2
-            resources: {}
-        vmstorage:
-            replicaCount: 2
-            resources: {}
-            storageDataPath: /vm-data
-- allowIngest: true
-  allowQuery: true
-  extraAffinity: {}
-  name: zone-us-1
-  nodeSelector:
-    topology.kubernetes.io/zone: zone-us-1
-  topologySpreadConstraints:
-    - maxSkew: 1
-      topologyKey: kubernetes.io/hostname
-      whenUnsatisfiable: ScheduleAnyway
-  vmagent:
-    annotations: {}
-    enabled: true
-    name: ""
-    spec: {}
-  vmauthCrossAZQuery:
-    enabled: true
-    name: ""
-    spec: {}
-  vmauthIngest:
-    enabled: true
-    name: ""
-    spec:
-        extraArgs:
-            discoverBackendIPs: "true"
-  vmauthQueryPerZone:
-    enabled: true
-    name: ""
-    spec:
-        extraArgs:
-            discoverBackendIPs: "true"
-  vmcluster:
-    enabled: true
-    name: ""
-    spec:
-        replicationFactor: 2
-        retentionPeriod: "14"
-        vminsert:
-            extraArgs: {}
-            replicaCount: 2
-            resources: {}
-        vmselect:
-            extraArgs: {}
-            replicaCount: 2
-            resources: {}
-        vmstorage:
-            replicaCount: 2
-            resources: {}
-            storageDataPath: /vm-data
-
-

config per availability zone components, including vmagent, vmcluster, vmauth etc

-
availabilityZones[0].allowIngest bool
-true
+      
+true
+
 

allow data ingestion to this zone

+

Allow data ingestion to this zone

availabilityZones[0].allowQuery bool
-true
+      
+true
+
 

allow data query from this zone through global query endpoint

+

Allow data query from this zone through global query endpoint

availabilityZones[0].extraAffinity object
-{}
+      
+{}
+
 

extraAffinity adds user defined custom affinity rules

+

Extra affinity adds user defined custom affinity rules

+
availabilityZones[0].namestring
+zone-eu-1
+
+
+

Availability zone name

availabilityZones[0].nodeSelector object
-topology.kubernetes.io/zone: zone-eu-1
+      
+topology.kubernetes.io/zone: zone-eu-1
+
 

nodeselector to restrict where pods of this zone can be placed. usually provided by cloud providers.

+

Node selector to restrict where pods of this zone can be placed. usually provided by cloud providers.

availabilityZones[0].topologySpreadConstraints list
-- maxSkew: 1
+      
+- maxSkew: 1
   topologyKey: kubernetes.io/hostname
   whenUnsatisfiable: ScheduleAnyway
+
 

topologySpreadConstraints allows to customize the default topologySpreadConstraints.

+

Topology spread constraints allows to customize the default topologySpreadConstraints.

availabilityZones[0].vmagent object
-annotations: {}
+      
+annotations: {}
 enabled: true
 name: ""
 spec: {}
+
 

vmagent here only meant to proxy write requests to each az, doesn’t support customized other remote write address.

+

VMAgent here only meant to proxy write requests to each az, doesn’t support customized other remote write address.

availabilityZones[0].vmauthCrossAZQueryavailabilityZones[0].vmagent.annotations object
-enabled: true
-name: ""
-spec: {}
+      
+{}
+
 

set up a vmauth with all the zone with allowQuery: true as query backends

+

VMAgent annotations

+
availabilityZones[0].vmagent.namestring
+""
+
+
+

Override the name of the vmagent object

+
availabilityZones[0].vmagent.specobject
+{}
+
+
+

VMAgent spec. More options can be found here

+
availabilityZones[0].vmauthCrossAZQuery.enabledbool
+true
+
+
+

Create a vmauth with all the zone with allowQuery: true as query backends

+
availabilityZones[0].vmauthCrossAZQuery.namestring
+""
+
+
+

Override the name of the vmauth object

+
availabilityZones[0].vmauthCrossAZQuery.specobject
+{}
+
+
+

VMAuth spec. More options can be found here

+
availabilityZones[0].vmauthIngest.enabledbool
+true
+
+
+

Create vmauth as a local write endpoint

availabilityZones[0].vmauthIngest.name string
-""
+      
+""
+
 

override the name of the vmauth object

+

Override the name of the vmauth object

availabilityZones[0].vmauthIngest.specobject
+extraArgs:
+    discoverBackendIPs: "true"
+
+
+

VMAuth spec. More options can be found here

+
availabilityZones[0].vmauthQueryPerZone.enabledbool
+true
+
+
+

Create vmauth as a local read endpoint

+
availabilityZones[0].vmauthQueryPerZone.namestring
+""
+
+
+

Override the name of the vmauth object

+
availabilityZones[0].vmauthQueryPerZone.specobject
+extraArgs:
+    discoverBackendIPs: "true"
+
+
+

VMAuth spec. More options can be found here

+
availabilityZones[0].vmcluster.enabledbool
+true
+
+
+
availabilityZones[0].vmcluster.name string
-""
+      
+""
+
 

override the name of the vmcluster, by default is vmcluster-

+

Override the name of the vmcluster, by default is vmcluster-

availabilityZones[0].vmcluster.spec object
-replicationFactor: 2
+      
+replicationFactor: 2
 retentionPeriod: "14"
 vminsert:
     extraArgs: {}
@@ -461,91 +494,254 @@ vmstorage:
     replicaCount: 2
     resources: {}
     storageDataPath: /vm-data
+
 

spec for VMCluster crd, see https://docs.victoriametrics.com/operator/api#vmclusterspec

+

Spec for VMCluster CRD, see here

availabilityZones[1].allowIngest bool
-true
+      
+true
+
 

allow data ingestion to this zone

+

Allow data ingestion to this zone

availabilityZones[1].allowQuery bool
-true
+      
+true
+
 

allow data query from this zone through global query endpoint

+

Allow data query from this zone through global query endpoint

availabilityZones[1].extraAffinity object
-{}
+      
+{}
+
 

extraAffinity adds user defined custom affinity rules

+

Extra affinity adds user defined custom affinity rules

+
availabilityZones[1].namestring
+zone-us-1
+
+
+

Availability zone name

availabilityZones[1].nodeSelector object
-topology.kubernetes.io/zone: zone-us-1
+      
+topology.kubernetes.io/zone: zone-us-1
+
 

nodeselector to restrict where pods of this zone can be placed. usually provided by cloud providers.

+

Node selector to restrict where pods of this zone can be placed. usually provided by cloud providers.

availabilityZones[1].topologySpreadConstraints list
-- maxSkew: 1
+      
+- maxSkew: 1
   topologyKey: kubernetes.io/hostname
   whenUnsatisfiable: ScheduleAnyway
+
 

topologySpreadConstraints allows to customize the default topologySpreadConstraints.

+

Topology spread constraints allows to customize the default topologySpreadConstraints.

availabilityZones[1].vmagent object
-annotations: {}
+      
+annotations: {}
 enabled: true
 name: ""
 spec: {}
+
 

vmagent only meant to proxy write requests to each az, doesn’t support customized remote write address

+

VMAgent only meant to proxy write requests to each az, doesn’t support customized remote write address

availabilityZones[1].vmagent.annotationsobject
+{}
+
+
+

VMAgent annotations

+
availabilityZones[1].vmagent.namestring
+""
+
+
+

Override the name of the vmagent object

+
availabilityZones[1].vmagent.specobject
+{}
+
+
+

VMAgent spec. More options can be found here

+
availabilityZones[1].vmauthCrossAZQuery.enabledbool
+true
+
+
+

Create a vmauth with all the zone with allowQuery: true as query backends

+
availabilityZones[1].vmauthCrossAZQuery.namestring
+""
+
+
+

Override the name of the vmauth object

+
availabilityZones[1].vmauthCrossAZQuery.specobject
+{}
+
+
+

VMAuth spec. More options can be found here

+
availabilityZones[1].vmauthIngest.enabledbool
+true
+
+
+

Create vmauth as a local write endpoint

+
availabilityZones[1].vmauthIngest.namestring
+""
+
+
+

Override the name of the vmauth object

+
availabilityZones[1].vmauthIngest.specobject
+extraArgs:
+    discoverBackendIPs: "true"
+
+
+

VMAuth spec. More options can be found here

+
availabilityZones[1].vmauthQueryPerZone.enabledbool
+true
+
+
+

Create vmauth as a local read endpoint

+
availabilityZones[1].vmauthQueryPerZone.namestring
+""
+
+
+

Override the name of the vmauth object

+
availabilityZones[1].vmauthQueryPerZone.specobject
+extraArgs:
+    discoverBackendIPs: "true"
+
+
+

VMAuth spec. More options can be found here

+
availabilityZones[1].vmcluster.enabledbool
+true
+
+
+
availabilityZones[1].vmcluster.name string
-""
+      
+""
+
 

override the name of the vmcluster, by default is vmcluster-

+

Override the name of the vmcluster, by default is vmcluster-

availabilityZones[1].vmcluster.spec object
-replicationFactor: 2
+      
+replicationFactor: 2
 retentionPeriod: "14"
 vminsert:
     extraArgs: {}
@@ -559,59 +755,64 @@ vmstorage:
     replicaCount: 2
     resources: {}
     storageDataPath: /vm-data
+
 

spec for VMCluster crd, see https://docs.victoriametrics.com/operator/api#vmclusterspec

+

Spec for VMCluster CRD, see here

enableMultitenancy bool
-false
+      
+false
+
 

enable multitenancy mode see https://github.com/VictoriaMetrics/helm-charts/tree/master/charts/victoria-metrics-distributed#how-to-use-multitenancy

+

Enable multitenancy mode see here

extraVMAgent object
-enabled: true
+      
+enabled: true
 name: test-vmagent
 spec:
     selectAllByDefault: true
+
 

set up an extra vmagent to scrape all the scrape objects by default, and write data to above vmauth-global-ingest endpoint.

+

Set up an extra vmagent to scrape all the scrape objects by default, and write data to above vmauth-global-ingest endpoint.

fullnameOverride string
-""
+      
+""
+
 

overrides the chart’s computed fullname.

+

Overrides the chart’s computed fullname.

nameOverride string
-vm-distributed
+      
+vm-distributed
+
 

overrides the chart’s name

+

Overrides the chart’s name

victoria-metrics-k8s-stack object
-alertmanager:
+      
+alertmanager:
     enabled: false
 crds:
     enabled: true
@@ -631,33 +832,76 @@ vmcluster:
     enabled: false
 vmsingle:
     enabled: false
+
 

set up vm operator and other resources like vmalert, grafana if needed

+

Set up vm operator and other resources like vmalert, grafana if needed

vmauthIngestGlobalobject
-enabled: true
-name: ""
-spec: {}
+      
vmauthIngestGlobal.enabledbool
+true
+
 

set up a vmauth as the global write entrypoint

+

Create a vmauth as the global write entrypoint

vmauthQueryGlobalobject
-enabled: true
-name: ""
-spec: {}
+      
vmauthIngestGlobal.namestring
+""
+
 

set up a vmauth as the global read entrypoint

+

Override the name of the vmauth object

+
vmauthIngestGlobal.specobject
+{}
+
+
+

VMAuth spec. More options can be found here

+
vmauthQueryGlobal.enabledbool
+true
+
+
+

Create vmauth as the global read entrypoint

+
vmauthQueryGlobal.namestring
+""
+
+
+

Override the name of the vmauth object

+
vmauthQueryGlobal.specobject
+{}
+
+
+

VMAuth spec. More options can be found here

+
- - - - + + + + - - - - - - - - - - + - - - - + - - - + + - - - - - - - - - - - - - - - + - - - - - + - - - + + - + - - + - - + - - - - - - + - - + - - + - - + - - + - - + + + + + + + - - - - + - - - - - - - - + - - - - - - - - + + - + - - - - - - - - - - - - - - - - - + - - + - - + - - + + + + + + + - - + + + + + + + - - + - - + - - + - - + - - + - - + - - - - - - - - - - - -
KeyTypeDefaultDescriptionKeyTypeDefaultDescription
affinity object
-{}
+      
+{}
+
 

Affinity configurations

@@ -206,8 +207,9 @@ Change the values according to the need of the environment in ``victoria-metrics
annotations object
-{}
+      
+{}
+
 

Annotations to be added to the deployment

@@ -216,18 +218,20 @@ Change the values according to the need of the environment in ``victoria-metrics
auth object
-enabled: false
+      
+enabled: false
+
 

Access Control configuration. https://docs.victoriametrics.com/vmgateway#access-control

+

Access Control configuration. Check here for details

auth.enabled bool
-false
+      
+false
+
 

Enable/Disable access-control

@@ -236,8 +240,9 @@ false
clusterMode bool
-false
+      
+false
+
 

Specify to True if the source for rate-limiting, reading and writing as a VictoriaMetrics Cluster. Must be true for rate limiting

@@ -246,82 +251,77 @@ false
configMap string
-""
+      
+""
+
 

Use existing configmap if specified otherwise .config values will be used. Ref: https://docs.victoriametrics.com/vmgateway

+

Use existing configmap if specified otherwise .config values will be used. Check here for details

containerWorkingDir string
-/
+      
+/
+
 

Container working directory

+
env list
-[]
+      
+[]
+
 

Additional environment variables (ex.: secret tokens, flags) https://github.com/VictoriaMetrics/VictoriaMetrics#environment-variables

+

Additional environment variables (ex.: secret tokens, flags). Check here for details.

envFrom list
-[]
+      
+[]
+
 

Specify alternative source for env variables

+
extraArgs."envflag.enable"string
-"true"
+      
extraArgsobject
+envflag.enable: "true"
+envflag.prefix: VM_
+loggerFormat: json
+
 
extraArgs."envflag.prefix"string
-VM_
-
+

Extra command line arguments for container of component

extraArgs.loggerFormatstring
-json
-
-
extraContainers list
-[]
+      
+[]
+
 

Extra containers to run in a pod with vmgateway

+
extraHostPathMounts list
-[]
+      
+[]
+
 

Additional hostPath mounts

@@ -330,8 +330,9 @@ json
extraVolumeMounts list
-[]
+      
+[]
+
 

Extra Volume Mounts for the container

@@ -340,8 +341,9 @@ json
extraVolumes list
-[]
+      
+[]
+
 

Extra Volumes for the pod

@@ -350,44 +352,54 @@ json
fullnameOverride string
-""
+      
+""
+
 

Full name prefix

+
global.compatibility.openshift.adaptSecurityContextstring
-auto
+      
global.compatibilityobject
+openshift:
+    adaptSecurityContext: auto
+
 

Openshift security context compatibility configuration

+
global.image.registry string
-""
+      
+""
+
 

Image registry, that can be shared across multiple helm charts

+
global.imagePullSecrets list
-[]
+      
+[]
+
 

Image pull secrets, that can be shared across multiple helm charts

+
image.pullPolicy string
-IfNotPresent
+      
+IfNotPresent
+
 

Pull policy of Docker image

@@ -396,8 +408,9 @@ IfNotPresent
image.registry string
-""
+      
+""
+
 

Victoria Metrics gateway Docker registry

@@ -406,8 +419,9 @@ IfNotPresent
image.repository string
-victoriametrics/vmgateway
+      
+victoriametrics/vmgateway
+
 

Victoria Metrics gateway Docker repository and image name

@@ -416,8 +430,9 @@ victoriametrics/vmgateway
image.tag string
-""
+      
+""
+
 

Tag of Docker image override Chart.AppVersion

@@ -426,94 +441,122 @@ victoriametrics/vmgateway
image.variant string
-""
+      
+""
+
 

Variant of the image to use. e.g. enterprise, enterprise-scratch

+
imagePullSecrets list
-[]
+      
+[]
+
 

Image pull secrets

+
ingress.annotations object
-{}
+      
+{}
+
 

Ingress annotations

+
ingress.enabled bool
-false
+      
+false
+
 

Enable deployment of ingress for server component

+
ingress.extraLabels object
-{}
+      
+{}
+
 

Ingress extra labels

+
ingress.hosts list
-[]
+      
+[]
+
 

Array of host objects

+
ingress.ingressClassNamestring
+""
+
+
+

Ingress controller class name

+
ingress.pathType string
-Prefix
+      
+Prefix
+
 

pathType is only for k8s >= 1.1=

+

Ingress path type

ingress.tls list
-[]
+      
+[]
+
 

Array of TLS objects

+
license object
-key: ""
+      
+key: ""
 secret:
     key: ""
     name: ""
+
 

Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Documentation - https://docs.victoriametrics.com/enterprise, for more information, visit https://victoriametrics.com/products/enterprise/ . To request a trial license, go to https://victoriametrics.com/products/enterprise/trial/ Supported starting from VictoriaMetrics v1.94.0

+

Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Check docs here, for more information, visit site. Request a trial license here Supported starting from VictoriaMetrics v1.94.0

license.key string
-""
+      
+""
+
 

License key

@@ -522,9 +565,10 @@ secret:
license.secret object
-key: ""
+      
+key: ""
 name: ""
+
 

Use existing secret with license key

@@ -533,8 +577,9 @@ name: ""
license.secret.key string
-""
+      
+""
+
 

Key in secret with license key

@@ -543,8 +588,9 @@ name: ""
license.secret.name string
-""
+      
+""
+
 

Existing secret name

@@ -553,27 +599,31 @@ name: ""
nameOverride string
-""
+      
+""
+
 

Full name suffix

+
nodeSelector object
-{}
+      
+{}
+
 

NodeSelector configurations. Ref: https://kubernetes.io/docs/user-guide/node-selection/

+

NodeSelector configurations. Check here for details

podAnnotations object
-{}
+      
+{}
+
 

Annotations to be added to pod

@@ -582,76 +632,84 @@ name: ""
podDisruptionBudget object
-enabled: false
+      
+enabled: false
 labels: {}
+
 

See kubectl explain poddisruptionbudget.spec for more. Ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb/

+

See kubectl explain poddisruptionbudget.spec for more. Check here for details

podSecurityContext.enabledbool
-true
+      
podSecurityContextobject
+enabled: true
+
 

Pod’s security context. Details are here

+
probe.liveness object
-initialDelaySeconds: 5
+      
+initialDelaySeconds: 5
 periodSeconds: 15
 tcpSocket: {}
 timeoutSeconds: 5
+
 

liveness probe

+

Liveness probe

probe.readiness object
-httpGet: {}
+      
+httpGet: {}
 initialDelaySeconds: 5
 periodSeconds: 15
+
 

readiness probe

+

Readiness probe

probe.startup object
-{}
+      
+{}
+
 

startup probe

+

Startup probe

rateLimiter object
-config: {}
+      
+config: {}
 datasource:
     url: ""
 enabled: false
+
 

Rate limiter configuration. Docs https://docs.victoriametrics.com/vmgateway#rate-limiter

+

Rate limiter configuration. Docs are here

rateLimiter.datasource.url string
-""
+      
+""
+
 

Datasource VictoriaMetrics or vmselects. Required. Example http://victoroametrics:8428 or http://vmselect:8481/select/0/prometheus

@@ -660,8 +718,9 @@ enabled: false
rateLimiter.enabled bool
-false
+      
+false
+
 

Enable/Disable rate-limiting

@@ -670,8 +729,9 @@ false
read.url string
-""
+      
+""
+
 

Read endpoint without suffixes, victoriametrics or vmselect. Example http://victoroametrics:8428 or http://vmselect:8481

@@ -680,8 +740,9 @@ false
replicaCount int
-1
+      
+1
+
 

Number of replicas of vmgateway

@@ -690,8 +751,9 @@ false
resources object
-{}
+      
+{}
+
 

We usually recommend not to specify default resources and to leave this as a conscious choice for the user. This also increases chances charts run on environments with little resources, such as Minikube. If you do want to specify resources, uncomment the following lines, adjust them as necessary, and remove the curly braces after ‘resources:’.

@@ -700,120 +762,166 @@ false
securityContext object
-enabled: true
+      
+enabled: true
 runAsGroup: 1000
 runAsNonRoot: true
 runAsUser: 1000
+
 

Ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/

+

Pod security context. Check here for details

service.annotations object
-{}
+      
+{}
+
 

Service annotations

+
service.clusterIP string
-""
+      
+""
+
 

Service ClusterIP

+
service.enabled bool
-true
+      
+true
+
 

Enabled vmgateway service

+
service.externalIPs list
-[]
+      
+[]
+
 

Service external IPs. Check here for details

+
service.externalTrafficPolicystring
+""
+
+
+

Service external traffic policy. Check here for details

+
service.extraLabels object
-{}
+      
+{}
+
 

Service labels

+
service.healthCheckNodePortstring
+""
+
+
+

Health check node port for a service. Check here for details

+
service.ipFamilies list
-[]
+      
+[]
+
 

List of service IP families. Check here for details.

+
service.ipFamilyPolicy string
-""
+      
+""
+
 

Service IP family policy. Check here for details.

+
service.loadBalancerIP string
-""
+      
+""
+
 

Service load balacner IP

+
service.loadBalancerSourceRanges list
-[]
+      
+[]
+
 

Load balancer source range

+
service.servicePort int
-8431
+      
+8431
+
 

Service port

+
service.type string
-ClusterIP
+      
+ClusterIP
+
 

Service type

+
serviceAccount.annotations object
-{}
+      
+{}
+
 

Annotations to add to the service account

@@ -822,8 +930,9 @@ ClusterIP
serviceAccount.create bool
-true
+      
+true
+
 

Specifies whether a service account should be created

@@ -832,8 +941,9 @@ true
serviceAccount.name string
-null
+      
+null
+
 

The name of the service account to use. If not set and create is true, a name is generated using the fullname template

@@ -842,8 +952,9 @@ null
serviceMonitor.annotations object
-{}
+      
+{}
+
 

Service Monitor annotations

@@ -852,8 +963,9 @@ null
serviceMonitor.basicAuth object
-{}
+      
+{}
+
 

Basic auth params for Service Monitor

@@ -862,8 +974,9 @@ null
serviceMonitor.enabled bool
-false
+      
+false
+
 

Enable deployment of Service Monitor for server component. This is Prometheus operator object

@@ -872,8 +985,9 @@ false
serviceMonitor.extraLabels object
-{}
+      
+{}
+
 

Service Monitor labels

@@ -882,8 +996,9 @@ false
serviceMonitor.metricRelabelings list
-[]
+      
+[]
+
 

Service Monitor metricRelabelings

@@ -892,8 +1007,9 @@ false
serviceMonitor.relabelings list
-[]
+      
+[]
+
 

Service Monitor relabelings

@@ -902,18 +1018,20 @@ false
tolerations list
-[]
+      
+[]
+
 

Tolerations configurations. Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

+

Tolerations configurations. Check here for details

write.url string
-""
+      
+""
+
 

Write endpoint without suffixes, victoriametrics or vminsert. Example http://victoroametrics:8428 or http://vminsert:8480

diff --git a/docs/helm/victoria-metrics-k8s-stack/README.md b/docs/helm/victoria-metrics-k8s-stack/README.md index d95202e0d..a501c5670 100644 --- a/docs/helm/victoria-metrics-k8s-stack/README.md +++ b/docs/helm/victoria-metrics-k8s-stack/README.md @@ -24,7 +24,7 @@ To enable metrics collection for kubernetes this chart installs multiple scrape This chart also installs bunch of dashboards and recording rules from [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus) project. -![Overview](img/k8s-stack-overview.png) +![Overview](img/k8s-stack-overview.webp) ## Configuration @@ -388,61 +388,68 @@ The following tables lists the configurable parameters of the chart and their de Change the values according to the need of the environment in ``victoria-metrics-k8s-stack/values.yaml`` file. - +
- - - - + + + + - - + - - + - - - - + - - - - - + + - + + + + + + + - - - - - - - - - - + - - + - - + - - - + + - + - - + - - - - - + + - + - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - + + - - - - - - - - - - + - - - - - - - - - + - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - + - - - - + - - + - - + - - + - - - + + - + - - + - - - - + - - + - - - + + - + - - - + + - - - - - - - - - - - - - - - - - - - - - - - + - - + - - + - - + - - - + + - + - - + - - - - + - - + - - + - - + - - - + + - + - - + - - - - + - - + - - + - - + - - - + + - + - - + - - - - - + + - + - - - - - - - - - - - - + - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - + - - - - - - - - - - - - - - - - - - - + - - + - - - - - - - - - - - - + - - + - - + - - + + + + + + - - + - - - - - - + - - + - - - - + - - + - - + - - + - - + - - - + + - + + + + + + + - - + - - + - - + - - + - - + - - + - - + - - - + + - + + + + + + + - - + - - + - - + - - + - - + - - + - - + - - - + + - + + + + + + + - - + - - + - - + - - + - - - - - + - - + - - + - - + - - + - - - + + - + + + + + + + - - + - - + - - + - - + - - -
KeyTypeDefaultDescriptionKeyTypeDefaultDescription
additionalVictoriaMetricsMap string
-null
+      
+null
+
 

Provide custom recording or alerting rules to be deployed into the cluster.

+
alertmanager.annotations object
-{}
+      
+{}
+
 

Alertmanager annotations

+
alertmanager.config object
-receivers:
+      
+receivers:
     - name: blackhole
 route:
     receiver: blackhole
 templates:
     - /etc/vm/configs/**/*.tmpl
+
 

alertmanager configuration

+

Alertmanager configuration

alertmanager.enabled bool
-true
+      
+true
+
 

Create VMAlertmanager CR

+
alertmanager.ingress object
-annotations: {}
+      
+annotations: {}
 enabled: false
 extraPaths: []
 hosts:
@@ -451,116 +458,144 @@ labels: {}
 path: '{{ .Values.alertmanager.spec.routePrefix | default "/" }}'
 pathType: Prefix
 tls: []
+
 

alertmanager ingress configuration

+

Alertmanager ingress configuration

alertmanager.monzoTemplate.enabledbool
-true
+      
alertmanager.ingress.extraPathslist
+[]
+
 

Extra paths to prepend to every host configuration. This is useful when working with annotation based services.

+
alertmanager.monzoTemplateobject
+enabled: true
+
+
+

Better alert templates for slack source

+
alertmanager.spec object
-configSecret: ""
+      
+configSecret: ""
 externalURL: ""
 image:
     tag: v0.25.0
 port: "9093"
 routePrefix: /
 selectAllByDefault: true
+
 

full spec for VMAlertmanager CRD. Allowed values described here

+

Full spec for VMAlertmanager CRD. Allowed values described here

alertmanager.spec.configSecret string
-""
+      
+""
+
 

if this one defined, it will be used for alertmanager configuration and config parameter will be ignored

+

If this one defined, it will be used for alertmanager configuration and config parameter will be ignored

alertmanager.templateFiles object
-{}
+      
+{}
+
 

extra alert templates

+

Extra alert templates

argocdReleaseOverride string
-""
+      
+""
+
 

For correct working need set value ‘argocdReleaseOverride=$ARGOCD_APP_NAME’

+

If this chart is used in “Argocd” with “releaseName” field then VMServiceScrapes couldn’t select the proper services. For correct working need set value ‘argocdReleaseOverride=$ARGOCD_APP_NAME’

coreDns.enabled bool
-true
+      
+true
+
 

Enabled CoreDNS metrics scraping

+
coreDns.service.enabled bool
-true
+      
+true
+
 

Create service for CoreDNS metrics

+
coreDns.service.port int
-9153
+      
+9153
+
 

CoreDNS service port

+
coreDns.service.selector.k8s-appstring
-kube-dns
+      
coreDns.service.selectorobject
+k8s-app: kube-dns
+
 

CoreDNS service pod selector

+
coreDns.service.targetPort int
-9153
+      
+9153
+
 

CoreDNS service target port

+
coreDns.vmScrape object
-spec:
+      
+spec:
     endpoints:
         - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
           port: http-metrics
@@ -568,27 +603,31 @@ spec:
     namespaceSelector:
         matchNames:
             - kube-system
+
 

spec for VMServiceScrape crd https://docs.victoriametrics.com/operator/api.html#vmservicescrapespec

+

Spec for VMServiceScrape CRD is here

crds.enabledbool
-true
+      
crdsobject
+enabled: true
+
 

Install VM operator CRDs

+
dashboards object
-node-exporter-full: true
+      
+node-exporter-full: true
 operator: false
 vmalert: false
+
 

Enable dashboards despite it’s dependency is not installed

@@ -597,18 +636,20 @@ vmalert: false
dashboards.node-exporter-full bool
-true
+      
+true
+
 

in ArgoCD using client-side apply this dashboard reaches annotations size limit and causes k8s issues without server side apply See this issue

+

In ArgoCD using client-side apply this dashboard reaches annotations size limit and causes k8s issues without server side apply See this issue

defaultDashboardsEnabled bool
-true
+      
+true
+
 

Create default dashboards

@@ -617,8 +658,8 @@ true
defaultRules object
-alerting:
+      
+alerting:
     spec:
         annotations: {}
         labels: {}
@@ -746,6 +787,7 @@ rule:
         labels: {}
 rules: {}
 runbookUrl: https://runbooks.prometheus-operator.dev/runbooks
+
 

Create default rules for monitoring the cluster

@@ -754,10 +796,11 @@ runbookUrl: https://runbooks.prometheus-operator.dev/runbooks
defaultRules.alerting object
-spec:
+      
+spec:
     annotations: {}
     labels: {}
+
 

Common properties for VMRules alerts

@@ -766,8 +809,9 @@ spec:
defaultRules.alerting.spec.annotations object
-{}
+      
+{}
+
 

Additional annotations for VMRule alerts

@@ -776,8 +820,9 @@ spec:
defaultRules.alerting.spec.labels object
-{}
+      
+{}
+
 

Additional labels for VMRule alerts

@@ -786,8 +831,9 @@ spec:
defaultRules.annotations object
-{}
+      
+{}
+
 

Annotations for default rules

@@ -796,9 +842,10 @@ spec:
defaultRules.group object
-spec:
+      
+spec:
     params: {}
+
 

Common properties for VMRule groups

@@ -807,18 +854,137 @@ spec:
defaultRules.group.spec.params object
-{}
+      
+{}
+
 

Optional HTTP URL parameters added to each rule request

+
defaultRules.groupsobject
+alertmanager:
+    create: true
+    rules: {}
+etcd:
+    create: true
+    rules: {}
+general:
+    create: true
+    rules: {}
+k8sContainerCpuUsageSecondsTotal:
+    create: true
+    rules: {}
+k8sContainerMemoryCache:
+    create: true
+    rules: {}
+k8sContainerMemoryRss:
+    create: true
+    rules: {}
+k8sContainerMemorySwap:
+    create: true
+    rules: {}
+k8sContainerMemoryWorkingSetBytes:
+    create: true
+    rules: {}
+k8sContainerResource:
+    create: true
+    rules: {}
+k8sPodOwner:
+    create: true
+    rules: {}
+kubeApiserver:
+    create: true
+    rules: {}
+kubeApiserverAvailability:
+    create: true
+    rules: {}
+kubeApiserverBurnrate:
+    create: true
+    rules: {}
+kubeApiserverHistogram:
+    create: true
+    rules: {}
+kubeApiserverSlos:
+    create: true
+    rules: {}
+kubePrometheusGeneral:
+    create: true
+    rules: {}
+kubePrometheusNodeRecording:
+    create: true
+    rules: {}
+kubeScheduler:
+    create: true
+    rules: {}
+kubeStateMetrics:
+    create: true
+    rules: {}
+kubelet:
+    create: true
+    rules: {}
+kubernetesApps:
+    create: true
+    rules: {}
+    targetNamespace: .*
+kubernetesResources:
+    create: true
+    rules: {}
+kubernetesStorage:
+    create: true
+    rules: {}
+    targetNamespace: .*
+kubernetesSystem:
+    create: true
+    rules: {}
+kubernetesSystemApiserver:
+    create: true
+    rules: {}
+kubernetesSystemControllerManager:
+    create: true
+    rules: {}
+kubernetesSystemKubelet:
+    create: true
+    rules: {}
+kubernetesSystemScheduler:
+    create: true
+    rules: {}
+node:
+    create: true
+    rules: {}
+nodeNetwork:
+    create: true
+    rules: {}
+vmHealth:
+    create: true
+    rules: {}
+vmagent:
+    create: true
+    rules: {}
+vmcluster:
+    create: true
+    rules: {}
+vmoperator:
+    create: true
+    rules: {}
+vmsingle:
+    create: true
+    rules: {}
+
+
+

Rule group properties

defaultRules.groups.etcd.rules object
-{}
+      
+{}
+
 

Common properties for all rules in a group

@@ -827,8 +993,9 @@ spec:
defaultRules.labels object
-{}
+      
+{}
+
 

Labels for default rules

@@ -837,10 +1004,11 @@ spec:
defaultRules.recording object
-spec:
+      
+spec:
     annotations: {}
     labels: {}
+
 

Common properties for VMRules recording rules

@@ -849,8 +1017,9 @@ spec:
defaultRules.recording.spec.annotations object
-{}
+      
+{}
+
 

Additional annotations for VMRule recording rules

@@ -859,8 +1028,9 @@ spec:
defaultRules.recording.spec.labels object
-{}
+      
+{}
+
 

Additional labels for VMRule recording rules

@@ -869,10 +1039,11 @@ spec:
defaultRules.rule object
-spec:
+      
+spec:
     annotations: {}
     labels: {}
+
 

Common properties for all VMRules

@@ -881,8 +1052,9 @@ spec:
defaultRules.rule.spec.annotations object
-{}
+      
+{}
+
 

Additional annotations for all VMRules

@@ -891,8 +1063,9 @@ spec:
defaultRules.rule.spec.labels object
-{}
+      
+{}
+
 

Additional labels for all VMRules

@@ -901,8 +1074,9 @@ spec:
defaultRules.rules object
-{}
+      
+{}
+
 

Per rule properties

@@ -911,8 +1085,9 @@ spec:
defaultRules.runbookUrl string
-https://runbooks.prometheus-operator.dev/runbooks
+      
+https://runbooks.prometheus-operator.dev/runbooks
+
 

Runbook url prefix for default rules

@@ -921,36 +1096,34 @@ https://runbooks.prometheus-operator.dev/runbooks
experimentalDashboardsEnabled bool
-true
+      
+true
+
 

Create experimental dashboards

externalVM.read.urlstring
-""
+      
externalVMobject
+read:
+    url: ""
+write:
+    url: ""
+
 
externalVM.write.urlstring
-""
-
+

External VM read and write URLs

extraObjects list
-[]
+      
+[]
+
 

Add extra objects dynamically to this chart

@@ -959,294 +1132,166 @@ true
fullnameOverride string
-""
+      
+""
+
 

Resource full name prefix override

+
global.clusterLabel string
-cluster
+      
+cluster
+
 
global.license.keystring
-""
-
+

Cluster label to use for dashboards and rules

global.license.keyRefglobal.license object
-{}
+      
+key: ""
+keyRef: {}
+
 

Global license configuration

+
grafanaobject
+additionalDataSources: []
+defaultDashboardsTimezone: utc
+defaultDatasourceType: prometheus
+enabled: true
+forceDeployDatasource: false
+ingress:
+    annotations: {}
+    enabled: false
+    extraPaths: []
+    hosts:
+        - grafana.domain.com
+    labels: {}
+    path: /
+    pathType: Prefix
+    tls: []
+sidecar:
+    dashboards:
+        additionalDashboardAnnotations: {}
+        additionalDashboardLabels: {}
+        defaultFolderName: default
+        enabled: true
+        folder: /var/lib/grafana/dashboards
+        multicluster: false
+        provider:
+            name: default
+            orgid: 1
+    datasources:
+        createVMReplicasDatasources: false
+        default:
+            - isDefault: true
+              name: VictoriaMetrics
+            - isDefault: false
+              name: VictoriaMetrics (DS)
+              type: victoriametrics-datasource
+        enabled: true
+        initDatasources: true
+vmScrape:
+    enabled: true
+    spec:
+        endpoints:
+            - port: '{{ .Values.grafana.service.portName }}'
+        selector:
+            matchLabels:
+                app.kubernetes.io/name: '{{ include "grafana.name" .Subcharts.grafana }}'
+
+
+

Grafana dependency chart configuration. For possible values refer here

+
grafana.additionalDataSources list
-[]
+      
+[]
+
 
grafana.defaultDashboardsTimezonestring
-utc
-
+

Configure additional grafana datasources (passed through tpl). Check here for details

grafana.defaultDatasourceTypestring
-prometheus
-
-
grafana.enabledbool
-true
-
-
grafana.forceDeployDatasource bool
-false
+      
+false
+
 
grafana.ingress.annotationsobject
-{}
-
+

Create datasource configmap even if grafana deployment has been disabled

grafana.ingress.enabledbool
-false
-
-
grafana.ingress.extraPaths list
-[]
+      
+[]
+
 
grafana.ingress.hosts[0]string
-grafana.domain.com
-
+

Extra paths to prepend to every host configuration. This is useful when working with annotation based services.

grafana.ingress.labelsobject
-{}
-
-
grafana.ingress.pathstring
-/
-
-
grafana.ingress.pathTypestring
-Prefix
-
-
grafana.ingress.tlslist
-[]
-
-
grafana.sidecar.dashboards.additionalDashboardAnnotationsobject
-{}
-
-
grafana.sidecar.dashboards.additionalDashboardLabelsobject
-{}
-
-
grafana.sidecar.dashboards.defaultFolderNamestring
-default
-
-
grafana.sidecar.dashboards.enabledbool
-true
-
-
grafana.sidecar.dashboards.folderstring
-/var/lib/grafana/dashboards
-
-
grafana.sidecar.dashboards.multiclusterbool
-false
-
-
grafana.sidecar.dashboards.provider.namestring
-default
-
-
grafana.sidecar.dashboards.provider.orgidint
-1
-
-
grafana.sidecar.datasources.createVMReplicasDatasourcesbool
-false
-
-
grafana.sidecar.datasources.default list
-- isDefault: true
+      
+- isDefault: true
   name: VictoriaMetrics
 - isDefault: false
   name: VictoriaMetrics (DS)
   type: victoriametrics-datasource
+
 

list of default prometheus compatible datasource configurations. VM url will be added to each of them in templates and type will be set to defaultDatasourceType if not defined

+

List of default prometheus compatible datasource configurations. VM url will be added to each of them in templates and type will be set to defaultDatasourceType if not defined

grafana.sidecar.datasources.enabledbool
-true
-
-
grafana.sidecar.datasources.initDatasourcesbool
-true
-
-
grafana.vmScrape object
-enabled: true
+      
+enabled: true
 spec:
     endpoints:
         - port: '{{ .Values.grafana.service.portName }}'
     selector:
         matchLabels:
             app.kubernetes.io/name: '{{ include "grafana.name" .Subcharts.grafana }}'
+
 

grafana VM scrape config

+

Grafana VM scrape config

grafana.vmScrape.spec object
-endpoints:
+      
+endpoints:
     - port: '{{ .Values.grafana.service.portName }}'
 selector:
     matchLabels:
         app.kubernetes.io/name: '{{ include "grafana.name" .Subcharts.grafana }}'
+
 

Scrape configuration for Grafana

@@ -1255,31 +1300,48 @@ selector:
grafanaOperatorDashboardsFormat object
-allowCrossNamespaceImport: false
+      
+allowCrossNamespaceImport: false
 enabled: false
 instanceSelector:
     matchLabels:
         dashboards: grafana
+
 

Create dashboards as CRDs (reuqires grafana-operator to be installed)

kube-state-metrics.enabledbool
-true
+      
kube-state-metricsobject
+enabled: true
+vmScrape:
+    enabled: true
+    spec:
+        endpoints:
+            - honorLabels: true
+              metricRelabelConfigs:
+                - action: labeldrop
+                  regex: (uid|container_id|image_id)
+              port: http
+        jobLabel: app.kubernetes.io/name
+        selector:
+            matchLabels:
+                app.kubernetes.io/instance: '{{ include "vm.release" . }}'
+                app.kubernetes.io/name: '{{ include "kube-state-metrics.name" (index .Subcharts "kube-state-metrics") }}'
+
 

kube-state-metrics dependency chart configuration. For possible values check here

+
kube-state-metrics.vmScrape object
-enabled: true
+      
+enabled: true
 spec:
     endpoints:
         - honorLabels: true
@@ -1292,6 +1354,7 @@ spec:
         matchLabels:
             app.kubernetes.io/instance: '{{ include "vm.release" . }}'
             app.kubernetes.io/name: '{{ include "kube-state-metrics.name" (index .Subcharts "kube-state-metrics") }}'
+
 

Scrape configuration for Kube State Metrics

@@ -1300,17 +1363,19 @@ spec:
kubeApiServer.enabled bool
-true
+      
+true
+
 

Enable Kube Api Server metrics scraping

+
kubeApiServer.vmScrape object
-spec:
+      
+spec:
     endpoints:
         - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
           port: https
@@ -1326,70 +1391,83 @@ spec:
         matchLabels:
             component: apiserver
             provider: kubernetes
+
 

spec for VMServiceScrape crd https://docs.victoriametrics.com/operator/api.html#vmservicescrapespec

+

Spec for VMServiceScrape CRD is here

kubeControllerManager.enabled bool
-true
+      
+true
+
 

Enable kube controller manager metrics scraping

+
kubeControllerManager.endpoints list
-[]
+      
+[]
+
 

If your kube controller manager is not deployed as a pod, specify IPs it can be found on

+
kubeControllerManager.service.enabled bool
-true
+      
+true
+
 

Create service for kube controller manager metrics scraping

+
kubeControllerManager.service.port int
-10257
+      
+10257
+
 

Kube controller manager service port

+
kubeControllerManager.service.selector.componentstring
-kube-controller-manager
+      
kubeControllerManager.service.selectorobject
+component: kube-controller-manager
+
 

Kube controller manager service pod selector

+
kubeControllerManager.service.targetPort int
-10257
+      
+10257
+
 

Kube controller manager service target port

+
kubeControllerManager.vmScrape object
-spec:
+      
+spec:
     endpoints:
         - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
           port: http-metrics
@@ -1401,79 +1479,66 @@ spec:
     namespaceSelector:
         matchNames:
             - kube-system
+
 

spec for VMServiceScrape crd https://docs.victoriametrics.com/operator/api.html#vmservicescrapespec

+

Spec for VMServiceScrape CRD is here

kubeDns.enabled bool
-false
+      
+false
+
 

Enabled KubeDNS metrics scraping

+
kubeDns.service.enabled bool
-false
+      
+false
+
 

Create Service for KubeDNS metrics

+
kubeDns.service.ports.dnsmasq.portint
-10054
+      
kubeDns.service.portsobject
+dnsmasq:
+    port: 10054
+    targetPort: 10054
+skydns:
+    port: 10055
+    targetPort: 10055
+
 

KubeDNS service ports

+
kubeDns.service.ports.dnsmasq.targetPortint
-10054
+      
kubeDns.service.selectorobject
+k8s-app: kube-dns
+
 
kubeDns.service.ports.skydns.portint
-10055
-
+

KubeDNS service pods selector

kubeDns.service.ports.skydns.targetPortint
-10055
-
-
kubeDns.service.selector.k8s-appstring
-kube-dns
-
-
kubeDns.vmScrape object
-spec:
+      
+spec:
     endpoints:
         - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
           port: http-metrics-dnsmasq
@@ -1483,70 +1548,83 @@ spec:
     namespaceSelector:
         matchNames:
             - kube-system
+
 

spec for VMServiceScrape crd https://docs.victoriametrics.com/operator/api.html#vmservicescrapespec

+

Spec for VMServiceScrape CRD is here

kubeEtcd.enabled bool
-true
+      
+true
+
 

Enabled KubeETCD metrics scraping

+
kubeEtcd.endpoints list
-[]
+      
+[]
+
 

If your etcd is not deployed as a pod, specify IPs it can be found on

+
kubeEtcd.service.enabled bool
-true
+      
+true
+
 

Enable service for ETCD metrics scraping

+
kubeEtcd.service.port int
-2379
+      
+2379
+
 

ETCD service port

+
kubeEtcd.service.selector.componentstring
-etcd
+      
kubeEtcd.service.selectorobject
+component: etcd
+
 

ETCD service pods selector

+
kubeEtcd.service.targetPort int
-2379
+      
+2379
+
 

ETCD service target port

+
kubeEtcd.vmScrape object
-spec:
+      
+spec:
     endpoints:
         - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
           port: http-metrics
@@ -1557,70 +1635,83 @@ spec:
     namespaceSelector:
         matchNames:
             - kube-system
+
 

spec for VMServiceScrape crd https://docs.victoriametrics.com/operator/api.html#vmservicescrapespec

+

Spec for VMServiceScrape CRD is here

kubeProxy.enabled bool
-false
+      
+false
+
 

Enable kube proxy metrics scraping

+
kubeProxy.endpoints list
-[]
+      
+[]
+
 

If your kube proxy is not deployed as a pod, specify IPs it can be found on

+
kubeProxy.service.enabled bool
-true
+      
+true
+
 

Enable service for kube proxy metrics scraping

+
kubeProxy.service.port int
-10249
+      
+10249
+
 

Kube proxy service port

+
kubeProxy.service.selector.k8s-appstring
-kube-proxy
+      
kubeProxy.service.selectorobject
+k8s-app: kube-proxy
+
 

Kube proxy service pod selector

+
kubeProxy.service.targetPort int
-10249
+      
+10249
+
 

Kube proxy service target port

+
kubeProxy.vmScrape object
-spec:
+      
+spec:
     endpoints:
         - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
           port: http-metrics
@@ -1631,70 +1722,83 @@ spec:
     namespaceSelector:
         matchNames:
             - kube-system
+
 

spec for VMServiceScrape crd https://docs.victoriametrics.com/operator/api.html#vmservicescrapespec

+

Spec for VMServiceScrape CRD is here

kubeScheduler.enabled bool
-true
+      
+true
+
 

Enable KubeScheduler metrics scraping

+
kubeScheduler.endpoints list
-[]
+      
+[]
+
 

If your kube scheduler is not deployed as a pod, specify IPs it can be found on

+
kubeScheduler.service.enabled bool
-true
+      
+true
+
 

Enable service for KubeScheduler metrics scrape

+
kubeScheduler.service.port int
-10259
+      
+10259
+
 

KubeScheduler service port

+
kubeScheduler.service.selector.componentstring
-kube-scheduler
+      
kubeScheduler.service.selectorobject
+component: kube-scheduler
+
 

KubeScheduler service pod selector

+
kubeScheduler.service.targetPort int
-10259
+      
+10259
+
 

KubeScheduler service target port

+
kubeScheduler.vmScrape object
-spec:
+      
+spec:
     endpoints:
         - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
           port: http-metrics
@@ -1705,25 +1809,68 @@ spec:
     namespaceSelector:
         matchNames:
             - kube-system
+
 

spec for VMServiceScrape crd https://docs.victoriametrics.com/operator/api.html#vmservicescrapespec

+

Spec for VMServiceScrape CRD is here

kubelet.enabledbool
-true
+      
kubeletobject
+enabled: true
+vmScrape:
+    kind: VMNodeScrape
+    spec:
+        bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
+        honorLabels: true
+        honorTimestamps: false
+        interval: 30s
+        metricRelabelConfigs:
+            - action: labeldrop
+              regex: (uid)
+            - action: labeldrop
+              regex: (id|name)
+            - action: drop
+              regex: (rest_client_request_duration_seconds_bucket|rest_client_request_duration_seconds_sum|rest_client_request_duration_seconds_count)
+              source_labels:
+                - __name__
+        relabelConfigs:
+            - action: labelmap
+              regex: __meta_kubernetes_node_label_(.+)
+            - sourceLabels:
+                - __metrics_path__
+              targetLabel: metrics_path
+            - replacement: kubelet
+              targetLabel: job
+        scheme: https
+        scrapeTimeout: 5s
+        tlsConfig:
+            caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
+            insecureSkipVerify: true
+vmScrapes:
+    cadvisor:
+        enabled: true
+        spec:
+            path: /metrics/cadvisor
+    kubelet:
+        spec: {}
+    probes:
+        enabled: true
+        spec:
+            path: /metrics/probes
+
 

Component scraping the kubelets

+
kubelet.vmScrape object
-kind: VMNodeScrape
+      
+kind: VMNodeScrape
 spec:
     bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
     honorLabels: true
@@ -1751,39 +1898,33 @@ spec:
     tlsConfig:
         caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
         insecureSkipVerify: true
+
 

spec for VMNodeScrape crd https://docs.victoriametrics.com/operator/api.html#vmnodescrapespec

+

Spec for VMNodeScrape CRD is here

kubelet.vmScrapes.cadvisor object
-enabled: true
+      
+enabled: true
 spec:
     path: /metrics/cadvisor
+
 

Enable scraping /metrics/cadvisor from kubelet’s service

kubelet.vmScrapes.kubelet.specobject
-{}
-
-
kubelet.vmScrapes.probes object
-enabled: true
+      
+enabled: true
 spec:
     path: /metrics/probes
+
 

Enable scraping /metrics/probes from kubelet’s service

@@ -1792,53 +1933,50 @@ spec:
nameOverride string
-""
+      
+""
+
 

Resource full name suffix override

+
prometheus-node-exporter.enabledbool
-true
+      
prometheus-node-exporterobject
+enabled: true
+extraArgs:
+    - --collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/.+)($|/)
+    - --collector.filesystem.ignored-fs-types=^(autofs|binfmt_misc|bpf|cgroup2?|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|iso9660|mqueue|nsfs|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|selinuxfs|squashfs|sysfs|tracefs)$
+service:
+    labels:
+        jobLabel: node-exporter
+vmScrape:
+    enabled: true
+    spec:
+        endpoints:
+            - metricRelabelConfigs:
+                - action: drop
+                  regex: /var/lib/kubelet/pods.+
+                  source_labels:
+                    - mountpoint
+              port: metrics
+        jobLabel: jobLabel
+        selector:
+            matchLabels:
+                app.kubernetes.io/name: '{{ include "prometheus-node-exporter.name" (index .Subcharts "prometheus-node-exporter") }}'
+
 
prometheus-node-exporter.extraArgs[0]string
---collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/.+)($|/)
-
+

prometheus-node-exporter dependency chart configuration. For possible values check here

prometheus-node-exporter.extraArgs[1]string
---collector.filesystem.ignored-fs-types=^(autofs|binfmt_misc|bpf|cgroup2?|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|iso9660|mqueue|nsfs|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|selinuxfs|squashfs|sysfs|tracefs)$
-
-
prometheus-node-exporter.service.labels.jobLabelstring
-node-exporter
-
-
prometheus-node-exporter.vmScrape object
-enabled: true
+      
+enabled: true
 spec:
     endpoints:
         - metricRelabelConfigs:
@@ -1851,16 +1989,17 @@ spec:
     selector:
         matchLabels:
             app.kubernetes.io/name: '{{ include "prometheus-node-exporter.name" (index .Subcharts "prometheus-node-exporter") }}'
+
 

node exporter VM scrape config

+

Node Exporter VM scrape config

prometheus-node-exporter.vmScrape.spec object
-endpoints:
+      
+endpoints:
     - metricRelabelConfigs:
         - action: drop
           regex: /var/lib/kubelet/pods.+
@@ -1871,25 +2010,29 @@ jobLabel: jobLabel
 selector:
     matchLabels:
         app.kubernetes.io/name: '{{ include "prometheus-node-exporter.name" (index .Subcharts "prometheus-node-exporter") }}'
+
 

Scrape configuration for Node Exporter

prometheus-operator-crds.enabledbool
-false
+      
prometheus-operator-crdsobject
+enabled: false
+
 

Install prometheus operator CRDs

+
serviceAccount.annotations object
-{}
+      
+{}
+
 

Annotations to add to the service account

@@ -1898,8 +2041,9 @@ false
serviceAccount.create bool
-true
+      
+true
+
 

Specifies whether a service account should be created

@@ -1908,27 +2052,30 @@ true
serviceAccount.name string
-""
+      
+""
+
 

If not set and create is true, a name is generated using the fullname template

+

The name of the service account to use. If not set and create is true, a name is generated using the fullname template

tenant string
-"0"
+      
+"0"
+
 

Tenant to use for Grafana datasources and remote write

+
victoria-metrics-operator object
-crd:
+      
+crd:
     cleanup:
         enabled: true
         image:
@@ -1940,39 +2087,18 @@ operator:
     disable_prometheus_converter: false
 serviceMonitor:
     enabled: true
+
 

also checkout here possible ENV variables to configure operator behaviour https://docs.victoriametrics.com/operator/vars

-
victoria-metrics-operator.crd.cleanupobject
-enabled: true
-image:
-    pullPolicy: IfNotPresent
-    repository: bitnami/kubectl
-
-

tells helm to clean up vm cr resources when uninstalling

-
victoria-metrics-operator.crd.createbool
-false
-
-

we disable crd creation by operator chart as we create them in this chart

+

VictoriaMetrics Operator dependency chart configuration. More values can be found here. Also checkout here possible ENV variables to configure operator behaviour

victoria-metrics-operator.operator.disable_prometheus_converter bool
-false
+      
+false
+
 

By default, operator converts prometheus-operator objects.

@@ -1981,36 +2107,41 @@ false
vmagent.additionalRemoteWrites list
-[]
+      
+[]
+
 

remoteWrite configuration of VMAgent, allowed parameters defined in a spec

+

Remote write configuration of VMAgent, allowed parameters defined in a spec

vmagent.annotations object
-{}
+      
+{}
+
 

VMAgent annotations

+
vmagent.enabled bool
-true
+      
+true
+
 

Create VMAgent CR

+
vmagent.ingress object
-annotations: {}
+      
+annotations: {}
 enabled: false
 extraPaths: []
 hosts:
@@ -2019,26 +2150,17 @@ labels: {}
 path: ""
 pathType: Prefix
 tls: []
+
 

vmagent ingress configuration

-
vmagent.ingress.extraPathslist
-[]
-
-

Extra paths to prepend to every host configuration. This is useful when working with annotation based services.

+

VMAgent ingress configuration

vmagent.spec object
-externalLabels: {}
+      
+externalLabels: {}
 extraArgs:
     promscrape.dropOriginalLabels: "true"
     promscrape.streamParse: "true"
@@ -2047,43 +2169,50 @@ image:
 port: "8429"
 scrapeInterval: 20s
 selectAllByDefault: true
+
 

full spec for VMAgent CRD. Allowed values described here

+

Full spec for VMAgent CRD. Allowed values described here

vmalert.additionalNotifierConfigs object
-{}
+      
+{}
+
 

Allows to configure static notifiers, discover notifiers via Consul and DNS, see specification here. This configuration will be created as separate secret and mounted to VMAlert pod.

+
vmalert.annotations object
-{}
+      
+{}
+
 

VMAlert annotations

+
vmalert.enabled bool
-true
+      
+true
+
 

Create VMAlert CR

+
vmalert.ingress object
-annotations: {}
+      
+annotations: {}
 enabled: false
 extraPaths: []
 hosts:
@@ -2092,25 +2221,39 @@ labels: {}
 path: ""
 pathType: Prefix
 tls: []
+
 

vmalert ingress config

+

VMAlert ingress config

+
vmalert.ingress.extraPathslist
+[]
+
+
+

Extra paths to prepend to every host configuration. This is useful when working with annotation based services.

vmalert.remoteWriteVMAgent bool
-false
+      
+false
+
 

Controls whether VMAlert should use VMAgent or VMInsert as a target for remotewrite

+
vmalert.spec object
-evaluationInterval: 15s
+      
+evaluationInterval: 15s
 externalLabels: {}
 extraArgs:
     http.pathPrefix: /
@@ -2118,289 +2261,381 @@ image:
     tag: v1.103.0
 port: "8080"
 selectAllByDefault: true
+
 

full spec for VMAlert CRD. Allowed values described here

+

Full spec for VMAlert CRD. Allowed values described here

vmalert.templateFiles object
-{}
+      
+{}
+
 

extra vmalert annotation templates

+

Extra VMAlert annotation templates

vmauth.annotations object
-{}
+      
+{}
+
 

VMAuth annotations

+
vmauth.enabled bool
-false
+      
+false
+
 

Enable VMAuth CR

+
vmauth.spec object
-discover_backend_ips: true
+      
+discover_backend_ips: true
 port: "8427"
+
 

full spec for VMAuth CRD. Allowed values described here

+

Full spec for VMAuth CRD. Allowed values described here

vmcluster.annotations object
-{}
+      
+{}
+
 

VMCluster annotations

+
vmcluster.enabled bool
-false
+      
+false
+
 

Create VMCluster CR

+
vmcluster.ingress.insert.annotations object
-{}
+      
+{}
+
 

Ingress annotations

+
vmcluster.ingress.insert.enabled bool
-false
+      
+false
+
 

Enable deployment of ingress for server component

+
vmcluster.ingress.insert.extraPaths list
-[]
+      
+[]
+
 

Extra paths to prepend to every host configuration. This is useful when working with annotation based services.

+
vmcluster.ingress.insert.hosts[0]string
-vminsert.domain.com
+      
vmcluster.ingress.insert.hostslist
+[]
+
 

Array of host objects

+
vmcluster.ingress.insert.ingressClassNamestring
+""
+
+
+

Ingress controller class name

+
vmcluster.ingress.insert.labels object
-{}
+      
+{}
+
 

Ingress extra labels

+
vmcluster.ingress.insert.path string
-'{{ dig "extraArgs" "http.pathPrefix" "/" .Values.vmcluster.spec.vminsert }}'
+      
+'{{ dig "extraArgs" "http.pathPrefix" "/" .Values.vmcluster.spec.vminsert }}'
+
 

Ingress default path

+
vmcluster.ingress.insert.pathType string
-Prefix
+      
+Prefix
+
 

Ingress path type

+
vmcluster.ingress.insert.tls list
-[]
+      
+[]
+
 

Array of TLS objects

+
vmcluster.ingress.select.annotations object
-{}
+      
+{}
+
 

Ingress annotations

+
vmcluster.ingress.select.enabled bool
-false
+      
+false
+
 

Enable deployment of ingress for server component

+
vmcluster.ingress.select.extraPaths list
-[]
+      
+[]
+
 

Extra paths to prepend to every host configuration. This is useful when working with annotation based services.

+
vmcluster.ingress.select.hosts[0]string
-vmselect.domain.com
+      
vmcluster.ingress.select.hostslist
+[]
+
 

Array of host objects

+
vmcluster.ingress.select.ingressClassNamestring
+""
+
+
+

Ingress controller class name

+
vmcluster.ingress.select.labels object
-{}
+      
+{}
+
 

Ingress extra labels

+
vmcluster.ingress.select.path string
-'{{ dig "extraArgs" "http.pathPrefix" "/" .Values.vmcluster.spec.vmselect }}'
+      
+'{{ dig "extraArgs" "http.pathPrefix" "/" .Values.vmcluster.spec.vmselect }}'
+
 

Ingress default path

+
vmcluster.ingress.select.pathType string
-Prefix
+      
+Prefix
+
 

Ingress path type

+
vmcluster.ingress.select.tls list
-[]
+      
+[]
+
 

Array of TLS objects

+
vmcluster.ingress.storage.annotations object
-{}
+      
+{}
+
 

Ingress annotations

+
vmcluster.ingress.storage.enabled bool
-false
+      
+false
+
 

Enable deployment of ingress for server component

+
vmcluster.ingress.storage.extraPaths list
-[]
+      
+[]
+
 

Extra paths to prepend to every host configuration. This is useful when working with annotation based services.

+
vmcluster.ingress.storage.hosts[0]string
-vmstorage.domain.com
+      
vmcluster.ingress.storage.hostslist
+[]
+
 

Array of host objects

+
vmcluster.ingress.storage.ingressClassNamestring
+""
+
+
+

Ingress controller class name

+
vmcluster.ingress.storage.labels object
-{}
+      
+{}
+
 

Ingress extra labels

+
vmcluster.ingress.storage.path string
-""
+      
+""
+
 

Ingress default path

+
vmcluster.ingress.storage.pathType string
-Prefix
+      
+Prefix
+
 

Ingress path type

+
vmcluster.ingress.storage.tls list
-[]
+      
+[]
+
 

Array of TLS objects

+
vmcluster.spec object
-replicationFactor: 2
+      
+replicationFactor: 2
 retentionPeriod: "1"
 vminsert:
     extraArgs: {}
@@ -2435,16 +2670,18 @@ vmstorage:
                     requests:
                         storage: 10Gi
     storageDataPath: /vm-data
+
 

full spec for VMCluster CRD. Allowed values described here

+

Full spec for VMCluster CRD. Allowed values described here

vmcluster.spec.retentionPeriod string
-"1"
+      
+"1"
+
 

Data retention period. Possible units character: h(ours), d(ays), w(eeks), y(ears), if no unit character specified - month. The minimum retention period is 24h. See these docs

@@ -2453,98 +2690,129 @@ vmstorage:
vmsingle.annotations object
-{}
+      
+{}
+
 

VMSingle annotations

+
vmsingle.enabled bool
-true
+      
+true
+
 

Create VMSingle CR

+
vmsingle.ingress.annotations object
-{}
+      
+{}
+
 

Ingress annotations

+
vmsingle.ingress.enabled bool
-false
+      
+false
+
 

Enable deployment of ingress for server component

+
vmsingle.ingress.extraPaths list
-[]
+      
+[]
+
 

Extra paths to prepend to every host configuration. This is useful when working with annotation based services.

+
vmsingle.ingress.hosts[0]string
-vmsingle.domain.com
+      
vmsingle.ingress.hostslist
+[]
+
 

Array of host objects

+
vmsingle.ingress.ingressClassNamestring
+""
+
+
+

Ingress controller class name

+
vmsingle.ingress.labels object
-{}
+      
+{}
+
 

Ingress extra labels

+
vmsingle.ingress.path string
-""
+      
+""
+
 

Ingress default path

+
vmsingle.ingress.pathType string
-Prefix
+      
+Prefix
+
 

Ingress path type

+
vmsingle.ingress.tls list
-[]
+      
+[]
+
 

Array of TLS objects

+
vmsingle.spec object
-extraArgs: {}
+      
+extraArgs: {}
 image:
     tag: v1.103.0
 port: "8429"
@@ -2556,16 +2824,18 @@ storage:
     resources:
         requests:
             storage: 20Gi
+
 

full spec for VMSingle CRD. Allowed values describe here

+

Full spec for VMSingle CRD. Allowed values describe here

vmsingle.spec.retentionPeriod string
-"1"
+      
+"1"
+
 

Data retention period. Possible units character: h(ours), d(ays), w(eeks), y(ears), if no unit character specified - month. The minimum retention period is 24h. See these docs

diff --git a/docs/helm/victoria-metrics-k8s-stack/img/k8s-stack-overview.webp b/docs/helm/victoria-metrics-k8s-stack/img/k8s-stack-overview.webp new file mode 100644 index 0000000000000000000000000000000000000000..84b6f6aa5e3c8be4fbd1ca030e1729759dec9c3b GIT binary patch literal 94866 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%0DoEZ(|Uyx0`rId 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 + - - - - + + + + - - - - - - - - - - - - - - - - - + - - - - + - - - - - - - + + + + + + - - + - - + - - - - - - - - - - - - - - - - - + - - + - - - - - - - - - - + - - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - - - - - -
KeyTypeDefaultDescriptionKeyTypeDefaultDescription
admissionWebhooks object
-certManager:
+      
+certManager:
     enabled: false
     issuer: {}
 enabled: true
@@ -226,6 +226,7 @@ tls:
     caCert: null
     cert: null
     key: null
+
 

Configures resource validation

@@ -234,19 +235,21 @@ tls:
admissionWebhooks.certManager object
-enabled: false
+      
+enabled: false
 issuer: {}
+
 

with keys: tls.key, tls.crt, ca.crt

+

Enables custom ca bundle, if you are not using cert-manager. In case of custom ca, you have to create secret - {chart-name}-validation with keys: tls.key, tls.crt, ca.crt

admissionWebhooks.certManager.enabled bool
-false
+      
+false
+
 

Enables cert creation and injection by cert-manager.

@@ -255,8 +258,9 @@ false
admissionWebhooks.certManager.issuer object
-{}
+      
+{}
+
 

If needed, provide own issuer. Operator will create self-signed if empty.

@@ -265,8 +269,9 @@ false
admissionWebhooks.enabled bool
-true
+      
+true
+
 

Enables validation webhook.

@@ -275,8 +280,9 @@ true
admissionWebhooks.policy string
-Fail
+      
+Fail
+
 

What to do in case, when operator not available to validate request.

@@ -285,8 +291,9 @@ Fail
affinity object
-{}
+      
+{}
+
 

Pod affinity

@@ -295,8 +302,9 @@ Fail
annotations object
-{}
+      
+{}
+
 

Annotations to be added to the all resources

@@ -305,8 +313,9 @@ Fail
crd.cleanup.enabled bool
-false
+      
+false
+
 

Tells helm to clean up all the vm resources under this release’s namespace when uninstalling

@@ -315,10 +324,11 @@ false
crd.cleanup.image object
-pullPolicy: IfNotPresent
+      
+pullPolicy: IfNotPresent
 repository: bitnami/kubectl
 tag: ""
+
 

Image configuration for CRD cleanup Job

@@ -327,56 +337,64 @@ tag: ""
crd.create bool
-true
+      
+true
+
 

with this option, if you remove this chart, all crd resources will be deleted with it.

+

Enables CRD creation and management. With this option, if you remove this chart, all CRD resources will be deleted with it.

env list
-[]
+      
+[]
+
 

extra settings for the operator deployment. Full list here

+

Extra settings for the operator deployment. Full list here

envFrom list
-[]
+      
+[]
+
 

Specify alternative source for env variables

+
extraArgs object
-{}
+      
+{}
+
 

operator container additional commandline arguments

+

Operator container additional commandline arguments

extraContainers list
-[]
+      
+[]
+
 

Extra containers to run in a pod with operator

+
extraHostPathMounts list
-[]
+      
+[]
+
 

Additional hostPath mounts

@@ -385,8 +403,9 @@ true
extraLabels object
-{}
+      
+{}
+
 

Labels to be added to the all resources

@@ -395,8 +414,9 @@ true
extraObjects list
-[]
+      
+[]
+
 

Add extra specs dynamically to this chart

@@ -405,8 +425,9 @@ true
extraVolumeMounts list
-[]
+      
+[]
+
 

Extra Volume Mounts for the container

@@ -415,8 +436,9 @@ true
extraVolumes list
-[]
+      
+[]
+
 

Extra Volumes for the pod

@@ -425,8 +447,9 @@ true
fullnameOverride string
-""
+      
+""
+
 

Overrides the full name of server component

@@ -435,39 +458,57 @@ true
global.cluster.dnsDomain string
-cluster.local
+      
+cluster.local
+
 
global.compatibilityobject
+openshift:
+    adaptSecurityContext: auto
+
+
+

Openshift security context compatibility configuration

+
global.image.registry string
-""
+      
+""
+
 

Image registry, that can be shared across multiple helm charts

+
global.imagePullSecrets list
-[]
+      
+[]
+
 

Image pull secrets, that can be shared across multiple helm charts

+
image object
-pullPolicy: IfNotPresent
+      
+pullPolicy: IfNotPresent
 registry: ""
 repository: victoriametrics/operator
 tag: ""
 variant: ""
+
 

operator image configuration

@@ -476,8 +517,9 @@ variant: ""
image.pullPolicy string
-IfNotPresent
+      
+IfNotPresent
+
 

Image pull policy

@@ -486,8 +528,9 @@ IfNotPresent
image.registry string
-""
+      
+""
+
 

Image registry

@@ -496,8 +539,9 @@ IfNotPresent
image.repository string
-victoriametrics/operator
+      
+victoriametrics/operator
+
 

Image repository

@@ -506,8 +550,9 @@ victoriametrics/operator
image.tag string
-""
+      
+""
+
 

Image tag override Chart.AppVersion

@@ -516,8 +561,9 @@ victoriametrics/operator
imagePullSecrets list
-[]
+      
+[]
+
 

Secret to pull images

@@ -526,18 +572,20 @@ victoriametrics/operator
logLevel string
-info
+      
+info
+
 

possible values: info and error.

+

VM operator log level. Possible values: info and error.

nameOverride string
-""
+      
+""
+
 

VM operatror deployment name override

@@ -546,8 +594,9 @@ info
nodeSelector object
-{}
+      
+{}
+
 

Pod’s node selector. Details are here

@@ -556,8 +605,9 @@ info
operator.disable_prometheus_converter bool
-false
+      
+false
+
 

By default, operator converts prometheus-operator objects.

@@ -566,8 +616,9 @@ false
operator.enable_converter_ownership bool
-false
+      
+false
+
 

Enables ownership reference for converted prometheus-operator objects, it will remove corresponding victoria-metrics objects in case of deletion prometheus one.

@@ -576,8 +627,9 @@ false
operator.prometheus_converter_add_argocd_ignore_annotations bool
-false
+      
+false
+
 

Compare-options and sync-options for prometheus objects converted by operator for properly use with ArgoCD

@@ -586,8 +638,9 @@ false
operator.useCustomConfigReloader bool
-false
+      
+false
+
 

Enables custom config-reloader, bundled with operator. It should reduce vmagent and vmauth config sync-time and make it predictable.

@@ -596,9 +649,10 @@ false
podDisruptionBudget object
-enabled: false
+      
+enabled: false
 labels: {}
+
 

See kubectl explain poddisruptionbudget.spec for more or check these docs

@@ -607,31 +661,36 @@ labels: {}
podLabels object
-{}
+      
+{}
+
 

extra Labels for Pods only

+
podSecurityContext object
-{}
+      
+{}
+
 

Pod’s security context. Details are here

+
probe.liveness object
-failureThreshold: 3
+      
+failureThreshold: 3
 initialDelaySeconds: 5
 periodSeconds: 15
 tcpSocket:
     port: probe
 timeoutSeconds: 5
+
 

Liveness probe

@@ -640,13 +699,14 @@ timeoutSeconds: 5
probe.readiness object
-failureThreshold: 3
+      
+failureThreshold: 3
 httpGet:
     port: probe
 initialDelaySeconds: 5
 periodSeconds: 15
 timeoutSeconds: 5
+
 

Readiness probe

@@ -655,8 +715,9 @@ timeoutSeconds: 5
probe.startup object
-{}
+      
+{}
+
 

Startup probe

@@ -665,36 +726,39 @@ timeoutSeconds: 5
rbac.aggregatedClusterRoles object
-enabled: true
+      
+enabled: true
 labels:
     admin:
         rbac.authorization.k8s.io/aggregate-to-admin: "true"
     view:
         rbac.authorization.k8s.io/aggregate-to-view: "true"
+
 

create aggregated clusterRoles for CRD readonly and admin permissions

+

Create aggregated clusterRoles for CRD readonly and admin permissions

rbac.aggregatedClusterRoles.labels object
-admin:
+      
+admin:
     rbac.authorization.k8s.io/aggregate-to-admin: "true"
 view:
     rbac.authorization.k8s.io/aggregate-to-view: "true"
+
 

labels attached to according clusterRole

+

Labels attached to according clusterRole

rbac.create bool
-true
+      
+true
+
 

Specifies whether the RBAC resources should be created

@@ -703,17 +767,20 @@ true
replicaCount int
-1
+      
+1
+
 

Number of operator replicas

+
resources object
-{}
+      
+{}
+
 

Resource object

@@ -722,134 +789,163 @@ true
securityContext object
-{}
+      
+{}
+
 

Security context to be added to server pods

+
service.annotations object
-{}
+      
+{}
+
 

Service annotations

+
service.clusterIP string
-""
+      
+""
+
 

Service ClusterIP

+
service.externalIPs string
-""
+      
+""
+
 

Service external IPs. Check here for details

+
service.externalTrafficPolicy string
-""
+      
+""
+
 

Service external traffic policy. Check here for details

+
service.healthCheckNodePort string
-""
+      
+""
+
 

Health check node port for a service. Check here for details

+
service.ipFamilies list
-[]
+      
+[]
+
 

List of service IP families. Check here for details.

+
service.ipFamilyPolicy string
-""
+      
+""
+
 

Service IP family policy. Check here for details.

+
service.labels object
-{}
+      
+{}
+
 

Service labels

+
service.loadBalancerIP string
-""
+      
+""
+
 

Service load balacner IP

+
service.loadBalancerSourceRanges list
-[]
+      
+[]
+
 

Load balancer source range

+
service.servicePort int
-8080
+      
+8080
+
 

Service port

+
service.type string
-ClusterIP
+      
+ClusterIP
+
 

Service type

+
service.webhookPort int
-9443
+      
+9443
+
 

Service webhook port

+
serviceAccount.create bool
-true
+      
+true
+
 

Specifies whether a service account should be created

@@ -858,8 +954,9 @@ true
serviceAccount.name string
-""
+      
+""
+
 

The name of the service account to use. If not set and create is true, a name is generated using the fullname template

@@ -868,8 +965,8 @@ true
serviceMonitor object
-annotations: {}
+      
+annotations: {}
 basicAuth: {}
 enabled: false
 extraLabels: {}
@@ -878,16 +975,18 @@ relabelings: []
 scheme: ""
 scrapeTimeout: ""
 tlsConfig: {}
+
 

configures monitoring with serviceScrape. VMServiceScrape must be pre-installed

+

Configures monitoring with serviceScrape. VMServiceScrape must be pre-installed

tolerations list
-[]
+      
+[]
+
 

Array of tolerations object. Spec is here

@@ -896,8 +995,9 @@ tlsConfig: {}
topologySpreadConstraints list
-[]
+      
+[]
+
 

Pod Topology Spread Constraints. Spec is here

@@ -906,8 +1006,9 @@ tlsConfig: {}
watchNamespaces list
-[]
+      
+[]
+
 

By default, the operator will watch all the namespaces If you want to override this behavior, specify the namespace. Operator supports multiple namespaces for watching.

diff --git a/docs/helm/victoria-metrics-single/README.md b/docs/helm/victoria-metrics-single/README.md index d8075d263..ec661c4b2 100644 --- a/docs/helm/victoria-metrics-single/README.md +++ b/docs/helm/victoria-metrics-single/README.md @@ -124,78 +124,79 @@ The following tables lists the configurable parameters of the chart and their de Change the values according to the need of the environment in ``victoria-metrics-single/values.yaml`` file. - +
- - - - + + + + - - - - - - - - - - + + - + - - + - - + - - - - - - - - - + + - - - - - - - - - - + + - + + + + + + + - - + - - + - - - - + - - - - - + - - - + + - - - - - - - - - - - - - - - + - @@ -394,8 +406,9 @@ json - - - + - @@ -422,8 +438,9 @@ json - - - - - - @@ -481,17 +503,20 @@ victoriametrics/victoria-metrics - - + - - - - - - + - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - + - - + - - - + + - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + - - + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - @@ -2016,219 +1504,215 @@ json - - - - - - - - - - + + - + - - - + + - + - - - + + - + - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - + + + + + + - - - - + + + + + + +
KeyTypeDefaultDescriptionKeyTypeDefaultDescription
automountServiceAccountTokenbool
-true
-
-
extraObjects list
-[]
+      
+[]
+
 

Add extra specs dynamically to this chart

global.compatibility.openshift.adaptSecurityContextstring
-auto
+      
global.compatibilityobject
+openshift:
+    adaptSecurityContext: auto
+
 

Openshift security context compatibility configuration

+
global.image.registry string
-""
+      
+""
+
 

Image registry, that can be shared across multiple helm charts

+
global.imagePullSecrets list
-[]
+      
+[]
+
 

Image pull secrets, that can be shared across multiple helm charts

+
license object
-key: ""
+      
+key: ""
 secret:
     key: ""
     name: ""
+
 

Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Documentation - https://docs.victoriametrics.com/enterprise, for more information, visit https://victoriametrics.com/products/enterprise/ . To request a trial license, go to https://victoriametrics.com/products/enterprise/trial/ Supported starting from VictoriaMetrics v1.94.0

+

Enterprise license key configuration for VictoriaMetrics enterprise. Required only for VictoriaMetrics enterprise. Check docs here, for more information, visit site. Request a trial license here Supported starting from VictoriaMetrics v1.94.0

license.key string
-""
+      
+""
+
 

License key

@@ -204,9 +205,10 @@ secret:
license.secret object
-key: ""
+      
+key: ""
 name: ""
+
 

Use existing secret with license key

@@ -215,8 +217,9 @@ name: ""
license.secret.key string
-""
+      
+""
+
 

Key in secret with license key

@@ -225,74 +228,87 @@ name: ""
license.secret.name string
-""
+      
+""
+
 

Existing secret name

podDisruptionBudget.enabledbool
-false
+      
podDisruptionBudgetobject
+enabled: false
+extraLabels: {}
+
 

See kubectl explain poddisruptionbudget.spec for more. Details are here

podDisruptionBudget.extraLabelsobject
-{}
-
-
printNotes bool
-true
+      
+true
+
 

Print chart notes

rbac.createbool
-true
+      
rbac.annotationsobject
+{}
+
 

Role/RoleBinding annotations

+
rbac.createbool
+true
+
+
+

Enables Role/RoleBinding creation

+
rbac.extraLabels object
-{}
+      
+{}
+
 

Role/RoleBinding labels

+
rbac.namespaced bool
-false
+      
+false
+
 

If true and rbac.enabled, will deploy a Role/RoleBinding instead of a ClusterRole/ClusterRoleBinding

+
server.affinity object
-{}
+      
+{}
+
 

Pod affinity

@@ -301,8 +317,9 @@ false
server.containerWorkingDir string
-""
+      
+""
+
 

Container workdir

@@ -311,17 +328,20 @@ false
server.emptyDir object
-{}
+      
+{}
+
 

Use an alternate scheduler, e.g. “stork”. Check here for more details schedulerName:

+
server.enabled bool
-true
+      
+true
+
 

Enable deployment of server component. Deployed as StatefulSet

@@ -330,63 +350,55 @@ true
server.env list
-[]
+      
+[]
+
 

Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

+

Additional environment variables (ex.: secret tokens, flags). Check here for more details

server.envFrom list
-[]
+      
+[]
+
 

Specify alternative source for env variables

+
server.extraArgs."envflag.enable"string
-"true"
+      
server.extraArgsobject
+envflag.enable: "true"
+envflag.prefix: VM_
+loggerFormat: json
+
 
server.extraArgs."envflag.prefix"string
-VM_
-
+

Extra command line arguments for container of component

server.extraArgs.loggerFormatstring
-json
-
-
server.extraContainers list
-[]
+      
+[]
+
 

Extra containers to run in a pod with VM single

+
server.extraHostPathMounts list
-[]
+      
+[]
+
 
server.extraLabels object
-{}
+      
+{}
+
 

Sts/Deploy additional labels

@@ -404,17 +417,20 @@ json
server.extraVolumeMounts list
-[]
+      
+[]
+
 

Extra Volume Mounts for the container

+
server.extraVolumes list
-[]
+      
+[]
+
 
server.fullnameOverride string
-null
+      
+null
+
 

Overrides the full name of server component

@@ -432,8 +449,9 @@ null
server.image.pullPolicy string
-IfNotPresent
+      
+IfNotPresent
+
 

Image pull policy

@@ -442,8 +460,9 @@ IfNotPresent
server.image.registry string
-""
+      
+""
+
 

Image registry

@@ -452,8 +471,9 @@ IfNotPresent
server.image.repository string
-victoriametrics/victoria-metrics
+      
+victoriametrics/victoria-metrics
+
 

Image repository

@@ -462,8 +482,9 @@ victoriametrics/victoria-metrics
server.image.tag string
-""
+      
+""
+
 

Image tag

@@ -472,8 +493,9 @@ victoriametrics/victoria-metrics
server.image.variant string
-""
+      
+""
+
 
server.imagePullSecrets list
-[]
+      
+[]
+
 

Image pull secrets

+
server.ingress.annotations object
-{}
+      
+{}
+
 

Ingress annotations

@@ -500,8 +525,9 @@ victoriametrics/victoria-metrics
server.ingress.enabled bool
-false
+      
+false
+
 

Enable deployment of ingress for server component

@@ -510,8 +536,9 @@ false
server.ingress.extraLabels object
-{}
+      
+{}
+
 

Ingress extra labels

@@ -520,8 +547,9 @@ false
server.ingress.hosts list
-[]
+      
+[]
+
 

Array of host objects

@@ -530,18 +558,19 @@ false
server.ingress.pathType string
-Prefix
+      
+Prefix
+
 

pathType is only for k8s >= 1.1=

-
server.ingress.tls list
-[]
+      
+[]
+
 

Array of TLS objects

@@ -550,17 +579,20 @@ Prefix
server.initContainers list
-[]
+      
+[]
+
 

Init containers for VM single pod

+
server.name string
-server
+      
+server
+
 

Server container name

@@ -569,8 +601,9 @@ server
server.nodeSelector object
-{}
+      
+{}
+
 

Pod’s node selector. Details are here

@@ -579,8 +612,9 @@ server
server.persistentVolume.accessModes list
-- ReadWriteOnce
+      
+- ReadWriteOnce
+
 

Array of access modes. Must match those of existing PV or dynamic provisioner. Details are here

@@ -589,8 +623,9 @@ server
server.persistentVolume.annotations object
-{}
+      
+{}
+
 

Persistant volume annotations

@@ -599,8 +634,9 @@ server
server.persistentVolume.enabled bool
-true
+      
+true
+
 

Create/use Persistent Volume Claim for server component. Empty dir if false

@@ -609,8 +645,9 @@ true
server.persistentVolume.existingClaim string
-""
+      
+""
+
 

Existing Claim name. If defined, PVC must be created manually before volume will be bound

@@ -619,8 +656,9 @@ true
server.persistentVolume.matchLabels object
-{}
+      
+{}
+
 

Bind Persistent Volume by labels. Must match all labels of targeted PV.

@@ -629,8 +667,9 @@ true
server.persistentVolume.mountPath string
-/storage
+      
+/storage
+
 

Mount path. Server data Persistent Volume mount root path.

@@ -639,8 +678,9 @@ true
server.persistentVolume.size string
-16Gi
+      
+16Gi
+
 

Size of the volume. Should be calculated based on the metrics you send and retention policy you set.

@@ -649,8 +689,9 @@ true
server.persistentVolume.storageClassName string
-""
+      
+""
+
 

StorageClass to use for persistent volume. Requires server.persistentVolume.enabled: true. If defined, PVC created automatically

@@ -659,8 +700,9 @@ true
server.persistentVolume.subPath string
-""
+      
+""
+
 

Mount subpath

@@ -669,8 +711,9 @@ true
server.podAnnotations object
-{}
+      
+{}
+
 

Pod’s annotations

@@ -679,8 +722,9 @@ true
server.podLabels object
-{}
+      
+{}
+
 

Pod’s additional labels

@@ -689,8 +733,9 @@ true
server.podManagementPolicy string
-OrderedReady
+      
+OrderedReady
+
 

Pod’s management policy

@@ -699,8 +744,9 @@ OrderedReady
server.podSecurityContext object
-enabled: true
+      
+enabled: true
+
 

Pod’s security context. Details are here

@@ -709,119 +755,86 @@ enabled: true
server.priorityClassName string
-""
+      
+""
+
 

Name of Priority Class

server.probe.liveness.failureThresholdint
-10
-
-
server.probe.liveness.initialDelaySecondsint
-30
-
-
server.probe.liveness.periodSecondsint
-30
-
-
server.probe.liveness.tcpSocketserver.probe object
-{}
+      
+liveness:
+    failureThreshold: 10
+    initialDelaySeconds: 30
+    periodSeconds: 30
+    tcpSocket: {}
+    timeoutSeconds: 5
+readiness:
+    failureThreshold: 3
+    httpGet: {}
+    initialDelaySeconds: 5
+    periodSeconds: 15
+    timeoutSeconds: 5
+startup: {}
+
 
server.probe.liveness.timeoutSecondsint
-5
-
+

Readiness & Liveness probes

server.probe.readiness.failureThresholdint
-3
-
-
server.probe.readiness.httpGetserver.probe.liveness object
-{}
+      
+failureThreshold: 10
+initialDelaySeconds: 30
+periodSeconds: 30
+tcpSocket: {}
+timeoutSeconds: 5
+
 

Indicates whether the Container is running. If the liveness probe fails, the kubelet kills the Container, and the Container is subjected to its restart policy. If a Container does not provide a liveness probe, the default state is Success.

+
server.probe.readiness.initialDelaySecondsint
-5
+      
server.probe.readinessobject
+failureThreshold: 3
+httpGet: {}
+initialDelaySeconds: 5
+periodSeconds: 15
+timeoutSeconds: 5
+
 
server.probe.readiness.periodSecondsint
-15
-
+

Indicates whether the Container is ready to service requests. If the readiness probe fails, the endpoints controller removes the Pod’s IP address from the endpoints of all Services that match the Pod. The default state of readiness before the initial delay is Failure. If a Container does not provide a readiness probe, the default state is Success.

server.probe.readiness.timeoutSecondsint
-5
-
-
server.probe.startup object
-{}
+      
+{}
+
 

Indicates whether the Container is done with potentially costly initialization. If set it is executed first. If it fails Container is restarted. If it succeeds liveness and readiness probes takes over.

+
server.relabel object
-config: []
+      
+config: []
 configMap: ""
 enabled: false
+
 

Global relabel configuration

@@ -830,8 +843,9 @@ enabled: false
server.relabel.configMap string
-""
+      
+""
+
 

Use existing configmap if specified otherwise .config values will be used. Relabel config should reside under relabel.yml key

@@ -840,18 +854,20 @@ enabled: false
server.replicaCount int
-1
+      
+1
+
 

Replica count

+

Number of victoriametrics single replicas

server.resources object
-{}
+      
+{}
+
 

Resource object. Details are here

@@ -860,252 +876,19 @@ enabled: false
server.retentionPeriod int
-1
+      
+1
+
 

Data retention period in month

-
server.scrapeobject
-config:
-    global:
-        scrape_interval: 15s
-    scrape_configs:
-        - job_name: victoriametrics
-          static_configs:
-            - targets:
-                - localhost:8428
-        - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
-          job_name: kubernetes-apiservers
-          kubernetes_sd_configs:
-            - role: endpoints
-          relabel_configs:
-            - action: keep
-              regex: default;kubernetes;https
-              source_labels:
-                - __meta_kubernetes_namespace
-                - __meta_kubernetes_service_name
-                - __meta_kubernetes_endpoint_port_name
-          scheme: https
-          tls_config:
-            ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
-            insecure_skip_verify: true
-        - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
-          job_name: kubernetes-nodes
-          kubernetes_sd_configs:
-            - role: node
-          relabel_configs:
-            - action: labelmap
-              regex: __meta_kubernetes_node_label_(.+)
-            - replacement: kubernetes.default.svc:443
-              target_label: __address__
-            - regex: (.+)
-              replacement: /api/v1/nodes/$1/proxy/metrics
-              source_labels:
-                - __meta_kubernetes_node_name
-              target_label: __metrics_path__
-          scheme: https
-          tls_config:
-            ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
-            insecure_skip_verify: true
-        - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
-          honor_timestamps: false
-          job_name: kubernetes-nodes-cadvisor
-          kubernetes_sd_configs:
-            - role: node
-          relabel_configs:
-            - action: labelmap
-              regex: __meta_kubernetes_node_label_(.+)
-            - replacement: kubernetes.default.svc:443
-              target_label: __address__
-            - regex: (.+)
-              replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor
-              source_labels:
-                - __meta_kubernetes_node_name
-              target_label: __metrics_path__
-          scheme: https
-          tls_config:
-            ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
-            insecure_skip_verify: true
-        - job_name: kubernetes-service-endpoints
-          kubernetes_sd_configs:
-            - role: endpoints
-          relabel_configs:
-            - action: drop
-              regex: true
-              source_labels:
-                - __meta_kubernetes_pod_container_init
-            - action: keep_if_equal
-              source_labels:
-                - __meta_kubernetes_service_annotation_prometheus_io_port
-                - __meta_kubernetes_pod_container_port_number
-            - action: keep
-              regex: true
-              source_labels:
-                - __meta_kubernetes_service_annotation_prometheus_io_scrape
-            - action: replace
-              regex: (https?)
-              source_labels:
-                - __meta_kubernetes_service_annotation_prometheus_io_scheme
-              target_label: __scheme__
-            - action: replace
-              regex: (.+)
-              source_labels:
-                - __meta_kubernetes_service_annotation_prometheus_io_path
-              target_label: __metrics_path__
-            - action: replace
-              regex: ([^:]+)(?::\d+)?;(\d+)
-              replacement: $1:$2
-              source_labels:
-                - __address__
-                - __meta_kubernetes_service_annotation_prometheus_io_port
-              target_label: __address__
-            - action: labelmap
-              regex: __meta_kubernetes_service_label_(.+)
-            - action: replace
-              source_labels:
-                - __meta_kubernetes_namespace
-              target_label: namespace
-            - action: replace
-              source_labels:
-                - __meta_kubernetes_service_name
-              target_label: service
-            - action: replace
-              source_labels:
-                - __meta_kubernetes_pod_node_name
-              target_label: node
-        - job_name: kubernetes-service-endpoints-slow
-          kubernetes_sd_configs:
-            - role: endpoints
-          relabel_configs:
-            - action: drop
-              regex: true
-              source_labels:
-                - __meta_kubernetes_pod_container_init
-            - action: keep_if_equal
-              source_labels:
-                - __meta_kubernetes_service_annotation_prometheus_io_port
-                - __meta_kubernetes_pod_container_port_number
-            - action: keep
-              regex: true
-              source_labels:
-                - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow
-            - action: replace
-              regex: (https?)
-              source_labels:
-                - __meta_kubernetes_service_annotation_prometheus_io_scheme
-              target_label: __scheme__
-            - action: replace
-              regex: (.+)
-              source_labels:
-                - __meta_kubernetes_service_annotation_prometheus_io_path
-              target_label: __metrics_path__
-            - action: replace
-              regex: ([^:]+)(?::\d+)?;(\d+)
-              replacement: $1:$2
-              source_labels:
-                - __address__
-                - __meta_kubernetes_service_annotation_prometheus_io_port
-              target_label: __address__
-            - action: labelmap
-              regex: __meta_kubernetes_service_label_(.+)
-            - action: replace
-              source_labels:
-                - __meta_kubernetes_namespace
-              target_label: namespace
-            - action: replace
-              source_labels:
-                - __meta_kubernetes_service_name
-              target_label: service
-            - action: replace
-              source_labels:
-                - __meta_kubernetes_pod_node_name
-              target_label: node
-          scrape_interval: 5m
-          scrape_timeout: 30s
-        - job_name: kubernetes-services
-          kubernetes_sd_configs:
-            - role: service
-          metrics_path: /probe
-          params:
-            module:
-                - http_2xx
-          relabel_configs:
-            - action: keep
-              regex: true
-              source_labels:
-                - __meta_kubernetes_service_annotation_prometheus_io_probe
-            - source_labels:
-                - __address__
-              target_label: __param_target
-            - replacement: blackbox
-              target_label: __address__
-            - source_labels:
-                - __param_target
-              target_label: instance
-            - action: labelmap
-              regex: __meta_kubernetes_service_label_(.+)
-            - source_labels:
-                - __meta_kubernetes_namespace
-              target_label: namespace
-            - source_labels:
-                - __meta_kubernetes_service_name
-              target_label: service
-        - job_name: kubernetes-pods
-          kubernetes_sd_configs:
-            - role: pod
-          relabel_configs:
-            - action: drop
-              regex: true
-              source_labels:
-                - __meta_kubernetes_pod_container_init
-            - action: keep_if_equal
-              source_labels:
-                - __meta_kubernetes_pod_annotation_prometheus_io_port
-                - __meta_kubernetes_pod_container_port_number
-            - action: keep
-              regex: true
-              source_labels:
-                - __meta_kubernetes_pod_annotation_prometheus_io_scrape
-            - action: replace
-              regex: (.+)
-              source_labels:
-                - __meta_kubernetes_pod_annotation_prometheus_io_path
-              target_label: __metrics_path__
-            - action: replace
-              regex: ([^:]+)(?::\d+)?;(\d+)
-              replacement: $1:$2
-              source_labels:
-                - __address__
-                - __meta_kubernetes_pod_annotation_prometheus_io_port
-              target_label: __address__
-            - action: labelmap
-              regex: __meta_kubernetes_pod_label_(.+)
-            - action: replace
-              source_labels:
-                - __meta_kubernetes_namespace
-              target_label: namespace
-            - action: replace
-              source_labels:
-                - __meta_kubernetes_pod_name
-              target_label: pod
-configMap: ""
-enabled: false
-extraScrapeConfigs: []
-
-

Scrape configuration for victoriametrics

server.scrape.config object
-global:
+      
+global:
     scrape_interval: 15s
 scrape_configs:
     - job_name: victoriametrics
@@ -1326,336 +1109,18 @@ scrape_configs:
           source_labels:
             - __meta_kubernetes_pod_name
           target_label: pod
+
 

Scrape config

-
server.scrape.config.scrape_configslist
-- job_name: victoriametrics
-  static_configs:
-    - targets:
-        - localhost:8428
-- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
-  job_name: kubernetes-apiservers
-  kubernetes_sd_configs:
-    - role: endpoints
-  relabel_configs:
-    - action: keep
-      regex: default;kubernetes;https
-      source_labels:
-        - __meta_kubernetes_namespace
-        - __meta_kubernetes_service_name
-        - __meta_kubernetes_endpoint_port_name
-  scheme: https
-  tls_config:
-    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
-    insecure_skip_verify: true
-- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
-  job_name: kubernetes-nodes
-  kubernetes_sd_configs:
-    - role: node
-  relabel_configs:
-    - action: labelmap
-      regex: __meta_kubernetes_node_label_(.+)
-    - replacement: kubernetes.default.svc:443
-      target_label: __address__
-    - regex: (.+)
-      replacement: /api/v1/nodes/$1/proxy/metrics
-      source_labels:
-        - __meta_kubernetes_node_name
-      target_label: __metrics_path__
-  scheme: https
-  tls_config:
-    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
-    insecure_skip_verify: true
-- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
-  honor_timestamps: false
-  job_name: kubernetes-nodes-cadvisor
-  kubernetes_sd_configs:
-    - role: node
-  relabel_configs:
-    - action: labelmap
-      regex: __meta_kubernetes_node_label_(.+)
-    - replacement: kubernetes.default.svc:443
-      target_label: __address__
-    - regex: (.+)
-      replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor
-      source_labels:
-        - __meta_kubernetes_node_name
-      target_label: __metrics_path__
-  scheme: https
-  tls_config:
-    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
-    insecure_skip_verify: true
-- job_name: kubernetes-service-endpoints
-  kubernetes_sd_configs:
-    - role: endpoints
-  relabel_configs:
-    - action: drop
-      regex: true
-      source_labels:
-        - __meta_kubernetes_pod_container_init
-    - action: keep_if_equal
-      source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_port
-        - __meta_kubernetes_pod_container_port_number
-    - action: keep
-      regex: true
-      source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_scrape
-    - action: replace
-      regex: (https?)
-      source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_scheme
-      target_label: __scheme__
-    - action: replace
-      regex: (.+)
-      source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_path
-      target_label: __metrics_path__
-    - action: replace
-      regex: ([^:]+)(?::\d+)?;(\d+)
-      replacement: $1:$2
-      source_labels:
-        - __address__
-        - __meta_kubernetes_service_annotation_prometheus_io_port
-      target_label: __address__
-    - action: labelmap
-      regex: __meta_kubernetes_service_label_(.+)
-    - action: replace
-      source_labels:
-        - __meta_kubernetes_namespace
-      target_label: namespace
-    - action: replace
-      source_labels:
-        - __meta_kubernetes_service_name
-      target_label: service
-    - action: replace
-      source_labels:
-        - __meta_kubernetes_pod_node_name
-      target_label: node
-- job_name: kubernetes-service-endpoints-slow
-  kubernetes_sd_configs:
-    - role: endpoints
-  relabel_configs:
-    - action: drop
-      regex: true
-      source_labels:
-        - __meta_kubernetes_pod_container_init
-    - action: keep_if_equal
-      source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_port
-        - __meta_kubernetes_pod_container_port_number
-    - action: keep
-      regex: true
-      source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow
-    - action: replace
-      regex: (https?)
-      source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_scheme
-      target_label: __scheme__
-    - action: replace
-      regex: (.+)
-      source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_path
-      target_label: __metrics_path__
-    - action: replace
-      regex: ([^:]+)(?::\d+)?;(\d+)
-      replacement: $1:$2
-      source_labels:
-        - __address__
-        - __meta_kubernetes_service_annotation_prometheus_io_port
-      target_label: __address__
-    - action: labelmap
-      regex: __meta_kubernetes_service_label_(.+)
-    - action: replace
-      source_labels:
-        - __meta_kubernetes_namespace
-      target_label: namespace
-    - action: replace
-      source_labels:
-        - __meta_kubernetes_service_name
-      target_label: service
-    - action: replace
-      source_labels:
-        - __meta_kubernetes_pod_node_name
-      target_label: node
-  scrape_interval: 5m
-  scrape_timeout: 30s
-- job_name: kubernetes-services
-  kubernetes_sd_configs:
-    - role: service
-  metrics_path: /probe
-  params:
-    module:
-        - http_2xx
-  relabel_configs:
-    - action: keep
-      regex: true
-      source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_probe
-    - source_labels:
-        - __address__
-      target_label: __param_target
-    - replacement: blackbox
-      target_label: __address__
-    - source_labels:
-        - __param_target
-      target_label: instance
-    - action: labelmap
-      regex: __meta_kubernetes_service_label_(.+)
-    - source_labels:
-        - __meta_kubernetes_namespace
-      target_label: namespace
-    - source_labels:
-        - __meta_kubernetes_service_name
-      target_label: service
-- job_name: kubernetes-pods
-  kubernetes_sd_configs:
-    - role: pod
-  relabel_configs:
-    - action: drop
-      regex: true
-      source_labels:
-        - __meta_kubernetes_pod_container_init
-    - action: keep_if_equal
-      source_labels:
-        - __meta_kubernetes_pod_annotation_prometheus_io_port
-        - __meta_kubernetes_pod_container_port_number
-    - action: keep
-      regex: true
-      source_labels:
-        - __meta_kubernetes_pod_annotation_prometheus_io_scrape
-    - action: replace
-      regex: (.+)
-      source_labels:
-        - __meta_kubernetes_pod_annotation_prometheus_io_path
-      target_label: __metrics_path__
-    - action: replace
-      regex: ([^:]+)(?::\d+)?;(\d+)
-      replacement: $1:$2
-      source_labels:
-        - __address__
-        - __meta_kubernetes_pod_annotation_prometheus_io_port
-      target_label: __address__
-    - action: labelmap
-      regex: __meta_kubernetes_pod_label_(.+)
-    - action: replace
-      source_labels:
-        - __meta_kubernetes_namespace
-      target_label: namespace
-    - action: replace
-      source_labels:
-        - __meta_kubernetes_pod_name
-      target_label: pod
-
-

Scrape targets

-
server.scrape.config.scrape_configs[4]object
-job_name: kubernetes-service-endpoints
-kubernetes_sd_configs:
-    - role: endpoints
-relabel_configs:
-    - action: drop
-      regex: true
-      source_labels:
-        - __meta_kubernetes_pod_container_init
-    - action: keep_if_equal
-      source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_port
-        - __meta_kubernetes_pod_container_port_number
-    - action: keep
-      regex: true
-      source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_scrape
-    - action: replace
-      regex: (https?)
-      source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_scheme
-      target_label: __scheme__
-    - action: replace
-      regex: (.+)
-      source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_path
-      target_label: __metrics_path__
-    - action: replace
-      regex: ([^:]+)(?::\d+)?;(\d+)
-      replacement: $1:$2
-      source_labels:
-        - __address__
-        - __meta_kubernetes_service_annotation_prometheus_io_port
-      target_label: __address__
-    - action: labelmap
-      regex: __meta_kubernetes_service_label_(.+)
-    - action: replace
-      source_labels:
-        - __meta_kubernetes_namespace
-      target_label: namespace
-    - action: replace
-      source_labels:
-        - __meta_kubernetes_service_name
-      target_label: service
-    - action: replace
-      source_labels:
-        - __meta_kubernetes_pod_node_name
-      target_label: node
-
-

Scrape rule using kubernetes service discovery for endpoints

-
server.scrape.config.scrape_configs[6]object
-job_name: kubernetes-services
-kubernetes_sd_configs:
-    - role: service
-metrics_path: /probe
-params:
-    module:
-        - http_2xx
-relabel_configs:
-    - action: keep
-      regex: true
-      source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_probe
-    - source_labels:
-        - __address__
-      target_label: __param_target
-    - replacement: blackbox
-      target_label: __address__
-    - source_labels:
-        - __param_target
-      target_label: instance
-    - action: labelmap
-      regex: __meta_kubernetes_service_label_(.+)
-    - source_labels:
-        - __meta_kubernetes_namespace
-      target_label: namespace
-    - source_labels:
-        - __meta_kubernetes_service_name
-      target_label: service
-
-

Example scrape config for probing services via the Blackbox Exporter. The relabeling allows the actual service scrape endpoint to be configured via the following annotations: * prometheus.io/probe: Only probe services that have a value of true

server.scrape.configMap string
-""
+      
+""
+
 

Use existing configmap if specified otherwise .config values will be used. Scrape config should reside under scrape.yml key

@@ -1664,8 +1129,9 @@ relabel_configs:
server.scrape.enabled bool
-false
+      
+false
+
 

If true scrapes targets, creates config map or use specified one with scrape targets

@@ -1674,8 +1140,9 @@ false
server.scrape.extraScrapeConfigs list
-[]
+      
+[]
+
 

Extra scrape configs that will be appended to server.scrape.config

@@ -1684,8 +1151,9 @@ false
server.securityContext object
-enabled: true
+      
+enabled: true
+
 

Security context to be added to server pods

@@ -1694,8 +1162,9 @@ enabled: true
server.service.annotations object
-{}
+      
+{}
+
 

Service annotations

@@ -1704,8 +1173,9 @@ enabled: true
server.service.clusterIP string
-""
+      
+""
+
 

Service ClusterIP

@@ -1714,54 +1184,64 @@ enabled: true
server.service.externalIPs list
-[]
+      
+[]
+
 

Service External IPs. Details are here

+

Service external IPs. Details are here

server.service.externalTrafficPolicy string
-""
+      
+""
+
 

Service external traffic policy. Check here for details

+
server.service.healthCheckNodePort string
-""
+      
+""
+
 

Health check node port for a service. Check here for details

+
server.service.ipFamilies list
-[]
+      
+[]
+
 

List of service IP families. Check here for details.

+
server.service.ipFamilyPolicy string
-""
+      
+""
+
 

Service IP family policy. Check here for details.

+
server.service.labels object
-{}
+      
+{}
+
 

Service labels

@@ -1770,8 +1250,9 @@ enabled: true
server.service.loadBalancerIP string
-""
+      
+""
+
 

Service load balacner IP

@@ -1780,8 +1261,9 @@ enabled: true
server.service.loadBalancerSourceRanges list
-[]
+      
+[]
+
 

Load balancer source range

@@ -1790,8 +1272,9 @@ enabled: true
server.service.servicePort int
-8428
+      
+8428
+
 

Service port

@@ -1800,8 +1283,9 @@ enabled: true
server.service.type string
-ClusterIP
+      
+ClusterIP
+
 

Service type

@@ -1810,8 +1294,9 @@ ClusterIP
server.serviceMonitor.annotations object
-{}
+      
+{}
+
 

Service Monitor annotations

@@ -1820,8 +1305,9 @@ ClusterIP
server.serviceMonitor.basicAuth object
-{}
+      
+{}
+
 

Basic auth params for Service Monitor

@@ -1830,8 +1316,9 @@ ClusterIP
server.serviceMonitor.enabled bool
-false
+      
+false
+
 

Enable deployment of Service Monitor for server component. This is Prometheus operator object

@@ -1840,8 +1327,9 @@ false
server.serviceMonitor.extraLabels object
-{}
+      
+{}
+
 

Service Monitor labels

@@ -1850,8 +1338,9 @@ false
server.serviceMonitor.metricRelabelings list
-[]
+      
+[]
+
 

Service Monitor metricRelabelings

@@ -1860,8 +1349,9 @@ false
server.serviceMonitor.relabelings list
-[]
+      
+[]
+
 

Service Monitor relabelings

@@ -1870,8 +1360,9 @@ false
server.statefulSet.enabled bool
-true
+      
+true
+
 

Creates statefulset instead of deployment, useful when you want to keep the cache

@@ -1880,8 +1371,9 @@ true
server.statefulSet.podManagementPolicy string
-OrderedReady
+      
+OrderedReady
+
 

Deploy order policy for StatefulSet pods

@@ -1890,8 +1382,9 @@ OrderedReady
server.terminationGracePeriodSeconds int
-60
+      
+60
+
 

Pod’s termination grace period in seconds

@@ -1900,8 +1393,9 @@ OrderedReady
server.tolerations list
-[]
+      
+[]
+
 

Node tolerations for server scheduling to nodes with taints. Details are here

@@ -1910,105 +1404,99 @@ OrderedReady
server.vmbackupmanager.destination string
-""
+      
+""
+
 

backup destination at S3, GCS or local filesystem. Release name will be included to path!

+

Backup destination at S3, GCS or local filesystem. Release name will be included to path!

server.vmbackupmanager.disableDaily bool
-false
+      
+false
+
 

disable daily backups

+

Disable daily backups

server.vmbackupmanager.disableHourly bool
-false
+      
+false
+
 

disable hourly backups

+

Disable hourly backups

server.vmbackupmanager.disableMonthly bool
-false
+      
+false
+
 

disable monthly backups

+

Disable monthly backups

server.vmbackupmanager.disableWeekly bool
-false
+      
+false
+
 

disable weekly backups

+

Disable weekly backups

server.vmbackupmanager.enabled bool
-false
+      
+false
+
 

enable automatic creation of backup via vmbackupmanager. vmbackupmanager is part of Enterprise packages

+

Enable automatic creation of backup via vmbackupmanager. vmbackupmanager is part of Enterprise packages

server.vmbackupmanager.env list
-[]
+      
+[]
+
 

Additional environment variables (ex.: secret tokens, flags) https://docs.victoriametrics.com/#environment-variables

+

Additional environment variables (ex.: secret tokens, flags). Check here

server.vmbackupmanager.extraArgs."envflag.enable"string
-"true"
+      
server.vmbackupmanager.extraArgsobject
+envflag.enable: "true"
+envflag.prefix: VM_
+loggerFormat: json
+
 
server.vmbackupmanager.extraArgs."envflag.prefix"string
-VM_
-
+

Extra command line arguments for container of component

server.vmbackupmanager.extraArgs.loggerFormatstring
-json
-
-
server.vmbackupmanager.extraVolumeMounts list
-[]
+      
+[]
+
 
server.vmbackupmanager.image.registry string
-""
+      
+""
+
 

vmbackupmanager image registry

+

VMBackupManager image registry

server.vmbackupmanager.image.repository string
-victoriametrics/vmbackupmanager
+      
+victoriametrics/vmbackupmanager
+
 

vmbackupmanager image repository

+

VMBackupManager image repository

server.vmbackupmanager.image.tag string
-""
+      
+""
+
 

vmbackupmanager image tag

+

VMBackupManager image tag

server.vmbackupmanager.image.variant string
-""
+      
+""
+
 
server.vmbackupmanager.probe.liveness.failureThresholdint
-10
+      
server.vmbackupmanager.probeobject
+liveness:
+    failureThreshold: 10
+    initialDelaySeconds: 30
+    periodSeconds: 30
+    tcpSocket:
+        port: manager-http
+    timeoutSeconds: 5
+readiness:
+    failureThreshold: 3
+    httpGet:
+        port: manager-http
+    initialDelaySeconds: 5
+    periodSeconds: 15
+    timeoutSeconds: 5
+startup:
+    httpGet:
+        port: manager-http
+
 

Readiness & Liveness probes

+
server.vmbackupmanager.probe.liveness.initialDelaySecondsint
-30
+      
server.vmbackupmanager.probe.livenessobject
+failureThreshold: 10
+initialDelaySeconds: 30
+periodSeconds: 30
+tcpSocket:
+    port: manager-http
+timeoutSeconds: 5
+
 

VMBackupManager liveness probe

+
server.vmbackupmanager.probe.liveness.periodSecondsint
-30
+      
server.vmbackupmanager.probe.readinessobject
+failureThreshold: 3
+httpGet:
+    port: manager-http
+initialDelaySeconds: 5
+periodSeconds: 15
+timeoutSeconds: 5
+
 

VMBackupManager readiness probe

+
server.vmbackupmanager.probe.liveness.tcpSocket.portstring
-manager-http
+      
server.vmbackupmanager.probe.startupobject
+httpGet:
+    port: manager-http
+
 
server.vmbackupmanager.probe.liveness.timeoutSecondsint
-5
-
+

VMBackupManager startup probe

server.vmbackupmanager.probe.readiness.failureThresholdint
-3
-
-
server.vmbackupmanager.probe.readiness.httpGet.portstring
-manager-http
-
-
server.vmbackupmanager.probe.readiness.initialDelaySecondsint
-5
-
-
server.vmbackupmanager.probe.readiness.periodSecondsint
-15
-
-
server.vmbackupmanager.probe.readiness.timeoutSecondsint
-5
-
-
server.vmbackupmanager.probe.startup.httpGet.portstring
-manager-http
-
-
server.vmbackupmanager.resources object
-{}
+      
+{}
+
 

Resource object. Details are here

+
server.vmbackupmanager.restore object
-onStart:
+      
+onStart:
     enabled: false
+
 

Allows to enable restore options for pod. Read more: https://docs.victoriametrics.com/vmbackupmanager#restore-commands

+

Allows to enable restore options for pod. Read more here

server.vmbackupmanager.retention object
-keepLastDaily: 2
+      
+keepLastDaily: 2
 keepLastHourly: 2
 keepLastMonthly: 2
 keepLastWeekly: 2
+
 

backups’ retention settings

+

Backups’ retention settings

server.vmbackupmanager.retention.keepLastDaily int
-2
+      
+2
+
 

keep last N daily backups. 0 means delete all existing daily backups. Specify -1 to turn off

+

Keep last N daily backups. 0 means delete all existing daily backups. Specify -1 to turn off

server.vmbackupmanager.retention.keepLastHourly int
-2
+      
+2
+
 

keep last N hourly backups. 0 means delete all existing hourly backups. Specify -1 to turn off

+

Keep last N hourly backups. 0 means delete all existing hourly backups. Specify -1 to turn off

server.vmbackupmanager.retention.keepLastMonthly int
-2
+      
+2
+
 

keep last N monthly backups. 0 means delete all existing monthly backups. Specify -1 to turn off

+

Keep last N monthly backups. 0 means delete all existing monthly backups. Specify -1 to turn off

server.vmbackupmanager.retention.keepLastWeekly int
-2
+      
+2
+
 

keep last N weekly backups. 0 means delete all existing weekly backups. Specify -1 to turn off

+

Keep last N weekly backups. 0 means delete all existing weekly backups. Specify -1 to turn off

+
serviceAccount.annotationsobject
+{}
+
+
+

ServiceAccount annotations

serviceAccount.automountToken bool
-true
+      
+true
+
 

Mount API token to pod directly

@@ -2237,8 +1721,9 @@ true
serviceAccount.create bool
-true
+      
+true
+
 

Create service account.

@@ -2247,11 +1732,24 @@ true
serviceAccount.extraLabels object
-{}
+      
+{}
+
 

ServiceAccount labels

+
serviceAccount.namestring
+null
+
+
+

The name of the service account to use. If not set and create is true, a name is generated using the fullname template

+