diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md
index 94abd4e9f..72b05596c 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.
* BUGFIX: [vmsingle](https://docs.victoriametrics.com/operator/resources/vmsingle/): updated scraping implementation to match vmagent functionality.
## [v0.68.1](https://github.com/VictoriaMetrics/operator/releases/tag/v0.68.1)
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