in pkg/client/apifactory.go [92:159]
func NewAPIFactory(scheduler api.SchedulerAPI, informerFactory informers.SharedInformerFactory, configs *conf.SchedulerConf, testMode bool) *APIFactory {
kubeClient := NewKubeClient(configs.KubeConfig)
namespaceInformerFactory := informers.NewSharedInformerFactoryWithOptions(kubeClient.GetClientSet(), 0, informers.WithNamespace(configs.Namespace))
// init informers
// volume informers are also used to get the Listers for the predicates
podInformer := informerFactory.Core().V1().Pods()
nodeInformer := informerFactory.Core().V1().Nodes()
configMapInformer := namespaceInformerFactory.Core().V1().ConfigMaps()
pvInformer := informerFactory.Core().V1().PersistentVolumes()
pvcInformer := informerFactory.Core().V1().PersistentVolumeClaims()
storageInformer := informerFactory.Storage().V1().StorageClasses()
csiNodeInformer := informerFactory.Storage().V1().CSINodes()
csiDriverInformer := informerFactory.Storage().V1().CSIDrivers()
csiStorageCapacityInformer := informerFactory.Storage().V1().CSIStorageCapacities()
namespaceInformer := informerFactory.Core().V1().Namespaces()
priorityClassInformer := informerFactory.Scheduling().V1().PriorityClasses()
serviceInformer := informerFactory.Core().V1().Services()
replicationControllerInformer := informerFactory.Core().V1().ReplicationControllers()
replicaSetInformer := informerFactory.Apps().V1().ReplicaSets()
statefulSetInformer := informerFactory.Apps().V1().StatefulSets()
volumeAttachmentInformer := informerFactory.Storage().V1().VolumeAttachments()
var capacityCheck = volumebinding.CapacityCheck{
CSIDriverInformer: informerFactory.Storage().V1().CSIDrivers(),
CSIStorageCapacityInformer: informerFactory.Storage().V1().CSIStorageCapacities(),
}
// create a volume binder (needs the informers)
volumeBinder := volumebinding.NewVolumeBinder(
klog.NewKlogr(),
kubeClient.GetClientSet(),
podInformer,
nodeInformer,
csiNodeInformer,
pvcInformer,
pvInformer,
storageInformer,
capacityCheck,
configs.VolumeBindTimeout)
return &APIFactory{
clients: &Clients{
KubeClient: kubeClient,
SchedulerAPI: scheduler,
InformerFactory: informerFactory,
PodInformer: podInformer,
NodeInformer: nodeInformer,
ConfigMapInformer: configMapInformer,
PVInformer: pvInformer,
PVCInformer: pvcInformer,
StorageClassInformer: storageInformer,
CSINodeInformer: csiNodeInformer,
CSIDriverInformer: csiDriverInformer,
CSIStorageCapacityInformer: csiStorageCapacityInformer,
NamespaceInformer: namespaceInformer,
PriorityClassInformer: priorityClassInformer,
ServiceInformer: serviceInformer,
ReplicationControllerInformer: replicationControllerInformer,
ReplicaSetInformer: replicaSetInformer,
StatefulSetInformer: statefulSetInformer,
VolumeAttachmentInformer: volumeAttachmentInformer,
VolumeBinder: volumeBinder,
},
testMode: testMode,
stopChan: make(chan struct{}),
lock: &locking.RWMutex{},
}
}