mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-30 06:54:01 +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",
|
importpath = "k8s.io/kubernetes/pkg/scheduler/framework/plugins",
|
||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
deps = [
|
deps = [
|
||||||
"//pkg/scheduler/algorithm:go_default_library",
|
|
||||||
"//pkg/scheduler/algorithm/predicates:go_default_library",
|
"//pkg/scheduler/algorithm/predicates:go_default_library",
|
||||||
"//pkg/scheduler/algorithm/priorities:go_default_library",
|
"//pkg/scheduler/algorithm/priorities:go_default_library",
|
||||||
"//pkg/scheduler/apis/config: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/internal/cache:go_default_library",
|
||||||
"//pkg/scheduler/volumebinder:go_default_library",
|
"//pkg/scheduler/volumebinder:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/runtime: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"
|
"fmt"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"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/predicates"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm/priorities"
|
"k8s.io/kubernetes/pkg/scheduler/algorithm/priorities"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/apis/config"
|
"k8s.io/kubernetes/pkg/scheduler/apis/config"
|
||||||
@ -45,26 +42,14 @@ import (
|
|||||||
|
|
||||||
// RegistryArgs arguments needed to create default plugin factories.
|
// RegistryArgs arguments needed to create default plugin factories.
|
||||||
type RegistryArgs struct {
|
type RegistryArgs struct {
|
||||||
SchedulerCache internalcache.Cache
|
SchedulerCache internalcache.Cache
|
||||||
ServiceLister algorithm.ServiceLister
|
VolumeBinder *volumebinder.VolumeBinder
|
||||||
ControllerLister algorithm.ControllerLister
|
|
||||||
ReplicaSetLister algorithm.ReplicaSetLister
|
|
||||||
StatefulSetLister algorithm.StatefulSetLister
|
|
||||||
PDBLister algorithm.PDBLister
|
|
||||||
PVLister corelisters.PersistentVolumeLister
|
|
||||||
PVCLister corelisters.PersistentVolumeClaimLister
|
|
||||||
StorageClassLister storagelistersv1.StorageClassLister
|
|
||||||
VolumeBinder *volumebinder.VolumeBinder
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewDefaultRegistry builds a default registry with all the default plugins.
|
// NewDefaultRegistry builds a default registry with all the default plugins.
|
||||||
// This is the registry that Kubernetes default scheduler uses. A scheduler that
|
// This is the registry that Kubernetes default scheduler uses. A scheduler that
|
||||||
// runs custom plugins, can pass a different Registry when initializing the scheduler.
|
// runs custom plugins, can pass a different Registry when initializing the scheduler.
|
||||||
func NewDefaultRegistry(args *RegistryArgs) framework.Registry {
|
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{
|
return framework.Registry{
|
||||||
imagelocality.Name: imagelocality.New,
|
imagelocality.Name: imagelocality.New,
|
||||||
tainttoleration.Name: tainttoleration.New,
|
tainttoleration.Name: tainttoleration.New,
|
||||||
@ -77,12 +62,8 @@ func NewDefaultRegistry(args *RegistryArgs) framework.Registry {
|
|||||||
return volumebinding.NewFromVolumeBinder(args.VolumeBinder), nil
|
return volumebinding.NewFromVolumeBinder(args.VolumeBinder), nil
|
||||||
},
|
},
|
||||||
volumerestrictions.Name: volumerestrictions.New,
|
volumerestrictions.Name: volumerestrictions.New,
|
||||||
volumezone.Name: func(_ *runtime.Unknown, _ framework.FrameworkHandle) (framework.Plugin, error) {
|
volumezone.Name: volumezone.New,
|
||||||
return volumezone.New(pvInfo, pvcInfo, classInfo), nil
|
nodevolumelimits.Name: nodevolumelimits.New(args.SchedulerCache),
|
||||||
},
|
|
||||||
nodevolumelimits.Name: func(_ *runtime.Unknown, _ framework.FrameworkHandle) (framework.Plugin, error) {
|
|
||||||
return nodevolumelimits.New(args.SchedulerCache, pvInfo, pvcInfo, classInfo), nil
|
|
||||||
},
|
|
||||||
interpodaffinity.Name: func(_ *runtime.Unknown, _ framework.FrameworkHandle) (framework.Plugin, error) {
|
interpodaffinity.Name: func(_ *runtime.Unknown, _ framework.FrameworkHandle) (framework.Plugin, error) {
|
||||||
return interpodaffinity.New(args.SchedulerCache, args.SchedulerCache), nil
|
return interpodaffinity.New(args.SchedulerCache, args.SchedulerCache), nil
|
||||||
},
|
},
|
||||||
|
@ -11,6 +11,7 @@ go_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",
|
||||||
|
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
|
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
|
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/migration"
|
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/migration"
|
||||||
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
|
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)
|
return migration.PredicateResultToFrameworkStatus(reasons, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// New initializes a new plugin and returns it.
|
// New returns function that initializes a new plugin and returns it.
|
||||||
func New(csiNodeInfo predicates.CSINodeInfo, pvInfo predicates.PersistentVolumeInfo, pvcInfo predicates.PersistentVolumeClaimInfo, classInfo predicates.StorageClassInfo) framework.Plugin {
|
func New(csiNodeInfo predicates.CSINodeInfo) framework.PluginFactory {
|
||||||
return &NodeVolumeLimits{
|
return func(_ *runtime.Unknown, handle framework.FrameworkHandle) (framework.Plugin, error) {
|
||||||
predicate: predicates.NewCSIMaxVolumeLimitPredicate(csiNodeInfo, pvInfo, pvcInfo, classInfo),
|
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)()
|
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.CSIMigrationAWS, false)()
|
||||||
}
|
}
|
||||||
|
|
||||||
p := New(getFakeCSINodeInfo(csiNode),
|
p := &NodeVolumeLimits{
|
||||||
getFakeCSIPVInfo(test.filterName, test.driverNames...),
|
predicate: predicates.NewCSIMaxVolumeLimitPredicate(getFakeCSINodeInfo(csiNode), getFakeCSIPVInfo(test.filterName, test.driverNames...), getFakeCSIPVCInfo(test.filterName, "csi-sc", test.driverNames...), getFakeCSIStorageClassInfo("csi-sc", test.driverNames[0])),
|
||||||
getFakeCSIPVCInfo(test.filterName, "csi-sc", test.driverNames...),
|
}
|
||||||
getFakeCSIStorageClassInfo("csi-sc", test.driverNames[0]))
|
gotStatus := p.Filter(context.Background(), nil, test.newPod, node)
|
||||||
gotStatus := p.(framework.FilterPlugin).Filter(context.Background(), nil, test.newPod, node)
|
|
||||||
if !reflect.DeepEqual(gotStatus, test.wantStatus) {
|
if !reflect.DeepEqual(gotStatus, test.wantStatus) {
|
||||||
t.Errorf("status does not match: %v, want: %v", 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/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",
|
||||||
|
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
|
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
|
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/migration"
|
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/migration"
|
||||||
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
|
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.
|
// 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{
|
return &VolumeZone{
|
||||||
predicate: predicates.NewVolumeZonePredicate(pvInfo, pvcInfo, classInfo),
|
predicate: predicates.NewVolumeZonePredicate(pvInfo, pvcInfo, classInfo),
|
||||||
}
|
}, nil
|
||||||
}
|
}
|
||||||
|
@ -154,8 +154,10 @@ func TestSingleZone(t *testing.T) {
|
|||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
node := &schedulernodeinfo.NodeInfo{}
|
node := &schedulernodeinfo.NodeInfo{}
|
||||||
node.SetNode(test.Node)
|
node.SetNode(test.Node)
|
||||||
p := New(pvInfo, pvcInfo, nil)
|
p := &VolumeZone{
|
||||||
gotStatus := p.(framework.FilterPlugin).Filter(context.Background(), nil, test.Pod, node)
|
predicate: predicates.NewVolumeZonePredicate(pvInfo, pvcInfo, nil),
|
||||||
|
}
|
||||||
|
gotStatus := p.Filter(context.Background(), nil, test.Pod, node)
|
||||||
if !reflect.DeepEqual(gotStatus, test.wantStatus) {
|
if !reflect.DeepEqual(gotStatus, test.wantStatus) {
|
||||||
t.Errorf("status does not match: %v, want: %v", 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) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
node := &schedulernodeinfo.NodeInfo{}
|
node := &schedulernodeinfo.NodeInfo{}
|
||||||
node.SetNode(test.Node)
|
node.SetNode(test.Node)
|
||||||
p := New(pvInfo, pvcInfo, nil)
|
p := &VolumeZone{
|
||||||
gotStatus := p.(framework.FilterPlugin).Filter(context.Background(), nil, test.Pod, node)
|
predicate: predicates.NewVolumeZonePredicate(pvInfo, pvcInfo, nil),
|
||||||
|
}
|
||||||
|
gotStatus := p.Filter(context.Background(), nil, test.Pod, node)
|
||||||
if !reflect.DeepEqual(gotStatus, test.wantStatus) {
|
if !reflect.DeepEqual(gotStatus, test.wantStatus) {
|
||||||
t.Errorf("status does not match: %v, want: %v", 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) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
node := &schedulernodeinfo.NodeInfo{}
|
node := &schedulernodeinfo.NodeInfo{}
|
||||||
node.SetNode(test.Node)
|
node.SetNode(test.Node)
|
||||||
p := New(pvInfo, pvcInfo, classInfo)
|
p := &VolumeZone{
|
||||||
gotStatus := p.(framework.FilterPlugin).Filter(context.Background(), nil, test.Pod, node)
|
predicate: predicates.NewVolumeZonePredicate(pvInfo, pvcInfo, classInfo),
|
||||||
|
}
|
||||||
|
gotStatus := p.Filter(context.Background(), nil, test.Pod, node)
|
||||||
if !reflect.DeepEqual(gotStatus, test.wantStatus) {
|
if !reflect.DeepEqual(gotStatus, test.wantStatus) {
|
||||||
t.Errorf("status does not match: %v, want: %v", 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
|
registry := options.frameworkDefaultRegistry
|
||||||
if registry == nil {
|
if registry == nil {
|
||||||
registry = frameworkplugins.NewDefaultRegistry(&frameworkplugins.RegistryArgs{
|
registry = frameworkplugins.NewDefaultRegistry(&frameworkplugins.RegistryArgs{
|
||||||
SchedulerCache: schedulerCache,
|
SchedulerCache: schedulerCache,
|
||||||
ServiceLister: informerFactory.Core().V1().Services().Lister(),
|
VolumeBinder: volumeBinder,
|
||||||
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,
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
registry.Merge(options.frameworkOutOfTreeRegistry)
|
registry.Merge(options.frameworkOutOfTreeRegistry)
|
||||||
|
Loading…
Reference in New Issue
Block a user