From 132870168cdbcde3c0952e05b87522c608044521 Mon Sep 17 00:00:00 2001 From: Oren Cohen Date: Tue, 13 Aug 2024 12:40:45 +0300 Subject: [PATCH] console plugin/proxy: Change AntiAffinity rule to 'Preferred' instead of 'Required' Due to the (default setting of) rollingUpdate of the 'kubevirt-console-plugin' and 'kubevirt-apiserver-proxy' Deployments, when there is a change, a 3rd pod is being scheduled as a replacement. If there is a nodeSelector placement config alongside the anti-affinity rules, the replacement pod won't get scheduled if there are less than 3 nodes labeled with the node selector label. We'll use 'PreferredDuringSchedulingIgnoredDuringExecution' instead of 'RequiredDuringSchedulingIgnoredDuringExecution' to soften the affinity rule so no pod will get stuck at Pending. Signed-off-by: Oren Cohen --- controllers/operands/kubevirtConsolePlugin.go | 19 +++++++++++-------- .../operands/kubevirtConsolePlugin_test.go | 19 +++++++++++-------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/controllers/operands/kubevirtConsolePlugin.go b/controllers/operands/kubevirtConsolePlugin.go index d7d515e34..d1c17809d 100644 --- a/controllers/operands/kubevirtConsolePlugin.go +++ b/controllers/operands/kubevirtConsolePlugin.go @@ -214,18 +214,21 @@ func getPodAntiAffinity(componentLabel string, infrastructureHighlyAvailable boo if infrastructureHighlyAvailable { return &corev1.Affinity{ PodAntiAffinity: &corev1.PodAntiAffinity{ - RequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{ + PreferredDuringSchedulingIgnoredDuringExecution: []corev1.WeightedPodAffinityTerm{ { - LabelSelector: &metav1.LabelSelector{ - MatchExpressions: []metav1.LabelSelectorRequirement{ - { - Key: hcoutil.AppLabelComponent, - Operator: metav1.LabelSelectorOpIn, - Values: []string{componentLabel}, + Weight: 90, + PodAffinityTerm: corev1.PodAffinityTerm{ + LabelSelector: &metav1.LabelSelector{ + MatchExpressions: []metav1.LabelSelectorRequirement{ + { + Key: hcoutil.AppLabelComponent, + Operator: metav1.LabelSelectorOpIn, + Values: []string{componentLabel}, + }, }, }, + TopologyKey: corev1.LabelHostname, }, - TopologyKey: corev1.LabelHostname, }, }, }, diff --git a/controllers/operands/kubevirtConsolePlugin_test.go b/controllers/operands/kubevirtConsolePlugin_test.go index b0407fd1a..214438a92 100644 --- a/controllers/operands/kubevirtConsolePlugin_test.go +++ b/controllers/operands/kubevirtConsolePlugin_test.go @@ -889,18 +889,21 @@ var _ = Describe("Kubevirt Console Plugin", func() { func expectedPodAntiAffinity(appComponent hcoutil.AppComponent) *v1.Affinity { return &v1.Affinity{ PodAntiAffinity: &v1.PodAntiAffinity{ - RequiredDuringSchedulingIgnoredDuringExecution: []v1.PodAffinityTerm{ + PreferredDuringSchedulingIgnoredDuringExecution: []v1.WeightedPodAffinityTerm{ { - LabelSelector: &metav1.LabelSelector{ - MatchExpressions: []metav1.LabelSelectorRequirement{ - { - Key: hcoutil.AppLabelComponent, - Operator: metav1.LabelSelectorOpIn, - Values: []string{string(appComponent)}, + Weight: 90, + PodAffinityTerm: v1.PodAffinityTerm{ + LabelSelector: &metav1.LabelSelector{ + MatchExpressions: []metav1.LabelSelectorRequirement{ + { + Key: hcoutil.AppLabelComponent, + Operator: metav1.LabelSelectorOpIn, + Values: []string{string(appComponent)}, + }, }, }, + TopologyKey: v1.LabelHostname, }, - TopologyKey: v1.LabelHostname, }, }, },