in pkg/client/apifactory.go [83:138]
func NewAPIFactory(scheduler api.SchedulerAPI, informerFactory informers.SharedInformerFactory, configs *conf.SchedulerConf, testMode bool) *APIFactory {
kubeClient := NewKubeClient(configs.KubeConfig)
// init informers
// volume informers are also used to get the Listers for the predicates
nodeInformer := informerFactory.Core().V1().Nodes()
podInformer := informerFactory.Core().V1().Pods()
configMapInformer := informerFactory.Core().V1().ConfigMaps()
storageInformer := informerFactory.Storage().V1().StorageClasses()
csiNodeInformer := informerFactory.Storage().V1().CSINodes()
pvInformer := informerFactory.Core().V1().PersistentVolumes()
pvcInformer := informerFactory.Core().V1().PersistentVolumeClaims()
namespaceInformer := informerFactory.Core().V1().Namespaces()
priorityClassInformer := informerFactory.Scheduling().V1().PriorityClasses()
var capacityCheck volumebinding.CapacityCheck
if utilfeature.DefaultFeatureGate.Enabled(features.CSIStorageCapacity) {
capacityCheck = volumebinding.CapacityCheck{
CSIDriverInformer: informerFactory.Storage().V1().CSIDrivers(),
CSIStorageCapacityInformer: informerFactory.Storage().V1().CSIStorageCapacities(),
}
}
// create a volume binder (needs the informers)
volumeBinder := volumebinding.NewVolumeBinder(
kubeClient.GetClientSet(),
podInformer,
nodeInformer,
csiNodeInformer,
pvcInformer,
pvInformer,
storageInformer,
capacityCheck,
configs.VolumeBindTimeout)
return &APIFactory{
clients: &Clients{
conf: configs,
KubeClient: kubeClient,
SchedulerAPI: scheduler,
InformerFactory: informerFactory,
PodInformer: podInformer,
NodeInformer: nodeInformer,
ConfigMapInformer: configMapInformer,
PVInformer: pvInformer,
PVCInformer: pvcInformer,
NamespaceInformer: namespaceInformer,
StorageInformer: storageInformer,
PriorityClassInformer: priorityClassInformer,
VolumeBinder: volumeBinder,
},
testMode: testMode,
stopChan: make(chan struct{}),
lock: &sync.RWMutex{},
}
}