Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ aliases:
* BUGFIX: [vmdistributed](https://docs.victoriametrics.com/operator/resources/vmdistributed/): change default load balancing policy for write requests from `first_available` to `least_loaded`. This should allow to evenly distribute write load across all VMAgents.
* BUGFIX: [vmalertmanagerconfig](https://docs.victoriametrics.com/operator/resources/vmalertmanagerconfig/): fix previously ignored negative values in VMAlertmanagerConfig. See [#2132](https://github.com/VictoriaMetrics/operator/issues/2132).
* BUGFIX: [vmalertmanager](https://docs.victoriametrics.com/operator/resources/vmalertmanager/): fixed ignored alertmanager template if it has no discovered VMAlertmanagerconfig CRs or tracing config defined. See [#2121](https://github.com/VictoriaMetrics/operator/issues/2121).
* BUGFIX: [VMCluster](https://docs.victoriametrics.com/operator/resources/vmcluster/), [VTCluster](https://docs.victoriametrics.com/operator/resources/vtcluster/) and [VLCluster](https://docs.victoriametrics.com/operator/resources/vlcluster/): fixed infinite non-default additional service recreation, when requestsLoadBalancer.enabled: true

## [v0.69.0](https://github.com/VictoriaMetrics/operator/releases/tag/v0.69.0)
**Release date:** 22 April 2026
Expand Down
8 changes: 6 additions & 2 deletions internal/controller/operator/factory/vlcluster/vlinsert.go
Original file line number Diff line number Diff line change
Expand Up @@ -318,11 +318,15 @@ func createOrUpdateVLInsertService(ctx context.Context, rclient client.Client, c
var prevSvc, prevAdditionalSvc *corev1.Service
if prevCR != nil && prevCR.Spec.VLInsert != nil {
prevSvc = buildVLInsertService(prevCR)
prevAdditionalSvc = build.AdditionalServiceFromDefault(prevSvc, prevCR.Spec.VLInsert.ServiceSpec)
prevAdditionalSvcBase := *prevSvc
prevAdditionalSvcBase.Name = prevCR.PrefixedName(vmv1beta1.ClusterComponentInsert)
prevAdditionalSvc = build.AdditionalServiceFromDefault(&prevAdditionalSvcBase, prevCR.Spec.VLInsert.ServiceSpec)
}
owner := cr.AsOwner()
if err := cr.Spec.VLInsert.ServiceSpec.IsSomeAndThen(func(s *vmv1beta1.AdditionalServiceSpec) error {
additionalSvc := build.AdditionalServiceFromDefault(svc, s)
additionalSvcBase := *svc
additionalSvcBase.Name = cr.PrefixedName(vmv1beta1.ClusterComponentInsert)
additionalSvc := build.AdditionalServiceFromDefault(&additionalSvcBase, s)
if additionalSvc.Name == svc.Name {
return fmt.Errorf("VLInsert additional service name: %q cannot be the same as crd.prefixedname: %q", additionalSvc.Name, svc.Name)
}
Expand Down
8 changes: 6 additions & 2 deletions internal/controller/operator/factory/vlcluster/vlselect.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,12 +113,16 @@ func createOrUpdateVLSelectService(ctx context.Context, rclient client.Client, c
var prevSvc, prevAdditionalSvc *corev1.Service
if prevCR != nil && prevCR.Spec.VLSelect != nil {
prevSvc = buildVLSelectService(prevCR)
prevAdditionalSvc = build.AdditionalServiceFromDefault(prevSvc, prevCR.Spec.VLSelect.ServiceSpec)
prevAdditionalSvcBase := *prevSvc
prevAdditionalSvcBase.Name = prevCR.PrefixedName(vmv1beta1.ClusterComponentSelect)
prevAdditionalSvc = build.AdditionalServiceFromDefault(&prevAdditionalSvcBase, prevCR.Spec.VLSelect.ServiceSpec)
}
svc := buildVLSelectService(cr)
owner := cr.AsOwner()
if err := cr.Spec.VLSelect.ServiceSpec.IsSomeAndThen(func(s *vmv1beta1.AdditionalServiceSpec) error {
additionalSvc := build.AdditionalServiceFromDefault(svc, s)
additionalSvcBase := *svc
additionalSvcBase.Name = cr.PrefixedName(vmv1beta1.ClusterComponentSelect)
additionalSvc := build.AdditionalServiceFromDefault(&additionalSvcBase, s)
if additionalSvc.Name == svc.Name {
return fmt.Errorf("VLSelect additional service name: %q cannot be the same as crd.prefixedname: %q", additionalSvc.Name, svc.Name)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,7 @@ func createOrUpdateLBProxyService(ctx context.Context, rclient client.Client, cr
b.SetFinalLabels(labels.Merge(b.FinalLabels(), map[string]string{
vmv1beta1.VMAuthLBServiceProxyTargetLabel: string(kind),
}))
b.SetSelectorLabels(cr.SelectorLabels(vmv1beta1.ClusterComponentBalancer))
b.SetSelectorLabels(r.SelectorLabels(vmv1beta1.ClusterComponentBalancer))
return b
}
b := builder(cr)
Expand Down
18 changes: 13 additions & 5 deletions internal/controller/operator/factory/vmcluster/vmcluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -221,11 +221,15 @@ func createOrUpdateVMSelectService(ctx context.Context, rclient client.Client, c
var prevSvc, prevAdditionalSvc *corev1.Service
if prevCR != nil && prevCR.Spec.VMSelect != nil {
prevSvc = buildVMSelectService(prevCR)
prevAdditionalSvc = build.AdditionalServiceFromDefault(prevSvc, prevCR.Spec.VMSelect.ServiceSpec)
prevAdditionalSvcBase := *prevSvc
prevAdditionalSvcBase.Name = prevCR.PrefixedName(vmv1beta1.ClusterComponentSelect)
prevAdditionalSvc = build.AdditionalServiceFromDefault(&prevAdditionalSvcBase, prevCR.Spec.VMSelect.ServiceSpec)
}
owner := cr.AsOwner()
if err := cr.Spec.VMSelect.ServiceSpec.IsSomeAndThen(func(s *vmv1beta1.AdditionalServiceSpec) error {
additionalSvc := build.AdditionalServiceFromDefault(svc, s)
additionalSvcBase := *svc
additionalSvcBase.Name = cr.PrefixedName(vmv1beta1.ClusterComponentSelect)
additionalSvc := build.AdditionalServiceFromDefault(&additionalSvcBase, s)
if additionalSvc.Name == svc.Name {
return fmt.Errorf("vmselect additional service name: %q cannot be the same as crd.prefixedname: %q", additionalSvc.Name, svc.Name)
}
Expand Down Expand Up @@ -278,7 +282,7 @@ func createOrUpdateLBProxyService(ctx context.Context, rclient client.Client, cr
b.SetFinalLabels(labels.Merge(b.FinalLabels(), map[string]string{
vmv1beta1.VMAuthLBServiceProxyTargetLabel: string(kind),
}))
b.SetSelectorLabels(cr.SelectorLabels(vmv1beta1.ClusterComponentBalancer))
b.SetSelectorLabels(r.SelectorLabels(vmv1beta1.ClusterComponentBalancer))
return b
}
b := builder(cr)
Expand Down Expand Up @@ -364,11 +368,15 @@ func createOrUpdateVMInsertService(ctx context.Context, rclient client.Client, c
var prevSvc, prevAdditionalSvc *corev1.Service
if prevCR != nil && prevCR.Spec.VMInsert != nil {
prevSvc = buildVMInsertService(prevCR)
prevAdditionalSvc = build.AdditionalServiceFromDefault(prevSvc, prevCR.Spec.VMInsert.ServiceSpec)
prevAdditionalSvcBase := *prevSvc
prevAdditionalSvcBase.Name = prevCR.PrefixedName(vmv1beta1.ClusterComponentInsert)
prevAdditionalSvc = build.AdditionalServiceFromDefault(&prevAdditionalSvcBase, prevCR.Spec.VMInsert.ServiceSpec)
}
owner := cr.AsOwner()
if err := cr.Spec.VMInsert.ServiceSpec.IsSomeAndThen(func(s *vmv1beta1.AdditionalServiceSpec) error {
additionalSvc := build.AdditionalServiceFromDefault(svc, s)
additionalSvcBase := *svc
additionalSvcBase.Name = cr.PrefixedName(vmv1beta1.ClusterComponentInsert)
additionalSvc := build.AdditionalServiceFromDefault(&additionalSvcBase, s)
if additionalSvc.Name == svc.Name {
return fmt.Errorf("vminsert additional service name: %q cannot be the same as crd.prefixedname: %q", additionalSvc.Name, svc.Name)
}
Expand Down
Loading
Loading