mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 05:57:25 +00:00
Remove CSINode from scheduler cache.
This commit is contained in:
parent
aab740ffc2
commit
a772722660
@ -30,7 +30,6 @@ go_library(
|
|||||||
"//pkg/scheduler/volumebinder:go_default_library",
|
"//pkg/scheduler/volumebinder: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/api/storage/v1:go_default_library",
|
"//staging/src/k8s.io/api/storage/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/api/storage/v1beta1:go_default_library",
|
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library",
|
||||||
|
@ -40,6 +40,7 @@ go_library(
|
|||||||
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
|
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/listers/core/v1: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",
|
"//staging/src/k8s.io/client-go/listers/storage/v1:go_default_library",
|
||||||
|
"//staging/src/k8s.io/client-go/listers/storage/v1beta1:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/util/workqueue:go_default_library",
|
"//staging/src/k8s.io/client-go/util/workqueue:go_default_library",
|
||||||
"//staging/src/k8s.io/cloud-provider/volume/helpers:go_default_library",
|
"//staging/src/k8s.io/cloud-provider/volume/helpers:go_default_library",
|
||||||
"//staging/src/k8s.io/csi-translation-lib:go_default_library",
|
"//staging/src/k8s.io/csi-translation-lib:go_default_library",
|
||||||
|
@ -26,8 +26,8 @@ import (
|
|||||||
"k8s.io/klog"
|
"k8s.io/klog"
|
||||||
|
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
storagev1 "k8s.io/api/storage/v1"
|
storage "k8s.io/api/storage/v1"
|
||||||
storagev1beta1 "k8s.io/api/storage/v1beta1"
|
v1beta1storage "k8s.io/api/storage/v1beta1"
|
||||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/fields"
|
"k8s.io/apimachinery/pkg/fields"
|
||||||
@ -37,6 +37,7 @@ import (
|
|||||||
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||||
corelisters "k8s.io/client-go/listers/core/v1"
|
corelisters "k8s.io/client-go/listers/core/v1"
|
||||||
storagelisters "k8s.io/client-go/listers/storage/v1"
|
storagelisters "k8s.io/client-go/listers/storage/v1"
|
||||||
|
v1beta1storagelisters "k8s.io/client-go/listers/storage/v1beta1"
|
||||||
volumehelpers "k8s.io/cloud-provider/volume/helpers"
|
volumehelpers "k8s.io/cloud-provider/volume/helpers"
|
||||||
csilibplugins "k8s.io/csi-translation-lib/plugins"
|
csilibplugins "k8s.io/csi-translation-lib/plugins"
|
||||||
v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper"
|
v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper"
|
||||||
@ -169,7 +170,19 @@ type NodeInfo interface {
|
|||||||
|
|
||||||
// CSINodeInfo interface represents anything that can get CSINode object from node name.
|
// CSINodeInfo interface represents anything that can get CSINode object from node name.
|
||||||
type CSINodeInfo interface {
|
type CSINodeInfo interface {
|
||||||
GetCSINodeInfo(nodeName string) (*storagev1beta1.CSINode, error)
|
GetCSINodeInfo(nodeName string) (*v1beta1storage.CSINode, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ CSINodeInfo = &CachedCSINodeInfo{}
|
||||||
|
|
||||||
|
// CachedCSINodeInfo implements CSINodeInfoInfo
|
||||||
|
type CachedCSINodeInfo struct {
|
||||||
|
v1beta1storagelisters.CSINodeLister
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetCSINodeInfo returns a persistent volume object by PV ID.
|
||||||
|
func (c *CachedCSINodeInfo) GetCSINodeInfo(nodeName string) (*v1beta1storage.CSINode, error) {
|
||||||
|
return c.Get(nodeName)
|
||||||
}
|
}
|
||||||
|
|
||||||
// PersistentVolumeInfo interface represents anything that can get persistent volume object by PV ID.
|
// PersistentVolumeInfo interface represents anything that can get persistent volume object by PV ID.
|
||||||
@ -209,7 +222,7 @@ func (c *CachedPersistentVolumeClaimInfo) GetPersistentVolumeClaimInfo(namespace
|
|||||||
|
|
||||||
// StorageClassInfo interface represents anything that can get a storage class object by class name.
|
// StorageClassInfo interface represents anything that can get a storage class object by class name.
|
||||||
type StorageClassInfo interface {
|
type StorageClassInfo interface {
|
||||||
GetStorageClassInfo(className string) (*storagev1.StorageClass, error)
|
GetStorageClassInfo(className string) (*storage.StorageClass, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ StorageClassInfo = &CachedStorageClassInfo{}
|
var _ StorageClassInfo = &CachedStorageClassInfo{}
|
||||||
@ -220,7 +233,7 @@ type CachedStorageClassInfo struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetStorageClassInfo get StorageClass by class name.
|
// GetStorageClassInfo get StorageClass by class name.
|
||||||
func (c *CachedStorageClassInfo) GetStorageClassInfo(className string) (*storagev1.StorageClass, error) {
|
func (c *CachedStorageClassInfo) GetStorageClassInfo(className string) (*storage.StorageClass, error) {
|
||||||
return c.Get(className)
|
return c.Get(className)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -313,9 +326,9 @@ type VolumeFilter struct {
|
|||||||
FilterVolume func(vol *v1.Volume) (id string, relevant bool)
|
FilterVolume func(vol *v1.Volume) (id string, relevant bool)
|
||||||
FilterPersistentVolume func(pv *v1.PersistentVolume) (id string, relevant bool)
|
FilterPersistentVolume func(pv *v1.PersistentVolume) (id string, relevant bool)
|
||||||
// MatchProvisioner evaluates if the StorageClass provisioner matches the running predicate
|
// MatchProvisioner evaluates if the StorageClass provisioner matches the running predicate
|
||||||
MatchProvisioner func(sc *storagev1.StorageClass) (relevant bool)
|
MatchProvisioner func(sc *storage.StorageClass) (relevant bool)
|
||||||
// IsMigrated returns a boolean specifying whether the plugin is migrated to a CSI driver
|
// IsMigrated returns a boolean specifying whether the plugin is migrated to a CSI driver
|
||||||
IsMigrated func(csiNode *storagev1beta1.CSINode) bool
|
IsMigrated func(csiNode *v1beta1storage.CSINode) bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewMaxPDVolumeCountPredicate creates a predicate which evaluates whether a pod can fit based on the
|
// NewMaxPDVolumeCountPredicate creates a predicate which evaluates whether a pod can fit based on the
|
||||||
@ -577,14 +590,14 @@ var EBSVolumeFilter = VolumeFilter{
|
|||||||
return "", false
|
return "", false
|
||||||
},
|
},
|
||||||
|
|
||||||
MatchProvisioner: func(sc *storagev1.StorageClass) (relevant bool) {
|
MatchProvisioner: func(sc *storage.StorageClass) (relevant bool) {
|
||||||
if sc.Provisioner == csilibplugins.AWSEBSInTreePluginName {
|
if sc.Provisioner == csilibplugins.AWSEBSInTreePluginName {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
},
|
},
|
||||||
|
|
||||||
IsMigrated: func(csiNode *storagev1beta1.CSINode) bool {
|
IsMigrated: func(csiNode *v1beta1storage.CSINode) bool {
|
||||||
return isCSIMigrationOn(csiNode, csilibplugins.AWSEBSInTreePluginName)
|
return isCSIMigrationOn(csiNode, csilibplugins.AWSEBSInTreePluginName)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -605,14 +618,14 @@ var GCEPDVolumeFilter = VolumeFilter{
|
|||||||
return "", false
|
return "", false
|
||||||
},
|
},
|
||||||
|
|
||||||
MatchProvisioner: func(sc *storagev1.StorageClass) (relevant bool) {
|
MatchProvisioner: func(sc *storage.StorageClass) (relevant bool) {
|
||||||
if sc.Provisioner == csilibplugins.GCEPDInTreePluginName {
|
if sc.Provisioner == csilibplugins.GCEPDInTreePluginName {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
},
|
},
|
||||||
|
|
||||||
IsMigrated: func(csiNode *storagev1beta1.CSINode) bool {
|
IsMigrated: func(csiNode *v1beta1storage.CSINode) bool {
|
||||||
return isCSIMigrationOn(csiNode, csilibplugins.GCEPDInTreePluginName)
|
return isCSIMigrationOn(csiNode, csilibplugins.GCEPDInTreePluginName)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -633,14 +646,14 @@ var AzureDiskVolumeFilter = VolumeFilter{
|
|||||||
return "", false
|
return "", false
|
||||||
},
|
},
|
||||||
|
|
||||||
MatchProvisioner: func(sc *storagev1.StorageClass) (relevant bool) {
|
MatchProvisioner: func(sc *storage.StorageClass) (relevant bool) {
|
||||||
if sc.Provisioner == csilibplugins.AzureDiskInTreePluginName {
|
if sc.Provisioner == csilibplugins.AzureDiskInTreePluginName {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
},
|
},
|
||||||
|
|
||||||
IsMigrated: func(csiNode *storagev1beta1.CSINode) bool {
|
IsMigrated: func(csiNode *v1beta1storage.CSINode) bool {
|
||||||
return isCSIMigrationOn(csiNode, csilibplugins.AzureDiskInTreePluginName)
|
return isCSIMigrationOn(csiNode, csilibplugins.AzureDiskInTreePluginName)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -662,14 +675,14 @@ var CinderVolumeFilter = VolumeFilter{
|
|||||||
return "", false
|
return "", false
|
||||||
},
|
},
|
||||||
|
|
||||||
MatchProvisioner: func(sc *storagev1.StorageClass) (relevant bool) {
|
MatchProvisioner: func(sc *storage.StorageClass) (relevant bool) {
|
||||||
if sc.Provisioner == csilibplugins.CinderInTreePluginName {
|
if sc.Provisioner == csilibplugins.CinderInTreePluginName {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
},
|
},
|
||||||
|
|
||||||
IsMigrated: func(csiNode *storagev1beta1.CSINode) bool {
|
IsMigrated: func(csiNode *v1beta1storage.CSINode) bool {
|
||||||
return isCSIMigrationOn(csiNode, csilibplugins.CinderInTreePluginName)
|
return isCSIMigrationOn(csiNode, csilibplugins.CinderInTreePluginName)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -758,7 +771,7 @@ func (c *VolumeZoneChecker) predicate(pod *v1.Pod, meta PredicateMetadata, nodeI
|
|||||||
if class.VolumeBindingMode == nil {
|
if class.VolumeBindingMode == nil {
|
||||||
return false, nil, fmt.Errorf("VolumeBindingMode not set for StorageClass %q", scName)
|
return false, nil, fmt.Errorf("VolumeBindingMode not set for StorageClass %q", scName)
|
||||||
}
|
}
|
||||||
if *class.VolumeBindingMode == storagev1.VolumeBindingWaitForFirstConsumer {
|
if *class.VolumeBindingMode == storage.VolumeBindingWaitForFirstConsumer {
|
||||||
// Skip unbound volumes
|
// Skip unbound volumes
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,6 @@ import (
|
|||||||
|
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
storagev1 "k8s.io/api/storage/v1"
|
storagev1 "k8s.io/api/storage/v1"
|
||||||
storagev1beta1 "k8s.io/api/storage/v1beta1"
|
|
||||||
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
||||||
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||||
"k8s.io/client-go/informers"
|
"k8s.io/client-go/informers"
|
||||||
@ -159,61 +158,13 @@ func (sched *Scheduler) deleteNodeFromCache(obj interface{}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (sched *Scheduler) onCSINodeAdd(obj interface{}) {
|
func (sched *Scheduler) onCSINodeAdd(obj interface{}) {
|
||||||
csiNode, ok := obj.(*storagev1beta1.CSINode)
|
|
||||||
if !ok {
|
|
||||||
klog.Errorf("cannot convert to *storagev1beta1.CSINode: %v", obj)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := sched.SchedulerCache.AddCSINode(csiNode); err != nil {
|
|
||||||
klog.Errorf("scheduler cache AddCSINode failed: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
sched.SchedulingQueue.MoveAllToActiveOrBackoffQueue(queue.CSINodeAdd)
|
sched.SchedulingQueue.MoveAllToActiveOrBackoffQueue(queue.CSINodeAdd)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sched *Scheduler) onCSINodeUpdate(oldObj, newObj interface{}) {
|
func (sched *Scheduler) onCSINodeUpdate(oldObj, newObj interface{}) {
|
||||||
oldCSINode, ok := oldObj.(*storagev1beta1.CSINode)
|
|
||||||
if !ok {
|
|
||||||
klog.Errorf("cannot convert oldObj to *storagev1beta1.CSINode: %v", oldObj)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
newCSINode, ok := newObj.(*storagev1beta1.CSINode)
|
|
||||||
if !ok {
|
|
||||||
klog.Errorf("cannot convert newObj to *storagev1beta1.CSINode: %v", newObj)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := sched.SchedulerCache.UpdateCSINode(oldCSINode, newCSINode); err != nil {
|
|
||||||
klog.Errorf("scheduler cache UpdateCSINode failed: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
sched.SchedulingQueue.MoveAllToActiveOrBackoffQueue(queue.CSINodeUpdate)
|
sched.SchedulingQueue.MoveAllToActiveOrBackoffQueue(queue.CSINodeUpdate)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sched *Scheduler) onCSINodeDelete(obj interface{}) {
|
|
||||||
var csiNode *storagev1beta1.CSINode
|
|
||||||
switch t := obj.(type) {
|
|
||||||
case *storagev1beta1.CSINode:
|
|
||||||
csiNode = t
|
|
||||||
case cache.DeletedFinalStateUnknown:
|
|
||||||
var ok bool
|
|
||||||
csiNode, ok = t.Obj.(*storagev1beta1.CSINode)
|
|
||||||
if !ok {
|
|
||||||
klog.Errorf("cannot convert to *storagev1beta1.CSINode: %v", t.Obj)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
klog.Errorf("cannot convert to *storagev1beta1.CSINode: %v", t)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := sched.SchedulerCache.RemoveCSINode(csiNode); err != nil {
|
|
||||||
klog.Errorf("scheduler cache RemoveCSINode failed: %v", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (sched *Scheduler) addPodToSchedulingQueue(obj interface{}) {
|
func (sched *Scheduler) addPodToSchedulingQueue(obj interface{}) {
|
||||||
if err := sched.SchedulingQueue.Add(obj.(*v1.Pod)); err != nil {
|
if err := sched.SchedulingQueue.Add(obj.(*v1.Pod)); err != nil {
|
||||||
utilruntime.HandleError(fmt.Errorf("unable to queue %T: %v", obj, err))
|
utilruntime.HandleError(fmt.Errorf("unable to queue %T: %v", obj, err))
|
||||||
@ -450,7 +401,6 @@ func AddAllEventHandlers(
|
|||||||
cache.ResourceEventHandlerFuncs{
|
cache.ResourceEventHandlerFuncs{
|
||||||
AddFunc: sched.onCSINodeAdd,
|
AddFunc: sched.onCSINodeAdd,
|
||||||
UpdateFunc: sched.onCSINodeUpdate,
|
UpdateFunc: sched.onCSINodeUpdate,
|
||||||
DeleteFunc: sched.onCSINodeDelete,
|
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -594,7 +594,7 @@ func (c *Configurator) getAlgorithmArgs() (*PluginFactoryArgs, *plugins.ConfigPr
|
|||||||
StatefulSetLister: c.statefulSetLister,
|
StatefulSetLister: c.statefulSetLister,
|
||||||
PDBLister: c.pdbLister,
|
PDBLister: c.pdbLister,
|
||||||
NodeInfo: c.schedulerCache,
|
NodeInfo: c.schedulerCache,
|
||||||
CSINodeInfo: c.schedulerCache,
|
CSINodeInfo: &predicates.CachedCSINodeInfo{CSINodeLister: c.csiNodeLister},
|
||||||
PVInfo: &predicates.CachedPersistentVolumeInfo{PersistentVolumeLister: c.pVLister},
|
PVInfo: &predicates.CachedPersistentVolumeInfo{PersistentVolumeLister: c.pVLister},
|
||||||
PVCInfo: &predicates.CachedPersistentVolumeClaimInfo{PersistentVolumeClaimLister: c.pVCLister},
|
PVCInfo: &predicates.CachedPersistentVolumeClaimInfo{PersistentVolumeClaimLister: c.pVCLister},
|
||||||
StorageClassInfo: &predicates.CachedStorageClassInfo{StorageClassLister: c.storageClassLister},
|
StorageClassInfo: &predicates.CachedStorageClassInfo{StorageClassLister: c.storageClassLister},
|
||||||
|
@ -63,7 +63,7 @@ func NewDefaultRegistry(args *RegistryArgs) framework.Registry {
|
|||||||
},
|
},
|
||||||
volumerestrictions.Name: volumerestrictions.New,
|
volumerestrictions.Name: volumerestrictions.New,
|
||||||
volumezone.Name: volumezone.New,
|
volumezone.Name: volumezone.New,
|
||||||
nodevolumelimits.Name: nodevolumelimits.New(args.SchedulerCache),
|
nodevolumelimits.Name: nodevolumelimits.New,
|
||||||
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
|
||||||
},
|
},
|
||||||
|
@ -49,10 +49,12 @@ func (pl *NodeVolumeLimits) Filter(ctx context.Context, _ *framework.CycleState,
|
|||||||
return migration.PredicateResultToFrameworkStatus(reasons, err)
|
return migration.PredicateResultToFrameworkStatus(reasons, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// New returns function that initializes a new plugin and returns it.
|
// New initializes a new plugin and returns it.
|
||||||
func New(csiNodeInfo predicates.CSINodeInfo) framework.PluginFactory {
|
func New(_ *runtime.Unknown, handle framework.FrameworkHandle) (framework.Plugin, error) {
|
||||||
return func(_ *runtime.Unknown, handle framework.FrameworkHandle) (framework.Plugin, error) {
|
|
||||||
informerFactory := handle.SharedInformerFactory()
|
informerFactory := handle.SharedInformerFactory()
|
||||||
|
csiNodeInfo := &predicates.CachedCSINodeInfo{
|
||||||
|
CSINodeLister: informerFactory.Storage().V1beta1().CSINodes().Lister(),
|
||||||
|
}
|
||||||
pvInfo := &predicates.CachedPersistentVolumeInfo{
|
pvInfo := &predicates.CachedPersistentVolumeInfo{
|
||||||
PersistentVolumeLister: informerFactory.Core().V1().PersistentVolumes().Lister(),
|
PersistentVolumeLister: informerFactory.Core().V1().PersistentVolumes().Lister(),
|
||||||
}
|
}
|
||||||
@ -62,8 +64,8 @@ func New(csiNodeInfo predicates.CSINodeInfo) framework.PluginFactory {
|
|||||||
classInfo := &predicates.CachedStorageClassInfo{
|
classInfo := &predicates.CachedStorageClassInfo{
|
||||||
StorageClassLister: informerFactory.Storage().V1().StorageClasses().Lister(),
|
StorageClassLister: informerFactory.Storage().V1().StorageClasses().Lister(),
|
||||||
}
|
}
|
||||||
|
|
||||||
return &NodeVolumeLimits{
|
return &NodeVolumeLimits{
|
||||||
predicate: predicates.NewCSIMaxVolumeLimitPredicate(csiNodeInfo, pvInfo, pvcInfo, classInfo),
|
predicate: predicates.NewCSIMaxVolumeLimitPredicate(csiNodeInfo, pvInfo, pvcInfo, classInfo),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
1
pkg/scheduler/internal/cache/BUILD
vendored
1
pkg/scheduler/internal/cache/BUILD
vendored
@ -15,7 +15,6 @@ go_library(
|
|||||||
"//pkg/scheduler/nodeinfo:go_default_library",
|
"//pkg/scheduler/nodeinfo:go_default_library",
|
||||||
"//pkg/util/node:go_default_library",
|
"//pkg/util/node: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/api/storage/v1beta1:go_default_library",
|
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
|
||||||
|
43
pkg/scheduler/internal/cache/cache.go
vendored
43
pkg/scheduler/internal/cache/cache.go
vendored
@ -22,7 +22,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
storagev1beta1 "k8s.io/api/storage/v1beta1"
|
|
||||||
"k8s.io/apimachinery/pkg/labels"
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
"k8s.io/apimachinery/pkg/util/wait"
|
"k8s.io/apimachinery/pkg/util/wait"
|
||||||
@ -70,7 +69,6 @@ type schedulerCache struct {
|
|||||||
// a map from pod key to podState.
|
// a map from pod key to podState.
|
||||||
podStates map[string]*podState
|
podStates map[string]*podState
|
||||||
nodes map[string]*nodeInfoListItem
|
nodes map[string]*nodeInfoListItem
|
||||||
csiNodes map[string]*storagev1beta1.CSINode
|
|
||||||
// headNode points to the most recently updated NodeInfo in "nodes". It is the
|
// headNode points to the most recently updated NodeInfo in "nodes". It is the
|
||||||
// head of the linked list.
|
// head of the linked list.
|
||||||
headNode *nodeInfoListItem
|
headNode *nodeInfoListItem
|
||||||
@ -110,7 +108,6 @@ func newSchedulerCache(ttl, period time.Duration, stop <-chan struct{}) *schedul
|
|||||||
|
|
||||||
nodes: make(map[string]*nodeInfoListItem),
|
nodes: make(map[string]*nodeInfoListItem),
|
||||||
nodeTree: newNodeTree(nil),
|
nodeTree: newNodeTree(nil),
|
||||||
csiNodes: make(map[string]*storagev1beta1.CSINode),
|
|
||||||
assumedPods: make(map[string]bool),
|
assumedPods: make(map[string]bool),
|
||||||
podStates: make(map[string]*podState),
|
podStates: make(map[string]*podState),
|
||||||
imageStates: make(map[string]*imageState),
|
imageStates: make(map[string]*imageState),
|
||||||
@ -578,34 +575,6 @@ func (cache *schedulerCache) RemoveNode(node *v1.Node) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cache *schedulerCache) AddCSINode(csiNode *storagev1beta1.CSINode) error {
|
|
||||||
cache.mu.Lock()
|
|
||||||
defer cache.mu.Unlock()
|
|
||||||
|
|
||||||
cache.csiNodes[csiNode.Name] = csiNode
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (cache *schedulerCache) UpdateCSINode(oldCSINode, newCSINode *storagev1beta1.CSINode) error {
|
|
||||||
cache.mu.Lock()
|
|
||||||
defer cache.mu.Unlock()
|
|
||||||
|
|
||||||
cache.csiNodes[newCSINode.Name] = newCSINode
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (cache *schedulerCache) RemoveCSINode(csiNode *storagev1beta1.CSINode) error {
|
|
||||||
cache.mu.Lock()
|
|
||||||
defer cache.mu.Unlock()
|
|
||||||
|
|
||||||
_, ok := cache.csiNodes[csiNode.Name]
|
|
||||||
if !ok {
|
|
||||||
return fmt.Errorf("csinode %v is not found", csiNode.Name)
|
|
||||||
}
|
|
||||||
delete(cache.csiNodes, csiNode.Name)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// addNodeImageStates adds states of the images on given node to the given nodeInfo and update the imageStates in
|
// addNodeImageStates adds states of the images on given node to the given nodeInfo and update the imageStates in
|
||||||
// scheduler cache. This function assumes the lock to scheduler cache has been acquired.
|
// scheduler cache. This function assumes the lock to scheduler cache has been acquired.
|
||||||
func (cache *schedulerCache) addNodeImageStates(node *v1.Node, nodeInfo *schedulernodeinfo.NodeInfo) {
|
func (cache *schedulerCache) addNodeImageStates(node *v1.Node, nodeInfo *schedulernodeinfo.NodeInfo) {
|
||||||
@ -711,15 +680,3 @@ func (cache *schedulerCache) GetNodeInfo(nodeName string) (*v1.Node, error) {
|
|||||||
|
|
||||||
return n.info.Node(), nil
|
return n.info.Node(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cache *schedulerCache) GetCSINodeInfo(nodeName string) (*storagev1beta1.CSINode, error) {
|
|
||||||
cache.mu.RLock()
|
|
||||||
defer cache.mu.RUnlock()
|
|
||||||
|
|
||||||
n, ok := cache.csiNodes[nodeName]
|
|
||||||
if !ok {
|
|
||||||
return nil, fmt.Errorf("error retrieving csinode '%v' from cache", nodeName)
|
|
||||||
}
|
|
||||||
|
|
||||||
return n, nil
|
|
||||||
}
|
|
||||||
|
1
pkg/scheduler/internal/cache/fake/BUILD
vendored
1
pkg/scheduler/internal/cache/fake/BUILD
vendored
@ -10,7 +10,6 @@ go_library(
|
|||||||
"//pkg/scheduler/internal/cache:go_default_library",
|
"//pkg/scheduler/internal/cache: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/api/storage/v1beta1:go_default_library",
|
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
20
pkg/scheduler/internal/cache/fake/fake_cache.go
vendored
20
pkg/scheduler/internal/cache/fake/fake_cache.go
vendored
@ -18,7 +18,6 @@ package fake
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
storagev1beta1 "k8s.io/api/storage/v1beta1"
|
|
||||||
"k8s.io/apimachinery/pkg/labels"
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm"
|
"k8s.io/kubernetes/pkg/scheduler/algorithm"
|
||||||
internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache"
|
internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache"
|
||||||
@ -76,15 +75,6 @@ func (c *Cache) UpdateNode(oldNode, newNode *v1.Node) error { return nil }
|
|||||||
// RemoveNode is a fake method for testing.
|
// RemoveNode is a fake method for testing.
|
||||||
func (c *Cache) RemoveNode(node *v1.Node) error { return nil }
|
func (c *Cache) RemoveNode(node *v1.Node) error { return nil }
|
||||||
|
|
||||||
// AddCSINode is a fake method for testing.
|
|
||||||
func (c *Cache) AddCSINode(csiNode *storagev1beta1.CSINode) error { return nil }
|
|
||||||
|
|
||||||
// UpdateCSINode is a fake method for testing.
|
|
||||||
func (c *Cache) UpdateCSINode(oldCSINode, newCSINode *storagev1beta1.CSINode) error { return nil }
|
|
||||||
|
|
||||||
// RemoveCSINode is a fake method for testing.
|
|
||||||
func (c *Cache) RemoveCSINode(csiNode *storagev1beta1.CSINode) error { return nil }
|
|
||||||
|
|
||||||
// UpdateNodeInfoSnapshot is a fake method for testing.
|
// UpdateNodeInfoSnapshot is a fake method for testing.
|
||||||
func (c *Cache) UpdateNodeInfoSnapshot(nodeSnapshot *schedulernodeinfo.Snapshot) error {
|
func (c *Cache) UpdateNodeInfoSnapshot(nodeSnapshot *schedulernodeinfo.Snapshot) error {
|
||||||
return nil
|
return nil
|
||||||
@ -112,13 +102,3 @@ func (c *Cache) GetNodeInfo(nodeName string) (*v1.Node, error) {
|
|||||||
func (c *Cache) ListNodes() []*v1.Node {
|
func (c *Cache) ListNodes() []*v1.Node {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetCSINodeInfo is a fake method for testing.
|
|
||||||
func (c *Cache) GetCSINodeInfo(nodeName string) (*storagev1beta1.CSINode, error) {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// NumNodes is a fake method for testing.
|
|
||||||
func (c *Cache) NumNodes() int {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
13
pkg/scheduler/internal/cache/interface.go
vendored
13
pkg/scheduler/internal/cache/interface.go
vendored
@ -18,7 +18,6 @@ package cache
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
storagev1beta1 "k8s.io/api/storage/v1beta1"
|
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm"
|
"k8s.io/kubernetes/pkg/scheduler/algorithm"
|
||||||
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
|
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
|
||||||
)
|
)
|
||||||
@ -102,21 +101,9 @@ type Cache interface {
|
|||||||
// on this node.
|
// on this node.
|
||||||
UpdateNodeInfoSnapshot(nodeSnapshot *schedulernodeinfo.Snapshot) error
|
UpdateNodeInfoSnapshot(nodeSnapshot *schedulernodeinfo.Snapshot) error
|
||||||
|
|
||||||
// AddCSINode adds overall CSI-related information about node.
|
|
||||||
AddCSINode(csiNode *storagev1beta1.CSINode) error
|
|
||||||
|
|
||||||
// UpdateCSINode updates overall CSI-related information about node.
|
|
||||||
UpdateCSINode(oldCSINode, newCSINode *storagev1beta1.CSINode) error
|
|
||||||
|
|
||||||
// RemoveCSINode removes overall CSI-related information about node.
|
|
||||||
RemoveCSINode(csiNode *storagev1beta1.CSINode) error
|
|
||||||
|
|
||||||
// GetNodeInfo returns the node object with node string.
|
// GetNodeInfo returns the node object with node string.
|
||||||
GetNodeInfo(nodeName string) (*v1.Node, error)
|
GetNodeInfo(nodeName string) (*v1.Node, error)
|
||||||
|
|
||||||
// GetCSINodeInfo returns the csinode object with the given name.
|
|
||||||
GetCSINodeInfo(nodeName string) (*storagev1beta1.CSINode, error)
|
|
||||||
|
|
||||||
// Snapshot takes a snapshot on current cache
|
// Snapshot takes a snapshot on current cache
|
||||||
Snapshot() *Snapshot
|
Snapshot() *Snapshot
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user