feat(monitoring): upgrade victoria-metrics-operator to v0.68.4

Bumps the vendored victoria-metrics-operator chart from 0.59.1 to 0.61.0
(operator appVersion v0.68.1 to v0.68.4) via `make update`.

Picks up upstream bugfixes in the v0.68.x line: correct VMPodScrape port
for VMAgent/VLAgent, StatefulSet pod deletion when maxUnavailable=100%,
VMDistributed PVC ownership fix, finalizer cleanup, ingest-only mode not
mounting scrape config secrets, STS recreation on immutable field changes,
and PVC resize completion wait.

Chart 0.60.0 is skipped because it introduced a matchLabels change
requiring Deployment recreation that was reverted in 0.61.0.

Local patch disable-ca-key-rotation.patch reapplies cleanly.

Assisted-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
This commit is contained in:
Aleksei Sviridkin 2026-04-20 15:48:53 +03:00
parent 171c793cc5
commit 83ae237000
No known key found for this signature in database
GPG key ID: 7988329FDF395282
18 changed files with 121 additions and 52 deletions

View file

@ -1,9 +1,9 @@
dependencies:
- name: victoria-metrics-common
repository: https://victoriametrics.github.io/helm-charts
version: 0.0.46
repository: oci://ghcr.io/victoriametrics/helm-charts
version: 0.3.0
- name: crds
repository: ""
version: 0.0.*
digest: sha256:43d3d210a9d1a2234e6c56518f8c477125a5ad5e8ed08d46209528f19acd9c89
generated: "2025-12-23T12:58:01.428960334Z"
digest: sha256:adec954bf2814f744f5b69fcf67c8b246bf21f416adb0ab37d91c9b42f72d353
generated: "2026-04-16T10:14:10.795552631Z"

View file

