From 6c89041043ccae01b9389a7ad4d6cb007696d262 Mon Sep 17 00:00:00 2001 From: googs1025 Date: Mon, 5 May 2025 21:51:28 +0800 Subject: [PATCH] fix(scheduler): node pre-check logic to consider NoExecute taint effect Signed-off-by: googs1025 --- pkg/scheduler/eventhandlers.go | 5 ++--- pkg/scheduler/eventhandlers_test.go | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/pkg/scheduler/eventhandlers.go b/pkg/scheduler/eventhandlers.go index 09c4200ff3a..1e6a5e155dc 100644 --- a/pkg/scheduler/eventhandlers.go +++ b/pkg/scheduler/eventhandlers.go @@ -38,6 +38,7 @@ import ( "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/scheduler/backend/queue" "k8s.io/kubernetes/pkg/scheduler/framework" + "k8s.io/kubernetes/pkg/scheduler/framework/plugins/helper" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodeaffinity" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodename" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodeports" @@ -635,9 +636,7 @@ func preCheckForNode(nodeInfo *framework.NodeInfo) queue.PreEnqueueCheck { if len(admissionResults) != 0 { return false } - _, isUntolerated := corev1helpers.FindMatchingUntoleratedTaint(nodeInfo.Node().Spec.Taints, pod.Spec.Tolerations, func(t *v1.Taint) bool { - return t.Effect == v1.TaintEffectNoSchedule - }) + _, isUntolerated := corev1helpers.FindMatchingUntoleratedTaint(nodeInfo.Node().Spec.Taints, pod.Spec.Tolerations, helper.DoNotScheduleTaintsFilterFunc()) return !isUntolerated } } diff --git a/pkg/scheduler/eventhandlers_test.go b/pkg/scheduler/eventhandlers_test.go index 8c631953443..83d5f9301bd 100644 --- a/pkg/scheduler/eventhandlers_test.go +++ b/pkg/scheduler/eventhandlers_test.go @@ -372,6 +372,26 @@ func TestPreCheckForNode(t *testing.T) { }, want: []bool{false, true, false, false}, }, + { + name: "tainted node with NoExecute effect, pods with tolerations", + nodeFn: func() *v1.Node { + node := st.MakeNode().Name("fake-node").Label("hostname", "fake-node").Capacity(cpu8).Obj() + node.Spec.Taints = []v1.Taint{ + {Key: "foo", Effect: v1.TaintEffectPreferNoSchedule}, + {Key: "baz", Effect: v1.TaintEffectNoExecute}, + } + return node + }, + pods: []*v1.Pod{ + st.MakePod().Name("p1").Obj(), + st.MakePod().Name("p2").Obj(), + st.MakePod().Name("p3").Toleration("foo").Obj(), + st.MakePod().Name("p4").Toleration("baz").Obj(), + st.MakePod().Name("p5").Obj(), + st.MakePod().Name("p6").Toleration("bar").Toleration("baz").Obj(), + }, + want: []bool{false, false, false, true, false, true}, + }, } for _, tt := range tests {