diff --git a/pkg/scheduler/framework/plugins/BUILD b/pkg/scheduler/framework/plugins/BUILD index 36d44d0bca0..ec930a4900f 100644 --- a/pkg/scheduler/framework/plugins/BUILD +++ b/pkg/scheduler/framework/plugins/BUILD @@ -6,7 +6,6 @@ go_library( importpath = "k8s.io/kubernetes/pkg/scheduler/framework/plugins", visibility = ["//visibility:public"], deps = [ - "//pkg/scheduler/algorithm:go_default_library", "//pkg/scheduler/algorithm/predicates:go_default_library", "//pkg/scheduler/algorithm/priorities:go_default_library", "//pkg/scheduler/apis/config:go_default_library", @@ -26,8 +25,6 @@ go_library( "//pkg/scheduler/internal/cache:go_default_library", "//pkg/scheduler/volumebinder:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", - "//staging/src/k8s.io/client-go/listers/core/v1:go_default_library", - "//staging/src/k8s.io/client-go/listers/storage/v1:go_default_library", ], ) diff --git a/pkg/scheduler/framework/plugins/default_registry.go b/pkg/scheduler/framework/plugins/default_registry.go index 329d8358376..d3466404aef 100644 --- a/pkg/scheduler/framework/plugins/default_registry.go +++ b/pkg/scheduler/framework/plugins/default_registry.go @@ -20,9 +20,6 @@ import ( "fmt" "k8s.io/apimachinery/pkg/runtime" - corelisters "k8s.io/client-go/listers/core/v1" - storagelistersv1 "k8s.io/client-go/listers/storage/v1" - "k8s.io/kubernetes/pkg/scheduler/algorithm" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities" "k8s.io/kubernetes/pkg/scheduler/apis/config" @@ -45,26 +42,14 @@ import ( // RegistryArgs arguments needed to create default plugin factories. type RegistryArgs struct { - SchedulerCache internalcache.Cache - ServiceLister algorithm.ServiceLister - ControllerLister algorithm.ControllerLister - ReplicaSetLister algorithm.ReplicaSetLister - StatefulSetLister algorithm.StatefulSetLister - PDBLister algorithm.PDBLister - PVLister corelisters.PersistentVolumeLister - PVCLister corelisters.PersistentVolumeClaimLister - StorageClassLister storagelistersv1.StorageClassLister - VolumeBinder *volumebinder.VolumeBinder + SchedulerCache internalcache.Cache + VolumeBinder *volumebinder.VolumeBinder } // NewDefaultRegistry builds a default registry with all the default plugins. // This is the registry that Kubernetes default scheduler uses. A scheduler that // runs custom plugins, can pass a different Registry when initializing the scheduler. func NewDefaultRegistry(args *RegistryArgs) framework.Registry { - pvInfo := &predicates.CachedPersistentVolumeInfo{PersistentVolumeLister: args.PVLister} - pvcInfo := &predicates.CachedPersistentVolumeClaimInfo{PersistentVolumeClaimLister: args.PVCLister} - classInfo := &predicates.CachedStorageClassInfo{StorageClassLister: args.StorageClassLister} - return framework.Registry{ imagelocality.Name: imagelocality.New, tainttoleration.Name: tainttoleration.New, @@ -77,12 +62,8 @@ func NewDefaultRegistry(args *RegistryArgs) framework.Registry { return volumebinding.NewFromVolumeBinder(args.VolumeBinder), nil }, volumerestrictions.Name: volumerestrictions.New, - volumezone.Name: func(_ *runtime.Unknown, _ framework.FrameworkHandle) (framework.Plugin, error) { - return volumezone.New(pvInfo, pvcInfo, classInfo), nil - }, - nodevolumelimits.Name: func(_ *runtime.Unknown, _ framework.FrameworkHandle) (framework.Plugin, error) { - return nodevolumelimits.New(args.SchedulerCache, pvInfo, pvcInfo, classInfo), nil - }, + volumezone.Name: volumezone.New, + nodevolumelimits.Name: nodevolumelimits.New(args.SchedulerCache), interpodaffinity.Name: func(_ *runtime.Unknown, _ framework.FrameworkHandle) (framework.Plugin, error) { return interpodaffinity.New(args.SchedulerCache, args.SchedulerCache), nil }, diff --git a/pkg/scheduler/framework/plugins/nodevolumelimits/BUILD b/pkg/scheduler/framework/plugins/nodevolumelimits/BUILD index d7ab9646909..ff98cbe4827 100644 --- a/pkg/scheduler/framework/plugins/nodevolumelimits/BUILD +++ b/pkg/scheduler/framework/plugins/nodevolumelimits/BUILD @@ -11,6 +11,7 @@ go_library( "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/nodeinfo:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", ], ) diff --git a/pkg/scheduler/framework/plugins/nodevolumelimits/node_volume_limits.go b/pkg/scheduler/framework/plugins/nodevolumelimits/node_volume_limits.go index 37181c404b6..f2c1747e729 100644 --- a/pkg/scheduler/framework/plugins/nodevolumelimits/node_volume_limits.go +++ b/pkg/scheduler/framework/plugins/nodevolumelimits/node_volume_limits.go @@ -20,6 +20,7 @@ import ( "context" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/migration" framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" @@ -48,9 +49,21 @@ func (pl *NodeVolumeLimits) Filter(ctx context.Context, _ *framework.CycleState, return migration.PredicateResultToFrameworkStatus(reasons, err) } -// New initializes a new plugin and returns it. -func New(csiNodeInfo predicates.CSINodeInfo, pvInfo predicates.PersistentVolumeInfo, pvcInfo predicates.PersistentVolumeClaimInfo, classInfo predicates.StorageClassInfo) framework.Plugin { - return &NodeVolumeLimits{ - predicate: predicates.NewCSIMaxVolumeLimitPredicate(csiNodeInfo, pvInfo, pvcInfo, classInfo), +// New returns function that initializes a new plugin and returns it. +func New(csiNodeInfo predicates.CSINodeInfo) framework.PluginFactory { + return func(_ *runtime.Unknown, handle framework.FrameworkHandle) (framework.Plugin, error) { + informerFactory := handle.SharedInformerFactory() + pvInfo := &predicates.CachedPersistentVolumeInfo{ + PersistentVolumeLister: informerFactory.Core().V1().PersistentVolumes().Lister(), + } + pvcInfo := &predicates.CachedPersistentVolumeClaimInfo{ + PersistentVolumeClaimLister: informerFactory.Core().V1().PersistentVolumeClaims().Lister(), + } + classInfo := &predicates.CachedStorageClassInfo{ + StorageClassLister: informerFactory.Storage().V1().StorageClasses().Lister(), + } + return &NodeVolumeLimits{ + predicate: predicates.NewCSIMaxVolumeLimitPredicate(csiNodeInfo, pvInfo, pvcInfo, classInfo), + }, nil } } diff --git a/pkg/scheduler/framework/plugins/nodevolumelimits/node_volume_limits_test.go b/pkg/scheduler/framework/plugins/nodevolumelimits/node_volume_limits_test.go index 173b855d1f1..970d6e98e58 100644 --- a/pkg/scheduler/framework/plugins/nodevolumelimits/node_volume_limits_test.go +++ b/pkg/scheduler/framework/plugins/nodevolumelimits/node_volume_limits_test.go @@ -444,11 +444,10 @@ func TestNodeVolumeLimits(t *testing.T) { defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.CSIMigrationAWS, false)() } - p := New(getFakeCSINodeInfo(csiNode), - getFakeCSIPVInfo(test.filterName, test.driverNames...), - getFakeCSIPVCInfo(test.filterName, "csi-sc", test.driverNames...), - getFakeCSIStorageClassInfo("csi-sc", test.driverNames[0])) - gotStatus := p.(framework.FilterPlugin).Filter(context.Background(), nil, test.newPod, node) + p := &NodeVolumeLimits{ + predicate: predicates.NewCSIMaxVolumeLimitPredicate(getFakeCSINodeInfo(csiNode), getFakeCSIPVInfo(test.filterName, test.driverNames...), getFakeCSIPVCInfo(test.filterName, "csi-sc", test.driverNames...), getFakeCSIStorageClassInfo("csi-sc", test.driverNames[0])), + } + gotStatus := p.Filter(context.Background(), nil, test.newPod, node) if !reflect.DeepEqual(gotStatus, test.wantStatus) { t.Errorf("status does not match: %v, want: %v", gotStatus, test.wantStatus) } diff --git a/pkg/scheduler/framework/plugins/volumezone/BUILD b/pkg/scheduler/framework/plugins/volumezone/BUILD index 709809c0e38..68b3907e76b 100644 --- a/pkg/scheduler/framework/plugins/volumezone/BUILD +++ b/pkg/scheduler/framework/plugins/volumezone/BUILD @@ -11,6 +11,7 @@ go_library( "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/nodeinfo:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", ], ) diff --git a/pkg/scheduler/framework/plugins/volumezone/volume_zone.go b/pkg/scheduler/framework/plugins/volumezone/volume_zone.go index 22b511bd641..c07e937a844 100644 --- a/pkg/scheduler/framework/plugins/volumezone/volume_zone.go +++ b/pkg/scheduler/framework/plugins/volumezone/volume_zone.go @@ -20,6 +20,7 @@ import ( "context" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/migration" framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" @@ -49,8 +50,18 @@ func (pl *VolumeZone) Filter(ctx context.Context, _ *framework.CycleState, pod * } // New initializes a new plugin and returns it. -func New(pvInfo predicates.PersistentVolumeInfo, pvcInfo predicates.PersistentVolumeClaimInfo, classInfo predicates.StorageClassInfo) framework.Plugin { +func New(_ *runtime.Unknown, handle framework.FrameworkHandle) (framework.Plugin, error) { + informerFactory := handle.SharedInformerFactory() + pvInfo := &predicates.CachedPersistentVolumeInfo{ + PersistentVolumeLister: informerFactory.Core().V1().PersistentVolumes().Lister(), + } + pvcInfo := &predicates.CachedPersistentVolumeClaimInfo{ + PersistentVolumeClaimLister: informerFactory.Core().V1().PersistentVolumeClaims().Lister(), + } + classInfo := &predicates.CachedStorageClassInfo{ + StorageClassLister: informerFactory.Storage().V1().StorageClasses().Lister(), + } return &VolumeZone{ predicate: predicates.NewVolumeZonePredicate(pvInfo, pvcInfo, classInfo), - } + }, nil } diff --git a/pkg/scheduler/framework/plugins/volumezone/volume_zone_test.go b/pkg/scheduler/framework/plugins/volumezone/volume_zone_test.go index 20119317877..6347824b01e 100644 --- a/pkg/scheduler/framework/plugins/volumezone/volume_zone_test.go +++ b/pkg/scheduler/framework/plugins/volumezone/volume_zone_test.go @@ -154,8 +154,10 @@ func TestSingleZone(t *testing.T) { t.Run(test.name, func(t *testing.T) { node := &schedulernodeinfo.NodeInfo{} node.SetNode(test.Node) - p := New(pvInfo, pvcInfo, nil) - gotStatus := p.(framework.FilterPlugin).Filter(context.Background(), nil, test.Pod, node) + p := &VolumeZone{ + predicate: predicates.NewVolumeZonePredicate(pvInfo, pvcInfo, nil), + } + gotStatus := p.Filter(context.Background(), nil, test.Pod, node) if !reflect.DeepEqual(gotStatus, test.wantStatus) { t.Errorf("status does not match: %v, want: %v", gotStatus, test.wantStatus) } @@ -237,8 +239,10 @@ func TestMultiZone(t *testing.T) { t.Run(test.name, func(t *testing.T) { node := &schedulernodeinfo.NodeInfo{} node.SetNode(test.Node) - p := New(pvInfo, pvcInfo, nil) - gotStatus := p.(framework.FilterPlugin).Filter(context.Background(), nil, test.Pod, node) + p := &VolumeZone{ + predicate: predicates.NewVolumeZonePredicate(pvInfo, pvcInfo, nil), + } + gotStatus := p.Filter(context.Background(), nil, test.Pod, node) if !reflect.DeepEqual(gotStatus, test.wantStatus) { t.Errorf("status does not match: %v, want: %v", gotStatus, test.wantStatus) } @@ -340,8 +344,10 @@ func TestWithBinding(t *testing.T) { t.Run(test.name, func(t *testing.T) { node := &schedulernodeinfo.NodeInfo{} node.SetNode(test.Node) - p := New(pvInfo, pvcInfo, classInfo) - gotStatus := p.(framework.FilterPlugin).Filter(context.Background(), nil, test.Pod, node) + p := &VolumeZone{ + predicate: predicates.NewVolumeZonePredicate(pvInfo, pvcInfo, classInfo), + } + gotStatus := p.Filter(context.Background(), nil, test.Pod, node) if !reflect.DeepEqual(gotStatus, test.wantStatus) { t.Errorf("status does not match: %v, want: %v", gotStatus, test.wantStatus) } diff --git a/pkg/scheduler/scheduler.go b/pkg/scheduler/scheduler.go index aa74e6070f2..0c0a19b9d10 100644 --- a/pkg/scheduler/scheduler.go +++ b/pkg/scheduler/scheduler.go @@ -274,16 +274,8 @@ func New(client clientset.Interface, registry := options.frameworkDefaultRegistry if registry == nil { registry = frameworkplugins.NewDefaultRegistry(&frameworkplugins.RegistryArgs{ - SchedulerCache: schedulerCache, - ServiceLister: informerFactory.Core().V1().Services().Lister(), - ControllerLister: informerFactory.Core().V1().ReplicationControllers().Lister(), - ReplicaSetLister: informerFactory.Apps().V1().ReplicaSets().Lister(), - StatefulSetLister: informerFactory.Apps().V1().StatefulSets().Lister(), - PDBLister: informerFactory.Policy().V1beta1().PodDisruptionBudgets().Lister(), - PVLister: informerFactory.Core().V1().PersistentVolumes().Lister(), - PVCLister: informerFactory.Core().V1().PersistentVolumeClaims().Lister(), - StorageClassLister: informerFactory.Storage().V1().StorageClasses().Lister(), - VolumeBinder: volumeBinder, + SchedulerCache: schedulerCache, + VolumeBinder: volumeBinder, }) } registry.Merge(options.frameworkOutOfTreeRegistry)