@ -1,7 +1,7 @@
annotations:
artifacthub.io/category: monitoring-logging
artifacthub.io/changes: |
- updates operator to [v0.68.1](https://github.com/VictoriaMetrics/operator/releases/tag/v0.68.1) version
- revert change in Deployment's matchLabels, that was introduced in release 0.60.0
artifacthub.io/license: Apache-2.0
artifacthub.io/links: |
- name: Sources
@ -16,13 +16,14 @@ annotations:
artifacthub.io/readme: |
# VictoriaMetrics Operator Helm chart
Chart documentation is available [here](https://docs.victoriametrics.com/helm/victoria-metrics-operator/)
Chart documentation is available [here](https://docs.victoriametrics.com/helm/victoria-metrics-operator/).
Changelog is [here](https://docs.victoriametrics.com/helm/victoria-metrics-operator/changelog/).
apiVersion: v2
appVersion: v0.68.1
appVersion: v0.68.4
dependencies:
- name: victoria-metrics-common
repository: https://victoriametrics.github.io/helm-charts
version: 0.0.*
repository: oci://ghcr.io/victoriametrics/helm-charts
version: 0.3.*
- condition: crds.plain
name: crds
repository: ""
@ -46,4 +47,4 @@ sources:
- https://github.com/VictoriaMetrics/helm-charts
- https://github.com/VictoriaMetrics/operator
type: application
version: 0.59.1
version: 0.61.0

View file

@ -1,3 +1,4 @@
# VictoriaMetrics Operator Helm chart
Chart documentation is available [here](https://docs.victoriametrics.com/helm/victoria-metrics-operator/)
Chart documentation is available [here](https://docs.victoriametrics.com/helm/victoria-metrics-operator/).
Changelog is [here](https://docs.victoriametrics.com/helm/victoria-metrics-operator/changelog/).

View file

@ -1,7 +1,7 @@
# Release notes for version 0.59.1
# Release notes for version 0.61.0
**Release date:** 03 Mar 2026
**Release date:** 16 Apr 2026
![Helm: v3](https://img.shields.io/badge/Helm-v3.14%2B-informational?color=informational&logo=helm&link=https%3A%2F%2Fgithub.com%2Fhelm%2Fhelm%2Freleases%2Ftag%2Fv3.14.0) ![AppVersion: v0.68.1](https://img.shields.io/badge/v0.68.1-success?logo=VictoriaMetrics&labelColor=gray&link=https%3A%2F%2Fdocs.victoriametrics.com%2Foperator%2Fchangelog%2F%23v0681)
![Helm: v3](https://img.shields.io/badge/Helm-v3.14%2B-informational?color=informational&logo=helm&link=https%3A%2F%2Fgithub.com%2Fhelm%2Fhelm%2Freleases%2Ftag%2Fv3.14.0) ![AppVersion: v0.68.4](https://img.shields.io/badge/v0.68.4-success?logo=VictoriaMetrics&labelColor=gray&link=https%3A%2F%2Fdocs.victoriametrics.com%2Foperator%2Fchangelog%2F%23v0684)
- updates operator to [v0.68.1](https://github.com/VictoriaMetrics/operator/releases/tag/v0.68.1) version
- revert change in Deployment's matchLabels, that was introduced in release 0.60.0

View file

@ -6079,6 +6079,7 @@ spec:
- spec
type: object
shardCount:
format: int32
type: integer
startupProbe:
type: object
@ -6087,6 +6088,14 @@ spec:
type: boolean
statefulRollingUpdateStrategy:
type: string
statefulRollingUpdateStrategyBehavior:
properties:
maxUnavailable:
anyOf:
- type: integer
- type: string
x-kubernetes-int-or-string: true
type: object
statefulStorage:
properties:
emptyDir:
@ -12326,6 +12335,7 @@ spec:
type: object
x-kubernetes-preserve-unknown-fields: true
shardCount:
format: int32
type: integer
startupProbe:
type: object
@ -16808,6 +16818,9 @@ spec:
type: boolean
vmauth:
properties:
enabled:
default: true
type: boolean
name:
type: string
spec:
@ -24727,6 +24740,14 @@ spec:
type: boolean
statefulRollingUpdateStrategy:
type: string
statefulRollingUpdateStrategyBehavior:
properties:
maxUnavailable:
anyOf:
- type: integer
- type: string
x-kubernetes-int-or-string: true
type: object
statefulStorage:
properties:
emptyDir:
@ -28628,6 +28649,14 @@ spec:
type: boolean
statefulRollingUpdateStrategy:
type: string
statefulRollingUpdateStrategyBehavior:
properties:
maxUnavailable:
anyOf:
- type: integer
- type: string
x-kubernetes-int-or-string: true
type: object
statefulStorage:
properties:
emptyDir:

View file

@ -1,7 +1,7 @@
annotations:
artifacthub.io/category: monitoring-logging
artifacthub.io/changes: |
- allow setting global labels for each resource using `.Values.global.extraLabels`. See [#2607](https://github.com/VictoriaMetrics/helm-charts/issues/2607).
- reverted usage of `app` label in `vm.selectorLabels`
artifacthub.io/license: Apache-2.0
artifacthub.io/links: |
- name: Sources
@ -11,7 +11,8 @@ annotations:
artifacthub.io/readme: |
# VictoriaMetrics Common Helm chart
Chart documentation is available [here](https://docs.victoriametrics.com/helm/victoria-metrics-common/)
Chart documentation is available [here](https://docs.victoriametrics.com/helm/victoria-metrics-common/).
Changelog is [here](https://docs.victoriametrics.com/helm/victoria-metrics-common/changelog/).
apiVersion: v2
description: VictoriaMetrics Common - contains shared templates for all Victoria Metrics
helm charts
@ -29,4 +30,4 @@ name: victoria-metrics-common
sources:
- https://github.com/VictoriaMetrics/helm-charts
type: library
version: 0.0.46
version: 0.3.0

View file

@ -1,3 +1,4 @@
# VictoriaMetrics Common Helm chart
Chart documentation is available [here](https://docs.victoriametrics.com/helm/victoria-metrics-common/)
Chart documentation is available [here](https://docs.victoriametrics.com/helm/victoria-metrics-common/).
Changelog is [here](https://docs.victoriametrics.com/helm/victoria-metrics-common/changelog/).

View file

@ -1,7 +1,7 @@
# Release notes for version 0.0.46
# Release notes for version 0.3.0
**Release date:** 23 Dec 2025
**Release date:** 16 Apr 2026
![Helm: v3](https://img.shields.io/badge/Helm-v3.14%2B-informational?color=informational&logo=helm&link=https%3A%2F%2Fgithub.com%2Fhelm%2Fhelm%2Freleases%2Ftag%2Fv3.14.0)
- allow setting global labels for each resource using `.Values.global.extraLabels`. See [#2607](https://github.com/VictoriaMetrics/helm-charts/issues/2607).
- reverted usage of `app` label in `vm.selectorLabels`

View file

@ -125,8 +125,8 @@ If release name contains chart name it will be used as a full name.
{{- $ctx := . -}}
{{- $values := $Values -}}
{{- range $ak := $appKey }}
{{- $values = ternary (default dict) (index $values $ak | default dict) (empty $values) -}}
{{- $ctx = ternary (default dict) (index $ctx $ak | default dict) (empty $ctx) -}}
{{- $values = ternary (dict) (index $values $ak | default dict) (empty $values) -}}
{{- $ctx = ternary (dict) (index $ctx $ak | default dict) (empty $ctx) -}}
{{- if and (empty $values) (empty $ctx) -}}
{{- fail (printf "No data for appKey %s" (join "->" $appKey)) -}}
{{- end -}}
@ -187,6 +187,9 @@ If release name contains chart name it will be used as a full name.
{{- include "vm.validate.args" . -}}
{{- $Release := (.helm).Release | default .Release -}}
{{- $labels := fromYaml (include "vm.selectorLabels" .) -}}
{{- with $labels.app -}}
{{- $_ := set $labels "app.kubernetes.io/component" . -}}
{{- end -}}
{{- $labels = mergeOverwrite $labels (.extraLabels | default dict) -}}
{{- $_ := set $labels "app.kubernetes.io/managed-by" $Release.Service -}}
{{- toYaml $labels -}}
@ -197,7 +200,7 @@ If release name contains chart name it will be used as a full name.
{{- include "vm.validate.args" . -}}
{{- $Values := (.helm).Values | default .Values -}}
{{- $globalLabels := deepCopy (($Values.global).extraLabels | default dict) -}}
{{- $labels := fromYaml (include "vm.selectorLabels" .) -}}
{{- $labels := fromYaml (include "vm.commonLabels" .) -}}
{{- $labels = mergeOverwrite $globalLabels $labels (fromYaml (include "vm.metaLabels" .)) -}}
{{- with (include "vm.image.tag" .) }}
{{- $_ := set $labels "app.kubernetes.io/version" (regexReplaceAll "(.*)(@sha.*)" . "${1}") -}}
@ -231,11 +234,16 @@ If release name contains chart name it will be used as a full name.
{{- $_ := set $labels "app.kubernetes.io/name" (include "vm.name" .) -}}
{{- $_ := set $labels "app.kubernetes.io/instance" (include "vm.release" .) -}}
{{- with (include "vm.app.name" .) -}}
{{- if eq $.style "managed" -}}
{{- $_ := set $labels "app.kubernetes.io/component" (printf "%s-%s" (include "vm.name" $) .) -}}
{{- else -}}
{{- $_ := set $labels "app" . -}}
{{- end -}}
{{- $_ := set $labels "app" . -}}
{{- end -}}
{{- toYaml $labels -}}
{{- end }}
{{- define "vm.commonLabels" -}}
{{- $labels := fromYaml (include "vm.selectorLabels" . ) -}}
{{- with $labels.app -}}
{{- $_ := set $labels "app.kubernetes.io/component" . -}}
{{- $_ := unset $labels "app" -}}
{{- end -}}
{{- toYaml $labels -}}
{{- end -}}

View file

@ -42,8 +42,8 @@ Victoria Metrics Image
{{- with .appKey -}}
{{- $appKey := ternary (list .) . (kindIs "string" .) -}}
{{- range $ak := $appKey -}}
{{- $values = ternary (default dict) (index $values $ak | default dict) (empty $values) -}}
{{- $ctx = ternary (default dict) (index $ctx $ak | default dict) (empty $ctx) -}}
{{- $values = ternary (dict) (index $values $ak | default dict) (empty $values) -}}
{{- $ctx = ternary (dict) (index $ctx $ak | default dict) (empty $ctx) -}}
{{- if and (empty $values) (empty $ctx) -}}
{{- fail (printf "No data for appKey %s" (join "->" $appKey)) -}}
{{- end -}}

View file

@ -39,9 +39,9 @@ Render probe
{{- define "vm.probe" -}}
{{- /* undefined value */ -}}
{{- $null := (fromYaml "value: null").value -}}
{{- $probe := dig .type (default dict) .app.probe -}}
{{- $probe := dig .type (dict) .app.probe -}}
{{- $probeType := "" -}}
{{- $defaultProbe := default dict -}}
{{- $defaultProbe := dict -}}
{{- if ne (dig "httpGet" $null $probe) $null -}}
{{- /* httpGet probe */ -}}
{{- $defaultProbe = dict "path" (include "vm.probe.http.path" .) "scheme" (include "vm.probe.http.scheme" .) "port" (include "vm.probe.port" .) -}}
@ -51,7 +51,7 @@ Render probe
{{- $defaultProbe = dict "port" (include "vm.probe.port" .) -}}
{{- $probeType = "tcpSocket" -}}
{{- end -}}
{{- $defaultProbe = ternary (default dict) (dict $probeType $defaultProbe) (empty $probeType) -}}
{{- $defaultProbe = ternary (dict) (dict $probeType $defaultProbe) (empty $probeType) -}}
{{- $probe = mergeOverwrite $defaultProbe $probe -}}
{{- range $key, $value := $probe -}}
{{- if and (has (kindOf $value) (list "object" "map")) (ne $key $probeType) -}}
@ -100,7 +100,7 @@ Net probe port
command line arguments
*/ -}}
{{- define "vm.args" -}}
{{- $args := default list -}}
{{- $args := list -}}
{{- range $key, $value := . -}}
{{- if not $key -}}
{{- fail "Empty key in command line args is not allowed" -}}

View file

@ -37,10 +37,10 @@
{{- $values := $Values -}}
{{- $ctx := . -}}
{{- range $ak := $appKey -}}
{{- $values = ternary (default dict) (index $values $ak | default dict) (empty $values) -}}
{{- $ctx = ternary (default dict) (index $ctx $ak | default dict) (empty $ctx) -}}
{{- $values = ternary (dict) (index $values $ak | default dict) (empty $values) -}}
{{- $ctx = ternary (dict) (index $ctx $ak | default dict) (empty $ctx) -}}
{{- end -}}
{{- $spec := default dict -}}
{{- $spec := dict -}}
{{- if $ctx -}}
{{- $spec = $ctx -}}
{{- else if $values -}}
@ -69,10 +69,10 @@
{{- $values := $Values -}}
{{- $ctx := . -}}
{{- range $ak := $appKey -}}
{{- $values = ternary (default dict) (index $values $ak | default dict) (empty $values) -}}
{{- $ctx = ternary (default dict) (index $ctx $ak | default dict) (empty $ctx) -}}
{{- $values = ternary (dict) (index $values $ak | default dict) (empty $values) -}}
{{- $ctx = ternary (dict) (index $ctx $ak | default dict) (empty $ctx) -}}
{{- end -}}
{{- $spec := default dict -}}
{{- $spec := dict -}}
{{- if $values -}}
{{- $spec = $values -}}
{{- else if $ctx -}}

View file

@ -1,5 +1,5 @@
{{ include "vm.name" . }} has been installed. Check its status by running:
kubectl --namespace {{ include "vm.namespace" . }} get pods -l "app.kubernetes.io/instance={{ $.Release.Name }}"
kubectl --namespace {{ include "vm.namespace" . }} get pods -l "app.kubernetes.io/name={{ include "vm.name" . }}" -l "app.kubernetes.io/instance={{ include "vm.release" . }}"
Get more information on https://github.com/VictoriaMetrics/helm-charts/tree/master/charts/victoria-metrics-operator.
See "Getting started guide for VM Operator" on https://docs.victoriametrics.com/guides/getting-started-with-vm-operator

View file

@ -18,6 +18,9 @@ spec:
{{- with $pdb.maxUnavailable }}
maxUnavailable: {{ . }}
{{- end }}
{{- with $pdb.unhealthyPodEvictionPolicy }}
unhealthyPodEvictionPolicy: {{ . }}
{{- end }}
selector:
matchLabels: {{ include "vm.selectorLabels" $ctx | nindent 6 }}
{{- end }}

View file

@ -18,9 +18,12 @@ metadata:
annotations: {{ toYaml . | nindent 4 }}
{{- end }}
spec:
replicas: {{.Values.replicaCount }}
replicas: {{ .Values.replicaCount }}
selector:
matchLabels: {{ include "vm.selectorLabels" $ctx | nindent 6 }}
{{- with .Values.strategy }}
strategy: {{ toYaml . | nindent 4 }}
{{- end }}
template:
metadata:
{{- with .Values.annotations }}

View file

@ -1,22 +1,31 @@
{{- if .Values.admissionWebhooks.enabled }}
{{- $webhooks := .Values.admissionWebhooks }}
{{- if $webhooks.enabled }}
{{- $ctx := dict "helm" . "extraLabels" .Values.extraLabels }}
{{- $tls := fromYaml (include "vm-operator.certs" $ctx) }}
{{- $fullname := include "vm.plain.fullname" $ctx }}
{{- $domain := ((.Values.global).cluster).dnsDomain }}
{{- $ns := include "vm.namespace" $ctx }}
{{- $certManager := .Values.admissionWebhooks.certManager }}
{{- $certManager := $webhooks.certManager }}
{{- $files := .Files }}
{{- $crds := $files.Get "crd.yaml" | splitList "---" }}
{{- $disabledFor := .Values.admissionWebhooks.disabledFor | default list }}
{{- $disabledFor := $webhooks.disabledFor | default list }}
---
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
name: {{ $fullname }}-admission
{{- if $certManager.enabled }}
{{- if or $certManager.enabled $webhooks.annotations }}
annotations:
{{- if $certManager.enabled }}
certmanager.k8s.io/inject-ca-from: {{ printf "%s/%s-validation" $ns $fullname | quote }}
cert-manager.io/inject-ca-from: {{ printf "%s/%s-validation" $ns $fullname | quote }}
{{- end }}
{{- with $certManager.annotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with $webhooks.annotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- end }}
labels: {{ include "vm.labels" $ctx | nindent 4 }}
webhooks:
@ -34,7 +43,7 @@ webhooks:
{{- if not $certManager.enabled }}
caBundle: {{ $tls.caCert }}
{{- end }}
failurePolicy: {{ $.Values.admissionWebhooks.policy }}
failurePolicy: {{ $webhooks.policy }}
name: '{{ $crd.metadata.name }}'
admissionReviewVersions:
- v1

View file

@ -125,7 +125,7 @@ crds:
# whenUnsatisfiable: DoNotSchedule
# labelSelector:
# matchLabels:
# app: alertmanager
# app.kubernetes.io/component: alertmanager
# -- Labels to add to the upgrade job
labels: {}
@ -276,8 +276,12 @@ service:
# -- See `kubectl explain poddisruptionbudget.spec` for more or check [these docs](https://kubernetes.io/docs/tasks/run-application/configure-pdb/)
podDisruptionBudget:
enabled: false
# minAvailable: 1
# maxUnavailable: 1
# -- min number or percentage of pods that can be unavailable
minAvailable: 0
# -- max number or percentage of pods that can be unavailable
maxUnavailable: 0
# -- Defines criteria when unhealthy pods should be considered for eviction
unhealthyPodEvictionPolicy:
labels: {}
# -- Graceful pod termination timeout. See [this article](https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#hook-handler-execution) for details.
@ -299,6 +303,13 @@ resources:
# -- Pod's node selector. Details are [here](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector)
nodeSelector: {}
# -- Deployment strategy, set to standard k8s default
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
# -- Name of Priority Class
priorityClassName: ""
@ -364,6 +375,8 @@ shareProcessNamespace: false
admissionWebhooks:
# -- Enables validation webhook.
enabled: true
# -- Annotations for webhook. Can be used to define Helm or ArgoCD annotations.
annotations: {}
# -- List of CRD names to disable validation for
disabledFor: []
# - vmagent