From 71bec0051cb740391346a65441dc9085ec68fcd4 Mon Sep 17 00:00:00 2001 From: Andrii Chubatiuk Date: Tue, 21 Apr 2026 18:26:55 +0300 Subject: [PATCH] renamed vmbackup and vmrestore ports --- docs/CHANGELOG.md | 2 ++ docs/env.md | 1 + internal/config/config.go | 8 ++++++++ internal/controller/operator/factory/build/backup.go | 12 ++++++++++-- test/e2e/upgrade/upgrade_test.go | 3 ++- 5 files changed, 23 insertions(+), 3 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 56caf115a..5e5df8ff1 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -20,6 +20,7 @@ aliases: **Update note 3**: made `controller.prometheusCRD.resyncPeriod` command line flag noop, which was relevant to Prometheus object watchers. **Update note 4**: `-eula` flag is not set by default anymore for VMBackup and VMRestore. To avoid VMCluster/VMSingle rollouts set `spec.vmstorage.vmBackup.acceptEula: true` for VMCluster and `spec.vmBackup.acceptEula: true"` for VMSingle and replace it with `spec.license` during VMSingle/VMCluster upgrade. **Update note 5**: new flag was introduced, so VMAnomaly pods will be recreated. VMAnomaly version should be at least 1.25. +**Update note 6**: fixed port name collision in VMSingle and VMCluster, when VMBackup is enabled. To avoid VMSingle/VMCluster pods recreation set `VM_USE_OLD_BACKUP_RESTORE_PORT_NAMES` environment variable to `true`. * Dependency: [vmoperator](https://docs.victoriametrics.com/operator/): Updated default versions for VM apps to [v1.139.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.139.0) version * Dependency: [vmoperator](https://docs.victoriametrics.com/operator/): Updated default versions for VL apps to [v1.50.0](https://github.com/VictoriaMetrics/VictoriaLogs/releases/tag/v1.50.0). @@ -57,6 +58,7 @@ aliases: * BUGFIX: [vmdistributed](https://docs.victoriametrics.com/operator/resources/vmdistributed/): use default stub, when no VMAuth backends are available * BUGFIX: [vmagent](https://docs.victoriametrics.com/operator/resources/vmagent/): use volume from spec.volumes as persistent queue volume if its name is `persistent-queue-data`, previously emptyDir was mounted. See [#1677](https://github.com/VictoriaMetrics/operator/issues/1677). * BUGFIX: [vmcluster](https://docs.victoriametrics.com/operator/resources/vmcluster/): use volume from spec.vmstorage.volumes and spec.vmselect.volumes as data and cache volumes if its name is `vmstorage-db` and `vmselect-cachedir` respectively. See [#784](https://github.com/VictoriaMetrics/operator/issues/784). +* BUGFIX: [vmcluster](https://docs.victoriametrics.com/operator/resources/vmcluster/) and [vmsingle](https://docs.victoriametrics.com/operator/resources/vmsingle/): renamed vmbackup and vmrestore port names, before they had identical to storage/single port names, which is not allowed. ## [v0.68.1](https://github.com/VictoriaMetrics/operator/releases/tag/v0.68.1) **Release date:** 23 February 2026 diff --git a/docs/env.md b/docs/env.md index 6638d8d6e..684f442f6 100644 --- a/docs/env.md +++ b/docs/env.md @@ -13,6 +13,7 @@ | VM_PSPAUTOCREATEENABLED: `false` # | | VM_ENABLETCP6: `false` # | | VM_LOOPBACK: `-` #
Overrides default loopback interface that will be used for all VM components | +| VM_USE_OLD_BACKUP_RESTORE_PORT_NAMES: `false` #
Restores old VMBackup/VMRestore port names to avoid restarts during upgrades | | VM_CONFIG_RELOADER_IMAGE: `victoriametrics/operator:config-reloader-${VM_OPERATOR_VERSION}` #
default image for all config-reloader containers | | VM_CONFIG_RELOADER_LIMIT_MEMORY: `unlimited` #
defines global resource.limits.memory for all config-reloader containers | | VM_CONFIG_RELOADER_LIMIT_CPU: `unlimited` #
defines global resource.limits.cpu for all config-reloader containers | diff --git a/internal/config/config.go b/internal/config/config.go index 940b79fec..cef25ae89 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -118,6 +118,8 @@ type BaseOperatorConf struct { EnableTCP6 bool `default:"false" env:"VM_ENABLETCP6"` // Overrides default loopback interface that will be used for all VM components Loopback string `env:"VM_LOOPBACK"` + // Restores old VMBackup/VMRestore port names to avoid restarts during upgrades + UseOldBackupRestorePortNames bool `default:"false" env:"VM_USE_OLD_BACKUP_RESTORE_PORT_NAMES"` // defines global config reloader parameters ConfigReloader struct { @@ -758,6 +760,12 @@ func MustGetBaseConfig() *BaseOperatorConf { return opConf } +// UseOldBackupRestorePortNames +func UseOldBackupRestorePortNames() bool { + cfg := MustGetBaseConfig() + return cfg.UseOldBackupRestorePortNames +} + // GetLocalhost returns localhost value depending on global configuration func GetLocalhost() string { cfg := MustGetBaseConfig() diff --git a/internal/controller/operator/factory/build/backup.go b/internal/controller/operator/factory/build/backup.go index 5df65468c..c0c2707e0 100644 --- a/internal/controller/operator/factory/build/backup.go +++ b/internal/controller/operator/factory/build/backup.go @@ -91,7 +91,11 @@ func VMBackupManager( } var ports []corev1.ContainerPort - ports = append(ports, corev1.ContainerPort{Name: "http", Protocol: "TCP", ContainerPort: intstr.Parse(cr.Port).IntVal}) + portName := "http-backup" + if config.UseOldBackupRestorePortNames() { + portName = "http" + } + ports = append(ports, corev1.ContainerPort{Name: portName, Protocol: "TCP", ContainerPort: intstr.Parse(cr.Port).IntVal}) mounts = append(mounts, cr.VolumeMounts...) if cr.CredentialsSecret != nil { mounts = append(mounts, corev1.VolumeMount{ @@ -199,7 +203,11 @@ func VMRestore( } var ports []corev1.ContainerPort - ports = append(ports, corev1.ContainerPort{Name: "http", Protocol: "TCP", ContainerPort: intstr.Parse(cr.Port).IntVal}) + portName := "http-restore" + if config.UseOldBackupRestorePortNames() { + portName = "http" + } + ports = append(ports, corev1.ContainerPort{Name: portName, Protocol: "TCP", ContainerPort: intstr.Parse(cr.Port).IntVal}) mounts = append(mounts, cr.VolumeMounts...) if cr.CredentialsSecret != nil { mounts = append(mounts, corev1.VolumeMount{ diff --git a/test/e2e/upgrade/upgrade_test.go b/test/e2e/upgrade/upgrade_test.go index e336e7e3f..6a0d1bd39 100644 --- a/test/e2e/upgrade/upgrade_test.go +++ b/test/e2e/upgrade/upgrade_test.go @@ -866,7 +866,8 @@ var _ = Describe("operator upgrade", Label("upgrade"), func() { })}, }, envs: map[string]string{ - "VM_LOOPBACK": "localhost", + "VM_LOOPBACK": "localhost", + "VM_USE_OLD_BACKUP_RESTORE_PORT_NAMES": "true", }, }, // nolint:dupl