mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-29 06:27:05 +00:00
Merge pull request #87407 from haosdent/remove-registry-args
Deprecate scheduler's framework.plugins.RegistryArgs
This commit is contained in:
commit
8cd0c42845
@ -435,7 +435,7 @@ func newConfigFactoryWithFrameworkRegistry(
|
|||||||
func newConfigFactory(
|
func newConfigFactory(
|
||||||
client clientset.Interface, hardPodAffinitySymmetricWeight int32, stopCh <-chan struct{}) *Configurator {
|
client clientset.Interface, hardPodAffinitySymmetricWeight int32, stopCh <-chan struct{}) *Configurator {
|
||||||
return newConfigFactoryWithFrameworkRegistry(client, hardPodAffinitySymmetricWeight, stopCh,
|
return newConfigFactoryWithFrameworkRegistry(client, hardPodAffinitySymmetricWeight, stopCh,
|
||||||
frameworkplugins.NewInTreeRegistry(&frameworkplugins.RegistryArgs{}))
|
frameworkplugins.NewInTreeRegistry())
|
||||||
}
|
}
|
||||||
|
|
||||||
type fakeExtender struct {
|
type fakeExtender struct {
|
||||||
|
@ -30,7 +30,6 @@ go_library(
|
|||||||
"//pkg/scheduler/framework/plugins/volumerestrictions:go_default_library",
|
"//pkg/scheduler/framework/plugins/volumerestrictions:go_default_library",
|
||||||
"//pkg/scheduler/framework/plugins/volumezone:go_default_library",
|
"//pkg/scheduler/framework/plugins/volumezone:go_default_library",
|
||||||
"//pkg/scheduler/framework/v1alpha1:go_default_library",
|
"//pkg/scheduler/framework/v1alpha1: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/apimachinery/pkg/util/sets:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
||||||
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
|
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
|
||||||
|
@ -17,7 +17,6 @@ limitations under the License.
|
|||||||
package plugins
|
package plugins
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
|
||||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultpodtopologyspread"
|
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultpodtopologyspread"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/imagelocality"
|
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/imagelocality"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/interpodaffinity"
|
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/interpodaffinity"
|
||||||
@ -37,18 +36,12 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumerestrictions"
|
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumerestrictions"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumezone"
|
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumezone"
|
||||||
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
|
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/volumebinder"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// RegistryArgs arguments needed to create default plugin factories.
|
|
||||||
type RegistryArgs struct {
|
|
||||||
VolumeBinder *volumebinder.VolumeBinder
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewInTreeRegistry builds the registry with all the in-tree plugins.
|
// NewInTreeRegistry builds the registry with all the in-tree plugins.
|
||||||
// A scheduler that runs out of tree plugins can register additional plugins
|
// A scheduler that runs out of tree plugins can register additional plugins
|
||||||
// through the WithFrameworkOutOfTreeRegistry option.
|
// through the WithFrameworkOutOfTreeRegistry option.
|
||||||
func NewInTreeRegistry(args *RegistryArgs) framework.Registry {
|
func NewInTreeRegistry() framework.Registry {
|
||||||
return framework.Registry{
|
return framework.Registry{
|
||||||
defaultpodtopologyspread.Name: defaultpodtopologyspread.New,
|
defaultpodtopologyspread.Name: defaultpodtopologyspread.New,
|
||||||
imagelocality.Name: imagelocality.New,
|
imagelocality.Name: imagelocality.New,
|
||||||
@ -65,19 +58,17 @@ func NewInTreeRegistry(args *RegistryArgs) framework.Registry {
|
|||||||
noderesources.LeastAllocatedName: noderesources.NewLeastAllocated,
|
noderesources.LeastAllocatedName: noderesources.NewLeastAllocated,
|
||||||
noderesources.RequestedToCapacityRatioName: noderesources.NewRequestedToCapacityRatio,
|
noderesources.RequestedToCapacityRatioName: noderesources.NewRequestedToCapacityRatio,
|
||||||
noderesources.ResourceLimitsName: noderesources.NewResourceLimits,
|
noderesources.ResourceLimitsName: noderesources.NewResourceLimits,
|
||||||
volumebinding.Name: func(_ *runtime.Unknown, _ framework.FrameworkHandle) (framework.Plugin, error) {
|
volumebinding.Name: volumebinding.New,
|
||||||
return volumebinding.NewFromVolumeBinder(args.VolumeBinder), nil
|
volumerestrictions.Name: volumerestrictions.New,
|
||||||
},
|
volumezone.Name: volumezone.New,
|
||||||
volumerestrictions.Name: volumerestrictions.New,
|
nodevolumelimits.CSIName: nodevolumelimits.NewCSI,
|
||||||
volumezone.Name: volumezone.New,
|
nodevolumelimits.EBSName: nodevolumelimits.NewEBS,
|
||||||
nodevolumelimits.CSIName: nodevolumelimits.NewCSI,
|
nodevolumelimits.GCEPDName: nodevolumelimits.NewGCEPD,
|
||||||
nodevolumelimits.EBSName: nodevolumelimits.NewEBS,
|
nodevolumelimits.AzureDiskName: nodevolumelimits.NewAzureDisk,
|
||||||
nodevolumelimits.GCEPDName: nodevolumelimits.NewGCEPD,
|
nodevolumelimits.CinderName: nodevolumelimits.NewCinder,
|
||||||
nodevolumelimits.AzureDiskName: nodevolumelimits.NewAzureDisk,
|
interpodaffinity.Name: interpodaffinity.New,
|
||||||
nodevolumelimits.CinderName: nodevolumelimits.NewCinder,
|
nodelabel.Name: nodelabel.New,
|
||||||
interpodaffinity.Name: interpodaffinity.New,
|
serviceaffinity.Name: serviceaffinity.New,
|
||||||
nodelabel.Name: nodelabel.New,
|
queuesort.Name: queuesort.New,
|
||||||
serviceaffinity.Name: serviceaffinity.New,
|
|
||||||
queuesort.Name: queuesort.New,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@ go_library(
|
|||||||
"//pkg/scheduler/nodeinfo:go_default_library",
|
"//pkg/scheduler/nodeinfo:go_default_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/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"
|
||||||
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
|
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
|
||||||
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
|
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/volumebinder"
|
"k8s.io/kubernetes/pkg/scheduler/volumebinder"
|
||||||
@ -97,9 +98,9 @@ func (pl *VolumeBinding) Filter(ctx context.Context, cs *framework.CycleState, p
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewFromVolumeBinder initializes a new plugin with volume binder and returns it.
|
// New initializes a new plugin with volume binder and returns it.
|
||||||
func NewFromVolumeBinder(volumeBinder *volumebinder.VolumeBinder) framework.Plugin {
|
func New(_ *runtime.Unknown, fh framework.FrameworkHandle) (framework.Plugin, error) {
|
||||||
return &VolumeBinding{
|
return &VolumeBinding{
|
||||||
binder: volumeBinder,
|
binder: fh.VolumeBinder(),
|
||||||
}
|
}, nil
|
||||||
}
|
}
|
||||||
|
@ -111,8 +111,10 @@ func TestVolumeBinding(t *testing.T) {
|
|||||||
nodeInfo := schedulernodeinfo.NewNodeInfo()
|
nodeInfo := schedulernodeinfo.NewNodeInfo()
|
||||||
nodeInfo.SetNode(item.node)
|
nodeInfo.SetNode(item.node)
|
||||||
fakeVolumeBinder := volumebinder.NewFakeVolumeBinder(item.volumeBinderConfig)
|
fakeVolumeBinder := volumebinder.NewFakeVolumeBinder(item.volumeBinderConfig)
|
||||||
p := NewFromVolumeBinder(fakeVolumeBinder)
|
p := &VolumeBinding{
|
||||||
gotStatus := p.(framework.FilterPlugin).Filter(context.Background(), nil, item.pod, nodeInfo)
|
binder: fakeVolumeBinder,
|
||||||
|
}
|
||||||
|
gotStatus := p.Filter(context.Background(), nil, item.pod, nodeInfo)
|
||||||
if !reflect.DeepEqual(gotStatus, item.wantStatus) {
|
if !reflect.DeepEqual(gotStatus, item.wantStatus) {
|
||||||
t.Errorf("status does not match: %v, want: %v", gotStatus, item.wantStatus)
|
t.Errorf("status does not match: %v, want: %v", gotStatus, item.wantStatus)
|
||||||
}
|
}
|
||||||
|
@ -169,7 +169,7 @@ func newDefaultFramework() framework.Framework {
|
|||||||
pl, pls := defaultCfg.FrameworkPlugins, defaultCfg.FrameworkPluginConfig
|
pl, pls := defaultCfg.FrameworkPlugins, defaultCfg.FrameworkPluginConfig
|
||||||
fakeClient := fake.NewSimpleClientset()
|
fakeClient := fake.NewSimpleClientset()
|
||||||
fwk, err := framework.NewFramework(
|
fwk, err := framework.NewFramework(
|
||||||
frameworkplugins.NewInTreeRegistry(&frameworkplugins.RegistryArgs{}),
|
frameworkplugins.NewInTreeRegistry(),
|
||||||
pl,
|
pl,
|
||||||
pls,
|
pls,
|
||||||
framework.WithClientSet(fakeClient),
|
framework.WithClientSet(fakeClient),
|
||||||
|
@ -267,9 +267,7 @@ func New(client clientset.Interface,
|
|||||||
time.Duration(options.bindTimeoutSeconds)*time.Second,
|
time.Duration(options.bindTimeoutSeconds)*time.Second,
|
||||||
)
|
)
|
||||||
|
|
||||||
registry := frameworkplugins.NewInTreeRegistry(&frameworkplugins.RegistryArgs{
|
registry := frameworkplugins.NewInTreeRegistry()
|
||||||
VolumeBinder: volumeBinder,
|
|
||||||
})
|
|
||||||
if err := registry.Merge(options.frameworkOutOfTreeRegistry); err != nil {
|
if err := registry.Merge(options.frameworkOutOfTreeRegistry); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -181,7 +181,7 @@ func TestSchedulerCreation(t *testing.T) {
|
|||||||
|
|
||||||
// Test case for when a plugin name in frameworkOutOfTreeRegistry already exist in defaultRegistry.
|
// Test case for when a plugin name in frameworkOutOfTreeRegistry already exist in defaultRegistry.
|
||||||
fakeFrameworkPluginName := ""
|
fakeFrameworkPluginName := ""
|
||||||
for name := range frameworkplugins.NewInTreeRegistry(&frameworkplugins.RegistryArgs{}) {
|
for name := range frameworkplugins.NewInTreeRegistry() {
|
||||||
fakeFrameworkPluginName = name
|
fakeFrameworkPluginName = name
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@ -484,7 +484,7 @@ func TestSchedulerNoPhantomPodAfterDelete(t *testing.T) {
|
|||||||
func setupTestSchedulerWithOnePodOnNode(t *testing.T, queuedPodStore *clientcache.FIFO, scache internalcache.Cache,
|
func setupTestSchedulerWithOnePodOnNode(t *testing.T, queuedPodStore *clientcache.FIFO, scache internalcache.Cache,
|
||||||
informerFactory informers.SharedInformerFactory, stop chan struct{}, pod *v1.Pod, node *v1.Node, fns ...st.RegisterPluginFunc) (*Scheduler, chan *v1.Binding, chan error) {
|
informerFactory informers.SharedInformerFactory, stop chan struct{}, pod *v1.Pod, node *v1.Node, fns ...st.RegisterPluginFunc) (*Scheduler, chan *v1.Binding, chan error) {
|
||||||
|
|
||||||
scheduler, bindingChan, errChan := setupTestScheduler(queuedPodStore, scache, informerFactory, nil, fns...)
|
scheduler, bindingChan, errChan := setupTestScheduler(queuedPodStore, scache, informerFactory, nil, nil, fns...)
|
||||||
|
|
||||||
informerFactory.Start(stop)
|
informerFactory.Start(stop)
|
||||||
informerFactory.WaitForCacheSync(stop)
|
informerFactory.WaitForCacheSync(stop)
|
||||||
@ -568,7 +568,7 @@ func TestSchedulerFailedSchedulingReasons(t *testing.T) {
|
|||||||
st.RegisterQueueSortPlugin(queuesort.Name, queuesort.New),
|
st.RegisterQueueSortPlugin(queuesort.Name, queuesort.New),
|
||||||
st.RegisterFilterPlugin("PodFitsResources", noderesources.NewFit),
|
st.RegisterFilterPlugin("PodFitsResources", noderesources.NewFit),
|
||||||
}
|
}
|
||||||
scheduler, _, errChan := setupTestScheduler(queuedPodStore, scache, informerFactory, nil, fns...)
|
scheduler, _, errChan := setupTestScheduler(queuedPodStore, scache, informerFactory, nil, nil, fns...)
|
||||||
|
|
||||||
informerFactory.Start(stop)
|
informerFactory.Start(stop)
|
||||||
informerFactory.WaitForCacheSync(stop)
|
informerFactory.WaitForCacheSync(stop)
|
||||||
@ -595,8 +595,12 @@ func TestSchedulerFailedSchedulingReasons(t *testing.T) {
|
|||||||
|
|
||||||
// queuedPodStore: pods queued before processing.
|
// queuedPodStore: pods queued before processing.
|
||||||
// scache: scheduler cache that might contain assumed pods.
|
// scache: scheduler cache that might contain assumed pods.
|
||||||
func setupTestScheduler(queuedPodStore *clientcache.FIFO, scache internalcache.Cache, informerFactory informers.SharedInformerFactory, recorder events.EventRecorder, fns ...st.RegisterPluginFunc) (*Scheduler, chan *v1.Binding, chan error) {
|
func setupTestScheduler(queuedPodStore *clientcache.FIFO, scache internalcache.Cache, informerFactory informers.SharedInformerFactory, recorder events.EventRecorder, fakeVolumeBinder *volumebinder.VolumeBinder, fns ...st.RegisterPluginFunc) (*Scheduler, chan *v1.Binding, chan error) {
|
||||||
registry := framework.Registry{}
|
registry := framework.Registry{}
|
||||||
|
if fakeVolumeBinder == nil {
|
||||||
|
// Create default volume binder if it didn't set.
|
||||||
|
fakeVolumeBinder = volumebinder.NewFakeVolumeBinder(&volumescheduling.FakeVolumeBinderConfig{AllBound: true})
|
||||||
|
}
|
||||||
// TODO: instantiate the plugins dynamically.
|
// TODO: instantiate the plugins dynamically.
|
||||||
plugins := &schedulerapi.Plugins{
|
plugins := &schedulerapi.Plugins{
|
||||||
QueueSort: &schedulerapi.PluginSet{},
|
QueueSort: &schedulerapi.PluginSet{},
|
||||||
@ -607,7 +611,7 @@ func setupTestScheduler(queuedPodStore *clientcache.FIFO, scache internalcache.C
|
|||||||
for _, f := range fns {
|
for _, f := range fns {
|
||||||
f(®istry, plugins, pluginConfigs)
|
f(®istry, plugins, pluginConfigs)
|
||||||
}
|
}
|
||||||
fwk, _ := framework.NewFramework(registry, plugins, pluginConfigs)
|
fwk, _ := framework.NewFramework(registry, plugins, pluginConfigs, framework.WithVolumeBinder(fakeVolumeBinder))
|
||||||
algo := core.NewGenericScheduler(
|
algo := core.NewGenericScheduler(
|
||||||
scache,
|
scache,
|
||||||
internalqueue.NewSchedulingQueue(nil),
|
internalqueue.NewSchedulingQueue(nil),
|
||||||
@ -647,7 +651,7 @@ func setupTestScheduler(queuedPodStore *clientcache.FIFO, scache internalcache.C
|
|||||||
podConditionUpdater: fakePodConditionUpdater{},
|
podConditionUpdater: fakePodConditionUpdater{},
|
||||||
podPreemptor: fakePodPreemptor{},
|
podPreemptor: fakePodPreemptor{},
|
||||||
Framework: fwk,
|
Framework: fwk,
|
||||||
VolumeBinder: volumebinder.NewFakeVolumeBinder(&volumescheduling.FakeVolumeBinderConfig{AllBound: true}),
|
VolumeBinder: fakeVolumeBinder,
|
||||||
client: client,
|
client: client,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -673,14 +677,11 @@ func setupTestSchedulerWithVolumeBinding(fakeVolumeBinder *volumebinder.VolumeBi
|
|||||||
informerFactory := informers.NewSharedInformerFactory(client, 0)
|
informerFactory := informers.NewSharedInformerFactory(client, 0)
|
||||||
|
|
||||||
recorder := broadcaster.NewRecorder(scheme.Scheme, "scheduler")
|
recorder := broadcaster.NewRecorder(scheme.Scheme, "scheduler")
|
||||||
volumeBindingNewFunc := func(_ *runtime.Unknown, _ framework.FrameworkHandle) (framework.Plugin, error) {
|
|
||||||
return volumebinding.NewFromVolumeBinder(fakeVolumeBinder), nil
|
|
||||||
}
|
|
||||||
fns := []st.RegisterPluginFunc{
|
fns := []st.RegisterPluginFunc{
|
||||||
st.RegisterQueueSortPlugin(queuesort.Name, queuesort.New),
|
st.RegisterQueueSortPlugin(queuesort.Name, queuesort.New),
|
||||||
st.RegisterFilterPlugin(volumebinding.Name, volumeBindingNewFunc),
|
st.RegisterFilterPlugin(volumebinding.Name, volumebinding.New),
|
||||||
}
|
}
|
||||||
s, bindingChan, errChan := setupTestScheduler(queuedPodStore, scache, informerFactory, recorder, fns...)
|
s, bindingChan, errChan := setupTestScheduler(queuedPodStore, scache, informerFactory, recorder, fakeVolumeBinder, fns...)
|
||||||
informerFactory.Start(stop)
|
informerFactory.Start(stop)
|
||||||
informerFactory.WaitForCacheSync(stop)
|
informerFactory.WaitForCacheSync(stop)
|
||||||
s.VolumeBinder = fakeVolumeBinder
|
s.VolumeBinder = fakeVolumeBinder
|
||||||
|
Loading…
Reference in New Issue
Block a user