From 83ae237000149462829a4841bea2dd52929b5cda Mon Sep 17 00:00:00 2001 From: Aleksei Sviridkin Date: Mon, 20 Apr 2026 15:48:53 +0300 Subject: [PATCH] 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 Signed-off-by: Aleksei Sviridkin --- .../victoria-metrics-operator/Chart.lock | 8 ++--- .../victoria-metrics-operator/Chart.yaml | 13 ++++---- .../victoria-metrics-operator/README.md | 3 +- .../victoria-metrics-operator/RELEASE_NOTES | 8 ++--- .../charts/crds/crds/crd.yaml | 29 ++++++++++++++++++ .../charts/crds/files/crd.yaml.bz2 | Bin 27612 -> 27506 bytes .../charts/victoria-metrics-common/Chart.yaml | 7 +++-- .../charts/victoria-metrics-common/README.md | 3 +- .../victoria-metrics-common/RELEASE_NOTES | 6 ++-- .../templates/_helpers.tpl | 24 ++++++++++----- .../templates/_image.tpl | 4 +-- .../templates/_pod.tpl | 8 ++--- .../templates/_service.tpl | 12 ++++---- .../templates/NOTES.txt | 2 +- .../templates/pdb.yaml | 3 ++ .../templates/server.yaml | 5 ++- .../templates/webhook.yaml | 19 +++++++++--- .../victoria-metrics-operator/values.yaml | 19 ++++++++++-- 18 files changed, 121 insertions(+), 52 deletions(-) diff --git a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/Chart.lock b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/Chart.lock index 1b0e2a46..2868e66f 100644 --- a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/Chart.lock +++ b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/Chart.lock @@ -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" diff --git a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/Chart.yaml b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/Chart.yaml index bb9253b1..030af8f0 100644 --- a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/Chart.yaml +++ b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/Chart.yaml @@ -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 diff --git a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/README.md b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/README.md index 49a06de2..6a080424 100644 --- a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/README.md +++ b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/README.md @@ -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/). diff --git a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/RELEASE_NOTES b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/RELEASE_NOTES index bf22fd3f..3529783a 100644 --- a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/RELEASE_NOTES +++ b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/RELEASE_NOTES @@ -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 diff --git a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/crds/crds/crd.yaml b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/crds/crds/crd.yaml index c4138be8..bdf7e8d0 100644 --- a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/crds/crds/crd.yaml +++ b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/crds/crds/crd.yaml @@ -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: diff --git a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/crds/files/crd.yaml.bz2 b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/crds/files/crd.yaml.bz2 index 7f518a91e11a4af367dd2ff450bc953ddc650964..ab7c4d95d1fa275eed967afd607309920c09a05d 100644 GIT binary patch literal 27506 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 Nxgwk>NCr`;(g31i;nDyA literal 27612 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

~qO%jmQ13@sgLIo*HN+b+~goRaq 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 Pzy2=dig2MIz~qsxrm1(z diff --git a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/Chart.yaml b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/Chart.yaml index 04aba91f..e8f67b95 100644 --- a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/Chart.yaml +++ b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/Chart.yaml @@ -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 diff --git a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/README.md b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/README.md index 9ba0b4f5..c8ee7051 100644 --- a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/README.md +++ b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/README.md @@ -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/). diff --git a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/RELEASE_NOTES b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/RELEASE_NOTES index 055cd4c5..ad0cdfa9 100644 --- a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/RELEASE_NOTES +++ b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/RELEASE_NOTES @@ -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` diff --git a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/templates/_helpers.tpl b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/templates/_helpers.tpl index 99ac30d5..bd945678 100644 --- a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/templates/_helpers.tpl +++ b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/templates/_helpers.tpl @@ -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 -}} diff --git a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/templates/_image.tpl b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/templates/_image.tpl index 6d30bd03..66d019e3 100644 --- a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/templates/_image.tpl +++ b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/templates/_image.tpl @@ -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 -}} diff --git a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/templates/_pod.tpl b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/templates/_pod.tpl index 7534ae2d..62981dfb 100644 --- a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/templates/_pod.tpl +++ b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/templates/_pod.tpl @@ -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" -}} diff --git a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/templates/_service.tpl b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/templates/_service.tpl index 77a1365f..77cdeee7 100644 --- a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/templates/_service.tpl +++ b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/charts/victoria-metrics-common/templates/_service.tpl @@ -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 -}} diff --git a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/templates/NOTES.txt b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/templates/NOTES.txt index 7fb3fbd9..41f39937 100644 --- a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/templates/NOTES.txt +++ b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/templates/NOTES.txt @@ -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 diff --git a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/templates/pdb.yaml b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/templates/pdb.yaml index 8abd9dea..9ec3c2c2 100644 --- a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/templates/pdb.yaml +++ b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/templates/pdb.yaml @@ -18,6 +18,9 @@ spec: {{- with $pdb.maxUnavailable }} maxUnavailable: {{ . }} {{- end }} + {{- with $pdb.unhealthyPodEvictionPolicy }} + unhealthyPodEvictionPolicy: {{ . }} + {{- end }} selector: matchLabels: {{ include "vm.selectorLabels" $ctx | nindent 6 }} {{- end }} diff --git a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/templates/server.yaml b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/templates/server.yaml index e224c074..9d7fd7ed 100644 --- a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/templates/server.yaml +++ b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/templates/server.yaml @@ -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 }} diff --git a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/templates/webhook.yaml b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/templates/webhook.yaml index 51039cae..e38f7448 100644 --- a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/templates/webhook.yaml +++ b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/templates/webhook.yaml @@ -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 diff --git a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/values.yaml b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/values.yaml index 279ceee9..3a1027f2 100644 --- a/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/values.yaml +++ b/packages/system/victoria-metrics-operator/charts/victoria-metrics-operator/values.yaml @@ -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