Skip to content

Commit 89867e1

Browse files
author
zouyee
committed
Move CheckNodeUnschedulable predicate to its filter plugin
Signed-off-by: Zou Nengren <[email protected]>
1 parent 04d71d8 commit 89867e1

File tree

4 files changed

+15
-86
lines changed

4 files changed

+15
-86
lines changed

pkg/scheduler/algorithm/predicates/predicates.go

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -913,26 +913,6 @@ func GeneralPredicates(pod *v1.Pod, meta Metadata, nodeInfo *schedulernodeinfo.N
913913
return len(predicateFails) == 0, predicateFails, nil
914914
}
915915

916-
// CheckNodeUnschedulablePredicate checks if a pod can be scheduled on a node with Unschedulable spec.
917-
func CheckNodeUnschedulablePredicate(pod *v1.Pod, meta Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
918-
if nodeInfo == nil || nodeInfo.Node() == nil {
919-
return false, []PredicateFailureReason{ErrNodeUnknownCondition}, nil
920-
}
921-
922-
// If pod tolerate unschedulable taint, it's also tolerate `node.Spec.Unschedulable`.
923-
podToleratesUnschedulable := v1helper.TolerationsTolerateTaint(pod.Spec.Tolerations, &v1.Taint{
924-
Key: v1.TaintNodeUnschedulable,
925-
Effect: v1.TaintEffectNoSchedule,
926-
})
927-
928-
// TODO (k82cn): deprecates `node.Spec.Unschedulable` in 1.13.
929-
if nodeInfo.Node().Spec.Unschedulable && !podToleratesUnschedulable {
930-
return false, []PredicateFailureReason{ErrNodeUnschedulable}, nil
931-
}
932-
933-
return true, nil, nil
934-
}
935-
936916
// PodToleratesNodeTaints checks if a pod tolerations can tolerate the node taints.
937917
func PodToleratesNodeTaints(pod *v1.Pod, meta Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
938918
if nodeInfo == nil || nodeInfo.Node() == nil {

pkg/scheduler/algorithm/predicates/predicates_test.go

Lines changed: 0 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -2120,65 +2120,3 @@ func TestGetMaxVols(t *testing.T) {
21202120
os.Setenv(KubeMaxPDVols, previousValue)
21212121
}
21222122
}
2123-
2124-
func TestCheckNodeUnschedulablePredicate(t *testing.T) {
2125-
testCases := []struct {
2126-
name string
2127-
pod *v1.Pod
2128-
node *v1.Node
2129-
fit bool
2130-
}{
2131-
{
2132-
name: "Does not schedule pod to unschedulable node (node.Spec.Unschedulable==true)",
2133-
pod: &v1.Pod{},
2134-
node: &v1.Node{
2135-
Spec: v1.NodeSpec{
2136-
Unschedulable: true,
2137-
},
2138-
},
2139-
fit: false,
2140-
},
2141-
{
2142-
name: "Schedule pod to normal node",
2143-
pod: &v1.Pod{},
2144-
node: &v1.Node{
2145-
Spec: v1.NodeSpec{
2146-
Unschedulable: false,
2147-
},
2148-
},
2149-
fit: true,
2150-
},
2151-
{
2152-
name: "Schedule pod with toleration to unschedulable node (node.Spec.Unschedulable==true)",
2153-
pod: &v1.Pod{
2154-
Spec: v1.PodSpec{
2155-
Tolerations: []v1.Toleration{
2156-
{
2157-
Key: v1.TaintNodeUnschedulable,
2158-
Effect: v1.TaintEffectNoSchedule,
2159-
},
2160-
},
2161-
},
2162-
},
2163-
node: &v1.Node{
2164-
Spec: v1.NodeSpec{
2165-
Unschedulable: true,
2166-
},
2167-
},
2168-
fit: true,
2169-
},
2170-
}
2171-
2172-
for _, test := range testCases {
2173-
nodeInfo := schedulernodeinfo.NewNodeInfo()
2174-
nodeInfo.SetNode(test.node)
2175-
fit, _, err := CheckNodeUnschedulablePredicate(test.pod, nil, nodeInfo)
2176-
if err != nil {
2177-
t.Fatalf("Failed to check node unschedulable: %v", err)
2178-
}
2179-
2180-
if fit != test.fit {
2181-
t.Errorf("Unexpected fit: expected %v, got %v", test.fit, fit)
2182-
}
2183-
}
2184-
}

pkg/scheduler/framework/plugins/nodeunschedulable/BUILD

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ go_library(
66
importpath = "k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodeunschedulable",
77
visibility = ["//visibility:public"],
88
deps = [
9+
"//pkg/apis/core/v1/helper:go_default_library",
910
"//pkg/scheduler/algorithm/predicates:go_default_library",
10-
"//pkg/scheduler/framework/plugins/migration:go_default_library",
1111
"//pkg/scheduler/framework/v1alpha1:go_default_library",
1212
"//pkg/scheduler/nodeinfo:go_default_library",
1313
"//staging/src/k8s.io/api/core/v1:go_default_library",

pkg/scheduler/framework/plugins/nodeunschedulable/node_unschedulable.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ import (
2121

2222
v1 "k8s.io/api/core/v1"
2323
"k8s.io/apimachinery/pkg/runtime"
24+
v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper"
2425
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
25-
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/migration"
2626
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
2727
"k8s.io/kubernetes/pkg/scheduler/nodeinfo"
2828
)
@@ -44,8 +44,19 @@ func (pl *NodeUnschedulable) Name() string {
4444

4545
// Filter invoked at the filter extension point.
4646
func (pl *NodeUnschedulable) Filter(ctx context.Context, _ *framework.CycleState, pod *v1.Pod, nodeInfo *nodeinfo.NodeInfo) *framework.Status {
47-
_, reasons, err := predicates.CheckNodeUnschedulablePredicate(pod, nil, nodeInfo)
48-
return migration.PredicateResultToFrameworkStatus(reasons, err)
47+
if nodeInfo == nil || nodeInfo.Node() == nil {
48+
return framework.NewStatus(framework.UnschedulableAndUnresolvable, predicates.ErrNodeUnknownCondition.GetReason())
49+
}
50+
// If pod tolerate unschedulable taint, it's also tolerate `node.Spec.Unschedulable`.
51+
podToleratesUnschedulable := v1helper.TolerationsTolerateTaint(pod.Spec.Tolerations, &v1.Taint{
52+
Key: v1.TaintNodeUnschedulable,
53+
Effect: v1.TaintEffectNoSchedule,
54+
})
55+
// TODO (k82cn): deprecates `node.Spec.Unschedulable` in 1.13.
56+
if nodeInfo.Node().Spec.Unschedulable && !podToleratesUnschedulable {
57+
return framework.NewStatus(framework.UnschedulableAndUnresolvable, predicates.ErrNodeUnschedulable.GetReason())
58+
}
59+
return nil
4960
}
5061

5162
// New initializes a new plugin and returns it.

0 commit comments

Comments
 (0)