mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 21:47:07 +00:00
Merge pull request #86848 from haosdent/clean-filter-deps-nodeunschedulable
Break nodeunschedulable Filter plugins dependency on predicates package
This commit is contained in:
commit
e648e944e0
@ -47,8 +47,6 @@ var (
|
|||||||
ErrNodeNotReady = NewPredicateFailureError("NodeNotReady", "node(s) were not ready")
|
ErrNodeNotReady = NewPredicateFailureError("NodeNotReady", "node(s) were not ready")
|
||||||
// ErrNodeNetworkUnavailable is used for NodeNetworkUnavailable predicate error.
|
// ErrNodeNetworkUnavailable is used for NodeNetworkUnavailable predicate error.
|
||||||
ErrNodeNetworkUnavailable = NewPredicateFailureError("NodeNetworkUnavailable", "node(s) had unavailable network")
|
ErrNodeNetworkUnavailable = NewPredicateFailureError("NodeNetworkUnavailable", "node(s) had unavailable network")
|
||||||
// ErrNodeUnschedulable is used for NodeUnschedulable predicate error.
|
|
||||||
ErrNodeUnschedulable = NewPredicateFailureError("NodeUnschedulable", "node(s) were unschedulable")
|
|
||||||
// ErrNodeUnknownCondition is used for NodeUnknownCondition predicate error.
|
// ErrNodeUnknownCondition is used for NodeUnknownCondition predicate error.
|
||||||
ErrNodeUnknownCondition = NewPredicateFailureError("NodeUnknownCondition", "node(s) had unknown conditions")
|
ErrNodeUnknownCondition = NewPredicateFailureError("NodeUnknownCondition", "node(s) had unknown conditions")
|
||||||
// ErrFakePredicate is used for test only. The fake predicates returning false also returns error
|
// ErrFakePredicate is used for test only. The fake predicates returning false also returns error
|
||||||
@ -67,7 +65,6 @@ var unresolvablePredicateFailureErrors = map[PredicateFailureReason]struct{}{
|
|||||||
ErrNodeUnderDiskPressure: {},
|
ErrNodeUnderDiskPressure: {},
|
||||||
ErrNodeUnderPIDPressure: {},
|
ErrNodeUnderPIDPressure: {},
|
||||||
ErrNodeUnderMemoryPressure: {},
|
ErrNodeUnderMemoryPressure: {},
|
||||||
ErrNodeUnschedulable: {},
|
|
||||||
ErrNodeUnknownCondition: {},
|
ErrNodeUnknownCondition: {},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,6 +58,7 @@ go_test(
|
|||||||
"//pkg/scheduler/framework/plugins/interpodaffinity:go_default_library",
|
"//pkg/scheduler/framework/plugins/interpodaffinity:go_default_library",
|
||||||
"//pkg/scheduler/framework/plugins/nodelabel:go_default_library",
|
"//pkg/scheduler/framework/plugins/nodelabel:go_default_library",
|
||||||
"//pkg/scheduler/framework/plugins/noderesources:go_default_library",
|
"//pkg/scheduler/framework/plugins/noderesources:go_default_library",
|
||||||
|
"//pkg/scheduler/framework/plugins/nodeunschedulable:go_default_library",
|
||||||
"//pkg/scheduler/framework/plugins/podtopologyspread:go_default_library",
|
"//pkg/scheduler/framework/plugins/podtopologyspread:go_default_library",
|
||||||
"//pkg/scheduler/framework/plugins/tainttoleration:go_default_library",
|
"//pkg/scheduler/framework/plugins/tainttoleration:go_default_library",
|
||||||
"//pkg/scheduler/framework/plugins/volumebinding:go_default_library",
|
"//pkg/scheduler/framework/plugins/volumebinding:go_default_library",
|
||||||
|
@ -46,6 +46,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/interpodaffinity"
|
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/interpodaffinity"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodelabel"
|
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodelabel"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/noderesources"
|
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/noderesources"
|
||||||
|
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodeunschedulable"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/podtopologyspread"
|
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/podtopologyspread"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/tainttoleration"
|
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/tainttoleration"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumebinding"
|
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumebinding"
|
||||||
@ -1895,7 +1896,7 @@ func TestNodesWherePreemptionMightHelp(t *testing.T) {
|
|||||||
nodesStatuses: framework.NodeToStatusMap{
|
nodesStatuses: framework.NodeToStatusMap{
|
||||||
"machine1": framework.NewStatus(framework.Unschedulable, interpodaffinity.ErrReasonAffinityNotMatch),
|
"machine1": framework.NewStatus(framework.Unschedulable, interpodaffinity.ErrReasonAffinityNotMatch),
|
||||||
"machine2": framework.NewStatus(framework.UnschedulableAndUnresolvable, algorithmpredicates.ErrPodNotMatchHostName.GetReason()),
|
"machine2": framework.NewStatus(framework.UnschedulableAndUnresolvable, algorithmpredicates.ErrPodNotMatchHostName.GetReason()),
|
||||||
"machine3": framework.NewStatus(framework.UnschedulableAndUnresolvable, algorithmpredicates.ErrNodeUnschedulable.GetReason()),
|
"machine3": framework.NewStatus(framework.UnschedulableAndUnresolvable, nodeunschedulable.ErrReasonUnschedulable),
|
||||||
},
|
},
|
||||||
expected: map[string]bool{"machine1": true, "machine4": true},
|
expected: map[string]bool{"machine1": true, "machine4": true},
|
||||||
},
|
},
|
||||||
@ -1934,11 +1935,11 @@ func TestNodesWherePreemptionMightHelp(t *testing.T) {
|
|||||||
expected: map[string]bool{"machine4": true},
|
expected: map[string]bool{"machine4": true},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Node condition errors and ErrNodeUnknownCondition should be considered unresolvable",
|
name: "Node condition errors should be considered unresolvable",
|
||||||
nodesStatuses: framework.NodeToStatusMap{
|
nodesStatuses: framework.NodeToStatusMap{
|
||||||
"machine1": framework.NewStatus(framework.UnschedulableAndUnresolvable, algorithmpredicates.ErrNodeNotReady.GetReason()),
|
"machine1": framework.NewStatus(framework.UnschedulableAndUnresolvable, algorithmpredicates.ErrNodeNotReady.GetReason()),
|
||||||
"machine2": framework.NewStatus(framework.UnschedulableAndUnresolvable, algorithmpredicates.ErrNodeNetworkUnavailable.GetReason()),
|
"machine2": framework.NewStatus(framework.UnschedulableAndUnresolvable, algorithmpredicates.ErrNodeNetworkUnavailable.GetReason()),
|
||||||
"machine3": framework.NewStatus(framework.UnschedulableAndUnresolvable, algorithmpredicates.ErrNodeUnknownCondition.GetReason()),
|
"machine3": framework.NewStatus(framework.UnschedulableAndUnresolvable, nodeunschedulable.ErrReasonUnknownCondition),
|
||||||
},
|
},
|
||||||
expected: map[string]bool{"machine4": true},
|
expected: map[string]bool{"machine4": true},
|
||||||
},
|
},
|
||||||
|
@ -7,7 +7,6 @@ go_library(
|
|||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
deps = [
|
deps = [
|
||||||
"//pkg/apis/core/v1/helper:go_default_library",
|
"//pkg/apis/core/v1/helper:go_default_library",
|
||||||
"//pkg/scheduler/algorithm/predicates:go_default_library",
|
|
||||||
"//pkg/scheduler/framework/v1alpha1:go_default_library",
|
"//pkg/scheduler/framework/v1alpha1:go_default_library",
|
||||||
"//pkg/scheduler/nodeinfo:go_default_library",
|
"//pkg/scheduler/nodeinfo:go_default_library",
|
||||||
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
||||||
@ -20,7 +19,6 @@ go_test(
|
|||||||
srcs = ["node_unschedulable_test.go"],
|
srcs = ["node_unschedulable_test.go"],
|
||||||
embed = [":go_default_library"],
|
embed = [":go_default_library"],
|
||||||
deps = [
|
deps = [
|
||||||
"//pkg/scheduler/algorithm/predicates:go_default_library",
|
|
||||||
"//pkg/scheduler/framework/v1alpha1:go_default_library",
|
"//pkg/scheduler/framework/v1alpha1:go_default_library",
|
||||||
"//pkg/scheduler/nodeinfo:go_default_library",
|
"//pkg/scheduler/nodeinfo:go_default_library",
|
||||||
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
||||||
|
@ -22,7 +22,6 @@ import (
|
|||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper"
|
v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
|
|
||||||
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
|
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/nodeinfo"
|
"k8s.io/kubernetes/pkg/scheduler/nodeinfo"
|
||||||
)
|
)
|
||||||
@ -37,6 +36,13 @@ var _ framework.FilterPlugin = &NodeUnschedulable{}
|
|||||||
// Name is the name of the plugin used in the plugin registry and configurations.
|
// Name is the name of the plugin used in the plugin registry and configurations.
|
||||||
const Name = "NodeUnschedulable"
|
const Name = "NodeUnschedulable"
|
||||||
|
|
||||||
|
const (
|
||||||
|
// ErrReasonUnknownCondition is used for NodeUnknownCondition predicate error.
|
||||||
|
ErrReasonUnknownCondition = "node(s) had unknown conditions"
|
||||||
|
// ErrReasonUnschedulable is used for NodeUnschedulable predicate error.
|
||||||
|
ErrReasonUnschedulable = "node(s) were unschedulable"
|
||||||
|
)
|
||||||
|
|
||||||
// Name returns name of the plugin. It is used in logs, etc.
|
// Name returns name of the plugin. It is used in logs, etc.
|
||||||
func (pl *NodeUnschedulable) Name() string {
|
func (pl *NodeUnschedulable) Name() string {
|
||||||
return Name
|
return Name
|
||||||
@ -45,7 +51,7 @@ func (pl *NodeUnschedulable) Name() string {
|
|||||||
// Filter invoked at the filter extension point.
|
// Filter invoked at the filter extension point.
|
||||||
func (pl *NodeUnschedulable) Filter(ctx context.Context, _ *framework.CycleState, pod *v1.Pod, nodeInfo *nodeinfo.NodeInfo) *framework.Status {
|
func (pl *NodeUnschedulable) Filter(ctx context.Context, _ *framework.CycleState, pod *v1.Pod, nodeInfo *nodeinfo.NodeInfo) *framework.Status {
|
||||||
if nodeInfo == nil || nodeInfo.Node() == nil {
|
if nodeInfo == nil || nodeInfo.Node() == nil {
|
||||||
return framework.NewStatus(framework.UnschedulableAndUnresolvable, predicates.ErrNodeUnknownCondition.GetReason())
|
return framework.NewStatus(framework.UnschedulableAndUnresolvable, ErrReasonUnknownCondition)
|
||||||
}
|
}
|
||||||
// If pod tolerate unschedulable taint, it's also tolerate `node.Spec.Unschedulable`.
|
// If pod tolerate unschedulable taint, it's also tolerate `node.Spec.Unschedulable`.
|
||||||
podToleratesUnschedulable := v1helper.TolerationsTolerateTaint(pod.Spec.Tolerations, &v1.Taint{
|
podToleratesUnschedulable := v1helper.TolerationsTolerateTaint(pod.Spec.Tolerations, &v1.Taint{
|
||||||
@ -54,7 +60,7 @@ func (pl *NodeUnschedulable) Filter(ctx context.Context, _ *framework.CycleState
|
|||||||
})
|
})
|
||||||
// TODO (k82cn): deprecates `node.Spec.Unschedulable` in 1.13.
|
// TODO (k82cn): deprecates `node.Spec.Unschedulable` in 1.13.
|
||||||
if nodeInfo.Node().Spec.Unschedulable && !podToleratesUnschedulable {
|
if nodeInfo.Node().Spec.Unschedulable && !podToleratesUnschedulable {
|
||||||
return framework.NewStatus(framework.UnschedulableAndUnresolvable, predicates.ErrNodeUnschedulable.GetReason())
|
return framework.NewStatus(framework.UnschedulableAndUnresolvable, ErrReasonUnschedulable)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,6 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
|
|
||||||
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
|
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
|
||||||
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
|
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
|
||||||
)
|
)
|
||||||
@ -42,7 +41,7 @@ func TestNodeUnschedulable(t *testing.T) {
|
|||||||
Unschedulable: true,
|
Unschedulable: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
wantStatus: framework.NewStatus(framework.UnschedulableAndUnresolvable, predicates.ErrNodeUnschedulable.GetReason()),
|
wantStatus: framework.NewStatus(framework.UnschedulableAndUnresolvable, ErrReasonUnschedulable),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Schedule pod to normal node",
|
name: "Schedule pod to normal node",
|
||||||
|
Loading…
Reference in New Issue
Block a user