mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 04:06:03 +00:00
Use frameworkHandle to get listers
This commit is contained in:
parent
54a30700a3
commit
bf256bcb00
@ -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",
|
||||
],
|
||||
)
|
||||
|
||||
|
@ -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
|
||||
},
|
||||
|
@ -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",
|
||||
],
|
||||
)
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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",
|
||||
],
|
||||
)
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user