Merge pull request #131609 from googs1025/scheduler_AdmissionCheck

fix(scheduler): node pre-check logic to consider NoExecute taint effect
This commit is contained in:
Kubernetes Prow Robot
2025-05-06 06:03:20 -07:00
committed by GitHub
2 changed files with 22 additions and 3 deletions

View File

@@ -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
}
}

View File

@@ -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 {