Skip to content

Commit e0c483b

Browse files
authored
Merge pull request kubernetes#85150 from ahg-g/ahg-informer
Pass InformerFactory/SharedLister instead of individual informers/listers in scheduler config logic
2 parents 66e0ca8 + acc66ed commit e0c483b

File tree

7 files changed

+143
-241
lines changed

7 files changed

+143
-241
lines changed

pkg/scheduler/BUILD

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,8 @@ go_library(
4444
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
4545
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
4646
"//staging/src/k8s.io/client-go/informers:go_default_library",
47-
"//staging/src/k8s.io/client-go/informers/apps/v1:go_default_library",
4847
"//staging/src/k8s.io/client-go/informers/core/v1:go_default_library",
49-
"//staging/src/k8s.io/client-go/informers/policy/v1beta1:go_default_library",
50-
"//staging/src/k8s.io/client-go/informers/storage/v1:go_default_library",
5148
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
52-
"//staging/src/k8s.io/client-go/listers/apps/v1:go_default_library",
5349
"//staging/src/k8s.io/client-go/listers/core/v1:go_default_library",
5450
"//staging/src/k8s.io/client-go/listers/policy/v1beta1:go_default_library",
5551
"//staging/src/k8s.io/client-go/listers/storage/v1:go_default_library",
@@ -71,6 +67,7 @@ go_test(
7167
deps = [
7268
"//pkg/api/testing:go_default_library",
7369
"//pkg/controller/volume/scheduling:go_default_library",
70+
"//pkg/features:go_default_library",
7471
"//pkg/scheduler/algorithm:go_default_library",
7572
"//pkg/scheduler/algorithm/predicates:go_default_library",
7673
"//pkg/scheduler/algorithm/priorities:go_default_library",
@@ -99,6 +96,7 @@ go_test(
9996
"//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library",
10097
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
10198
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
99+
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
102100
"//staging/src/k8s.io/client-go/informers:go_default_library",
103101
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
104102
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",

pkg/scheduler/algorithm_factory.go

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,7 @@ import (
2525

2626
v1 "k8s.io/api/core/v1"
2727
"k8s.io/apimachinery/pkg/util/sets"
28-
appslisters "k8s.io/client-go/listers/apps/v1"
29-
corelisters "k8s.io/client-go/listers/core/v1"
30-
policylisters "k8s.io/client-go/listers/policy/v1beta1"
31-
storagelisters "k8s.io/client-go/listers/storage/v1"
28+
"k8s.io/client-go/informers"
3229
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
3330
"k8s.io/kubernetes/pkg/scheduler/algorithm/priorities"
3431
schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config"
@@ -45,17 +42,8 @@ import (
4542

4643
// PluginFactoryArgs are passed to all plugin factory functions.
4744
type PluginFactoryArgs struct {
48-
NodeInfoLister schedulerlisters.NodeInfoLister
49-
PodLister schedulerlisters.PodLister
50-
ServiceLister corelisters.ServiceLister
51-
ControllerLister corelisters.ReplicationControllerLister
52-
ReplicaSetLister appslisters.ReplicaSetLister
53-
StatefulSetLister appslisters.StatefulSetLister
54-
PDBLister policylisters.PodDisruptionBudgetLister
55-
CSINodeLister storagelisters.CSINodeLister
56-
PVLister corelisters.PersistentVolumeLister
57-
PVCLister corelisters.PersistentVolumeClaimLister
58-
StorageClassLister storagelisters.StorageClassLister
45+
SharedLister schedulerlisters.SharedLister
46+
InformerFactory informers.SharedInformerFactory
5947
VolumeBinder *volumebinder.VolumeBinder
6048
HardPodAffinitySymmetricWeight int32
6149
}
@@ -280,9 +268,9 @@ func RegisterCustomFitPredicate(policy schedulerapi.PredicatePolicy, pluginArgs
280268

281269
predicateFactory = func(args PluginFactoryArgs) predicates.FitPredicate {
282270
predicate, precomputationFunction := predicates.NewServiceAffinityPredicate(
283-
args.NodeInfoLister,
284-
args.PodLister,
285-
args.ServiceLister,
271+
args.SharedLister.NodeInfos(),
272+
args.SharedLister.Pods(),
273+
args.InformerFactory.Core().V1().Services().Lister(),
286274
pluginArgs.ServiceAffinityArgs.AffinityLabels,
287275
)
288276

@@ -404,8 +392,8 @@ func RegisterCustomPriorityFunction(policy schedulerapi.PriorityPolicy, configPr
404392
pcf = &PriorityConfigFactory{
405393
MapReduceFunction: func(args PluginFactoryArgs) (priorities.PriorityMapFunction, priorities.PriorityReduceFunction) {
406394
return priorities.NewServiceAntiAffinityPriority(
407-
args.PodLister,
408-
args.ServiceLister,
395+
args.SharedLister.Pods(),
396+
args.InformerFactory.Core().V1().Services().Lister(),
409397
configProducerArgs.ServiceAffinityArgs.AntiAffinityLabelsPreference,
410398
)
411399
},

pkg/scheduler/algorithmprovider/defaults/register_predicates.go

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,48 +55,71 @@ func init() {
5555
scheduler.RegisterFitPredicateFactory(
5656
predicates.NoVolumeZoneConflictPred,
5757
func(args scheduler.PluginFactoryArgs) predicates.FitPredicate {
58-
return predicates.NewVolumeZonePredicate(args.PVLister, args.PVCLister, args.StorageClassLister)
58+
pvLister := args.InformerFactory.Core().V1().PersistentVolumes().Lister()
59+
pvcLister := args.InformerFactory.Core().V1().PersistentVolumeClaims().Lister()
60+
storageClassLister := args.InformerFactory.Storage().V1().StorageClasses().Lister()
61+
return predicates.NewVolumeZonePredicate(pvLister, pvcLister, storageClassLister)
5962
},
6063
)
6164
// Fit is determined by whether or not there would be too many AWS EBS volumes attached to the node
6265
scheduler.RegisterFitPredicateFactory(
6366
predicates.MaxEBSVolumeCountPred,
6467
func(args scheduler.PluginFactoryArgs) predicates.FitPredicate {
65-
return predicates.NewMaxPDVolumeCountPredicate(predicates.EBSVolumeFilterType, args.CSINodeLister, args.StorageClassLister, args.PVLister, args.PVCLister)
68+
csiNodeLister := scheduler.GetCSINodeLister(args.InformerFactory)
69+
pvLister := args.InformerFactory.Core().V1().PersistentVolumes().Lister()
70+
pvcLister := args.InformerFactory.Core().V1().PersistentVolumeClaims().Lister()
71+
storageClassLister := args.InformerFactory.Storage().V1().StorageClasses().Lister()
72+
return predicates.NewMaxPDVolumeCountPredicate(predicates.EBSVolumeFilterType, csiNodeLister, storageClassLister, pvLister, pvcLister)
6673
},
6774
)
6875
// Fit is determined by whether or not there would be too many GCE PD volumes attached to the node
6976
scheduler.RegisterFitPredicateFactory(
7077
predicates.MaxGCEPDVolumeCountPred,
7178
func(args scheduler.PluginFactoryArgs) predicates.FitPredicate {
72-
return predicates.NewMaxPDVolumeCountPredicate(predicates.GCEPDVolumeFilterType, args.CSINodeLister, args.StorageClassLister, args.PVLister, args.PVCLister)
79+
csiNodeLister := scheduler.GetCSINodeLister(args.InformerFactory)
80+
pvLister := args.InformerFactory.Core().V1().PersistentVolumes().Lister()
81+
pvcLister := args.InformerFactory.Core().V1().PersistentVolumeClaims().Lister()
82+
storageClassLister := args.InformerFactory.Storage().V1().StorageClasses().Lister()
83+
return predicates.NewMaxPDVolumeCountPredicate(predicates.GCEPDVolumeFilterType, csiNodeLister, storageClassLister, pvLister, pvcLister)
7384
},
7485
)
7586
// Fit is determined by whether or not there would be too many Azure Disk volumes attached to the node
7687
scheduler.RegisterFitPredicateFactory(
7788
predicates.MaxAzureDiskVolumeCountPred,
7889
func(args scheduler.PluginFactoryArgs) predicates.FitPredicate {
79-
return predicates.NewMaxPDVolumeCountPredicate(predicates.AzureDiskVolumeFilterType, args.CSINodeLister, args.StorageClassLister, args.PVLister, args.PVCLister)
90+
csiNodeLister := scheduler.GetCSINodeLister(args.InformerFactory)
91+
pvLister := args.InformerFactory.Core().V1().PersistentVolumes().Lister()
92+
pvcLister := args.InformerFactory.Core().V1().PersistentVolumeClaims().Lister()
93+
storageClassLister := args.InformerFactory.Storage().V1().StorageClasses().Lister()
94+
return predicates.NewMaxPDVolumeCountPredicate(predicates.AzureDiskVolumeFilterType, csiNodeLister, storageClassLister, pvLister, pvcLister)
8095
},
8196
)
8297
scheduler.RegisterFitPredicateFactory(
8398
predicates.MaxCSIVolumeCountPred,
8499
func(args scheduler.PluginFactoryArgs) predicates.FitPredicate {
85-
return predicates.NewCSIMaxVolumeLimitPredicate(args.CSINodeLister, args.PVLister, args.PVCLister, args.StorageClassLister)
100+
csiNodeLister := scheduler.GetCSINodeLister(args.InformerFactory)
101+
pvLister := args.InformerFactory.Core().V1().PersistentVolumes().Lister()
102+
pvcLister := args.InformerFactory.Core().V1().PersistentVolumeClaims().Lister()
103+
storageClassLister := args.InformerFactory.Storage().V1().StorageClasses().Lister()
104+
return predicates.NewCSIMaxVolumeLimitPredicate(csiNodeLister, pvLister, pvcLister, storageClassLister)
86105
},
87106
)
88107
scheduler.RegisterFitPredicateFactory(
89108
predicates.MaxCinderVolumeCountPred,
90109
func(args scheduler.PluginFactoryArgs) predicates.FitPredicate {
91-
return predicates.NewMaxPDVolumeCountPredicate(predicates.CinderVolumeFilterType, args.CSINodeLister, args.StorageClassLister, args.PVLister, args.PVCLister)
110+
csiNodeLister := scheduler.GetCSINodeLister(args.InformerFactory)
111+
pvLister := args.InformerFactory.Core().V1().PersistentVolumes().Lister()
112+
pvcLister := args.InformerFactory.Core().V1().PersistentVolumeClaims().Lister()
113+
storageClassLister := args.InformerFactory.Storage().V1().StorageClasses().Lister()
114+
return predicates.NewMaxPDVolumeCountPredicate(predicates.CinderVolumeFilterType, csiNodeLister, storageClassLister, pvLister, pvcLister)
92115
},
93116
)
94117

95118
// Fit is determined by inter-pod affinity.
96119
scheduler.RegisterFitPredicateFactory(
97120
predicates.MatchInterPodAffinityPred,
98121
func(args scheduler.PluginFactoryArgs) predicates.FitPredicate {
99-
return predicates.NewPodAffinityPredicate(args.NodeInfoLister, args.PodLister)
122+
return predicates.NewPodAffinityPredicate(args.SharedLister.NodeInfos(), args.SharedLister.Pods())
100123
},
101124
)
102125

pkg/scheduler/algorithmprovider/defaults/register_priorities.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,11 @@ func init() {
2626
// Register functions that extract metadata used by priorities computations.
2727
scheduler.RegisterPriorityMetadataProducerFactory(
2828
func(args scheduler.PluginFactoryArgs) priorities.MetadataProducer {
29-
return priorities.NewMetadataFactory(args.ServiceLister, args.ControllerLister, args.ReplicaSetLister, args.StatefulSetLister, args.HardPodAffinitySymmetricWeight)
29+
serviceLister := args.InformerFactory.Core().V1().Services().Lister()
30+
controllerLister := args.InformerFactory.Core().V1().ReplicationControllers().Lister()
31+
replicaSetLister := args.InformerFactory.Apps().V1().ReplicaSets().Lister()
32+
statefulSetLister := args.InformerFactory.Apps().V1().StatefulSets().Lister()
33+
return priorities.NewMetadataFactory(serviceLister, controllerLister, replicaSetLister, statefulSetLister, args.HardPodAffinitySymmetricWeight)
3034
})
3135

3236
// ServiceSpreadingPriority is a priority config factory that spreads pods by minimizing
@@ -37,7 +41,8 @@ func init() {
3741
priorities.ServiceSpreadingPriority,
3842
scheduler.PriorityConfigFactory{
3943
MapReduceFunction: func(args scheduler.PluginFactoryArgs) (priorities.PriorityMapFunction, priorities.PriorityReduceFunction) {
40-
return priorities.NewSelectorSpreadPriority(args.ServiceLister, algorithm.EmptyControllerLister{}, algorithm.EmptyReplicaSetLister{}, algorithm.EmptyStatefulSetLister{})
44+
serviceLister := args.InformerFactory.Core().V1().Services().Lister()
45+
return priorities.NewSelectorSpreadPriority(serviceLister, algorithm.EmptyControllerLister{}, algorithm.EmptyReplicaSetLister{}, algorithm.EmptyStatefulSetLister{})
4146
},
4247
Weight: 1,
4348
},
@@ -54,7 +59,11 @@ func init() {
5459
priorities.SelectorSpreadPriority,
5560
scheduler.PriorityConfigFactory{
5661
MapReduceFunction: func(args scheduler.PluginFactoryArgs) (priorities.PriorityMapFunction, priorities.PriorityReduceFunction) {
57-
return priorities.NewSelectorSpreadPriority(args.ServiceLister, args.ControllerLister, args.ReplicaSetLister, args.StatefulSetLister)
62+
serviceLister := args.InformerFactory.Core().V1().Services().Lister()
63+
controllerLister := args.InformerFactory.Core().V1().ReplicationControllers().Lister()
64+
replicaSetLister := args.InformerFactory.Apps().V1().ReplicaSets().Lister()
65+
statefulSetLister := args.InformerFactory.Apps().V1().StatefulSets().Lister()
66+
return priorities.NewSelectorSpreadPriority(serviceLister, controllerLister, replicaSetLister, statefulSetLister)
5867
},
5968
Weight: 1,
6069
},

0 commit comments

Comments
 (0)