Deprecate scheduler predicate and priority factory registration

This commit is contained in:
Abdullah Gharaibeh
2019-12-25 13:36:46 -05:00
parent c84b1a8a10
commit 2b3df3587e
16 changed files with 247 additions and 1059 deletions

View File

@@ -28,11 +28,9 @@ go_test(
"//pkg/controller/nodelifecycle:go_default_library",
"//pkg/features:go_default_library",
"//pkg/scheduler:go_default_library",
"//pkg/scheduler/algorithm/predicates:go_default_library",
"//pkg/scheduler/algorithmprovider:go_default_library",
"//pkg/scheduler/apis/config:go_default_library",
"//pkg/scheduler/apis/extender/v1:go_default_library",
"//pkg/scheduler/framework/plugins/noderesources:go_default_library",
"//pkg/scheduler/framework/v1alpha1:go_default_library",
"//pkg/scheduler/nodeinfo:go_default_library",
"//pkg/scheduler/testing:go_default_library",
@@ -49,7 +47,6 @@ go_test(
"//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",

View File

@@ -30,7 +30,6 @@ import (
clientset "k8s.io/client-go/kubernetes"
scheduler "k8s.io/kubernetes/pkg/scheduler"
schedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config"
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/noderesources"
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
)
@@ -483,7 +482,7 @@ func TestPreFilterPlugin(t *testing.T) {
// Create the master and the scheduler with the test plugin set.
context := initTestSchedulerForFrameworkTest(t, initTestMaster(t, "prefilter-plugin", nil), 2,
scheduler.WithFrameworkPlugins(plugins),
scheduler.WithFrameworkInTreeRegistry(registry))
scheduler.WithFrameworkOutOfTreeRegistry(registry))
defer cleanupTest(t, context)
tests := []struct {
@@ -554,7 +553,7 @@ func TestScorePlugin(t *testing.T) {
context := initTestSchedulerForFrameworkTest(t, initTestMaster(t, "score-plugin", nil), 10,
scheduler.WithFrameworkPlugins(plugins),
scheduler.WithFrameworkInTreeRegistry(registry))
scheduler.WithFrameworkOutOfTreeRegistry(registry))
defer cleanupTest(t, context)
for i, fail := range []bool{false, true} {
@@ -612,7 +611,7 @@ func TestNormalizeScorePlugin(t *testing.T) {
}
context := initTestSchedulerForFrameworkTest(t, initTestMaster(t, "score-plugin", nil), 10,
scheduler.WithFrameworkPlugins(plugins),
scheduler.WithFrameworkInTreeRegistry(registry))
scheduler.WithFrameworkOutOfTreeRegistry(registry))
defer cleanupTest(t, context)
@@ -657,7 +656,7 @@ func TestReservePlugin(t *testing.T) {
// Create the master and the scheduler with the test plugin set.
context := initTestSchedulerForFrameworkTest(t, initTestMaster(t, "reserve-plugin", nil), 2,
scheduler.WithFrameworkPlugins(plugins),
scheduler.WithFrameworkInTreeRegistry(registry))
scheduler.WithFrameworkOutOfTreeRegistry(registry))
defer cleanupTest(t, context)
for _, fail := range []bool{false, true} {
@@ -709,7 +708,7 @@ func TestPrebindPlugin(t *testing.T) {
// Create the master and the scheduler with the test plugin set.
context := initTestSchedulerForFrameworkTest(t, initTestMaster(t, "prebind-plugin", nil), 2,
scheduler.WithFrameworkPlugins(plugins),
scheduler.WithFrameworkInTreeRegistry(registry))
scheduler.WithFrameworkOutOfTreeRegistry(registry))
defer cleanupTest(t, context)
tests := []struct {
@@ -792,7 +791,7 @@ func TestUnreservePlugin(t *testing.T) {
// Create the master and the scheduler with the test plugin set.
context := initTestSchedulerForFrameworkTest(t, initTestMaster(t, "unreserve-plugin", nil), 2,
scheduler.WithFrameworkPlugins(plugins),
scheduler.WithFrameworkInTreeRegistry(registry))
scheduler.WithFrameworkOutOfTreeRegistry(registry))
defer cleanupTest(t, context)
tests := []struct {
@@ -882,8 +881,7 @@ func TestBindPlugin(t *testing.T) {
// Create the master and the scheduler with the test plugin set.
context := initTestSchedulerWithOptions(t, testContext, false, nil, time.Second,
scheduler.WithFrameworkPlugins(plugins),
scheduler.WithFrameworkInTreeRegistry(registry),
scheduler.WithFrameworkConfigProducerRegistry(nil))
scheduler.WithFrameworkOutOfTreeRegistry(registry))
defer cleanupTest(t, context)
// Add a few nodes.
@@ -1043,7 +1041,7 @@ func TestPostBindPlugin(t *testing.T) {
// Create the master and the scheduler with the test plugin set.
context := initTestSchedulerForFrameworkTest(t, initTestMaster(t, "postbind-plugin", nil), 2,
scheduler.WithFrameworkPlugins(plugins),
scheduler.WithFrameworkInTreeRegistry(registry))
scheduler.WithFrameworkOutOfTreeRegistry(registry))
defer cleanupTest(t, context)
tests := []struct {
@@ -1099,7 +1097,7 @@ func TestPermitPlugin(t *testing.T) {
// Create the master and the scheduler with the test plugin set.
context := initTestSchedulerForFrameworkTest(t, initTestMaster(t, "permit-plugin", nil), 2,
scheduler.WithFrameworkPlugins(plugins),
scheduler.WithFrameworkInTreeRegistry(registry))
scheduler.WithFrameworkOutOfTreeRegistry(registry))
defer cleanupTest(t, context)
tests := []struct {
@@ -1187,7 +1185,7 @@ func TestMultiplePermitPlugins(t *testing.T) {
// Create the master and the scheduler with the test plugin set.
context := initTestSchedulerForFrameworkTest(t, initTestMaster(t, "multi-permit-plugin", nil), 2,
scheduler.WithFrameworkPlugins(plugins),
scheduler.WithFrameworkInTreeRegistry(registry))
scheduler.WithFrameworkOutOfTreeRegistry(registry))
defer cleanupTest(t, context)
// Both permit plugins will return Wait for permitting
@@ -1242,7 +1240,7 @@ func TestPermitPluginsCancelled(t *testing.T) {
// Create the master and the scheduler with the test plugin set.
context := initTestSchedulerForFrameworkTest(t, initTestMaster(t, "permit-plugins", nil), 2,
scheduler.WithFrameworkPlugins(plugins),
scheduler.WithFrameworkInTreeRegistry(registry))
scheduler.WithFrameworkOutOfTreeRegistry(registry))
defer cleanupTest(t, context)
// Both permit plugins will return Wait for permitting
@@ -1283,7 +1281,7 @@ func TestCoSchedulingWithPermitPlugin(t *testing.T) {
// Create the master and the scheduler with the test plugin set.
context := initTestSchedulerForFrameworkTest(t, initTestMaster(t, "permit-plugin", nil), 2,
scheduler.WithFrameworkPlugins(plugins),
scheduler.WithFrameworkInTreeRegistry(registry))
scheduler.WithFrameworkOutOfTreeRegistry(registry))
defer cleanupTest(t, context)
tests := []struct {
@@ -1364,7 +1362,7 @@ func TestFilterPlugin(t *testing.T) {
// Create the master and the scheduler with the test plugin set.
context := initTestSchedulerForFrameworkTest(t, initTestMaster(t, "filter-plugin", nil), 2,
scheduler.WithFrameworkPlugins(plugins),
scheduler.WithFrameworkInTreeRegistry(registry))
scheduler.WithFrameworkOutOfTreeRegistry(registry))
defer cleanupTest(t, context)
for _, fail := range []bool{false, true} {
@@ -1415,7 +1413,7 @@ func TestPostFilterPlugin(t *testing.T) {
// Create the master and the scheduler with the test plugin set.
context := initTestSchedulerForFrameworkTest(t, initTestMaster(t, "post-filter-plugin", nil), 2,
scheduler.WithFrameworkPlugins(plugins),
scheduler.WithFrameworkInTreeRegistry(registry))
scheduler.WithFrameworkOutOfTreeRegistry(registry))
defer cleanupTest(t, context)
for _, fail := range []bool{false, true} {
@@ -1451,16 +1449,11 @@ func TestPreemptWithPermitPlugin(t *testing.T) {
// Create a plugin registry for testing. Register only a permit plugin.
permitPlugin := &PermitPlugin{}
registry, plugins := initRegistryAndConfig(permitPlugin)
// Fit filter plugin must be registered.
registry.Register(noderesources.FitName, noderesources.NewFit)
plugins.Filter = &schedulerconfig.PluginSet{
Enabled: []schedulerconfig.Plugin{{Name: noderesources.FitName}},
}
// Create the master and the scheduler with the test plugin set.
context := initTestSchedulerForFrameworkTest(t, initTestMaster(t, "preempt-with-permit-plugin", nil), 0,
scheduler.WithFrameworkPlugins(plugins),
scheduler.WithFrameworkInTreeRegistry(registry))
scheduler.WithFrameworkOutOfTreeRegistry(registry))
defer cleanupTest(t, context)
// Add one node.
@@ -1524,7 +1517,6 @@ func TestPreemptWithPermitPlugin(t *testing.T) {
}
func initTestSchedulerForFrameworkTest(t *testing.T, context *testContext, nodeCount int, opts ...scheduler.Option) *testContext {
opts = append(opts, scheduler.WithFrameworkConfigProducerRegistry(nil))
c := initTestSchedulerWithOptions(t, context, false, nil, time.Second, opts...)
if nodeCount > 0 {
_, err := createNodes(c.clientSet, "test-node", nil, nodeCount)

View File

@@ -29,7 +29,6 @@ import (
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/client-go/informers"
clientset "k8s.io/client-go/kubernetes"
@@ -39,11 +38,8 @@ import (
"k8s.io/client-go/tools/events"
"k8s.io/kubernetes/pkg/api/legacyscheme"
"k8s.io/kubernetes/pkg/scheduler"
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
_ "k8s.io/kubernetes/pkg/scheduler/algorithmprovider"
kubeschedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config"
schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
"k8s.io/kubernetes/test/integration/framework"
)
@@ -54,22 +50,6 @@ type nodeStateManager struct {
makeUnSchedulable nodeMutationFunc
}
func PredicateOne(pod *v1.Pod, meta predicates.Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []predicates.PredicateFailureReason, error) {
return true, nil, nil
}
func PredicateTwo(pod *v1.Pod, meta predicates.Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []predicates.PredicateFailureReason, error) {
return true, nil, nil
}
func PriorityOne(pod *v1.Pod, meta interface{}, nodeInfo *schedulernodeinfo.NodeInfo) (schedulerframework.NodeScore, error) {
return schedulerframework.NodeScore{}, nil
}
func PriorityTwo(pod *v1.Pod, meta interface{}, nodeInfo *schedulernodeinfo.NodeInfo) (schedulerframework.NodeScore, error) {
return schedulerframework.NodeScore{}, nil
}
// TestSchedulerCreationFromConfigMap verifies that scheduler can be created
// from configurations provided by a ConfigMap object and then verifies that the
// configuration is applied correctly.
@@ -84,39 +64,33 @@ func TestSchedulerCreationFromConfigMap(t *testing.T) {
defer clientSet.CoreV1().Nodes().DeleteCollection(nil, metav1.ListOptions{})
informerFactory := informers.NewSharedInformerFactory(clientSet, 0)
// Pre-register some predicate and priority functions
scheduler.RegisterFitPredicate("PredicateOne", PredicateOne)
scheduler.RegisterFitPredicate("PredicateTwo", PredicateTwo)
scheduler.RegisterPriorityMapReduceFunction("PriorityOne", PriorityOne, nil, 1)
scheduler.RegisterPriorityMapReduceFunction("PriorityTwo", PriorityTwo, nil, 1)
for i, test := range []struct {
policy string
expectedPredicates sets.String
expectedPlugins map[string][]kubeschedulerconfig.Plugin
policy string
expectedPlugins map[string][]kubeschedulerconfig.Plugin
}{
{
policy: `{
"kind" : "Policy",
"apiVersion" : "v1",
"predicates" : [
{"name" : "PredicateOne"},
{"name" : "PredicateTwo"}
{"name" : "PodFitsResources"}
],
"priorities" : [
{"name" : "PriorityOne", "weight" : 1},
{"name" : "PriorityTwo", "weight" : 5}
{"name" : "ImageLocalityPriority", "weight" : 1}
]
}`,
expectedPredicates: sets.NewString(
"PredicateOne",
"PredicateTwo",
),
expectedPlugins: map[string][]kubeschedulerconfig.Plugin{
"PreFilterPlugin": {
{Name: "NodeResourcesFit"},
},
"FilterPlugin": {
{Name: "NodeUnschedulable"},
{Name: "NodeResourcesFit"},
{Name: "TaintToleration"},
},
"ScorePlugin": {
{Name: "ImageLocality", Weight: 1},
},
},
},
{
@@ -169,7 +143,6 @@ func TestSchedulerCreationFromConfigMap(t *testing.T) {
"predicates" : [],
"priorities" : []
}`,
expectedPredicates: sets.NewString(),
expectedPlugins: map[string][]kubeschedulerconfig.Plugin{
"FilterPlugin": {
{Name: "NodeUnschedulable"},
@@ -181,23 +154,23 @@ func TestSchedulerCreationFromConfigMap(t *testing.T) {
policy: `apiVersion: v1
kind: Policy
predicates:
- name: PredicateOne
- name: PredicateTwo
- name: PodFitsResources
priorities:
- name: PriorityOne
- name: ImageLocalityPriority
weight: 1
- name: PriorityTwo
weight: 5
`,
expectedPredicates: sets.NewString(
"PredicateOne",
"PredicateTwo",
),
expectedPlugins: map[string][]kubeschedulerconfig.Plugin{
"PreFilterPlugin": {
{Name: "NodeResourcesFit"},
},
"FilterPlugin": {
{Name: "NodeUnschedulable"},
{Name: "NodeResourcesFit"},
{Name: "TaintToleration"},
},
"ScorePlugin": {
{Name: "ImageLocality", Weight: 1},
},
},
},
{
@@ -248,7 +221,6 @@ kind: Policy
predicates: []
priorities: []
`,
expectedPredicates: sets.NewString(),
expectedPlugins: map[string][]kubeschedulerconfig.Plugin{
"FilterPlugin": {
{Name: "NodeUnschedulable"},
@@ -291,20 +263,12 @@ priorities: []
scheduler.WithBindTimeoutSeconds(defaultBindTimeout),
)
if err != nil {
t.Fatalf("couldn't make scheduler config: %v", err)
t.Fatalf("couldn't make scheduler config for test %d: %v", i, err)
}
// Verify that the config is applied correctly.
schedPredicates := sets.NewString()
for k := range sched.Algorithm.Predicates() {
schedPredicates.Insert(k)
}
if !schedPredicates.Equal(test.expectedPredicates) {
t.Errorf("Expected predicates %v, got %v", test.expectedPredicates, schedPredicates)
}
schedPlugins := sched.Framework.ListPlugins()
if diff := cmp.Diff(test.expectedPlugins, schedPlugins); diff != "" {
t.Errorf("unexpected predicates diff (-want, +got): %s", diff)
t.Errorf("unexpected plugins diff (-want, +got): %s", diff)
}
}
}