mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 13:37:30 +00:00
Merge pull request #82432 from draveness/feature/expose-kubernetes-client-in-framework-handle
feat(scheduler): expose kubernetes client in the framework handle
This commit is contained in:
commit
f2ee75cfa2
@ -22,7 +22,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/api/errors"
|
"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"
|
||||||
@ -403,7 +403,12 @@ func (c *Configurator) CreateFromKeys(predicateKeys, priorityKeys sets.String, e
|
|||||||
pluginConfig = append(pluginConfig, pluginConfigForPriorities...)
|
pluginConfig = append(pluginConfig, pluginConfigForPriorities...)
|
||||||
pluginConfig = append(pluginConfig, c.pluginConfig...)
|
pluginConfig = append(pluginConfig, c.pluginConfig...)
|
||||||
|
|
||||||
framework, err := framework.NewFramework(c.registry, &plugins, pluginConfig)
|
framework, err := framework.NewFramework(
|
||||||
|
c.registry,
|
||||||
|
&plugins,
|
||||||
|
pluginConfig,
|
||||||
|
framework.WithClientSet(c.client),
|
||||||
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
klog.Fatalf("error initializing the scheduling framework: %v", err)
|
klog.Fatalf("error initializing the scheduling framework: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ go_library(
|
|||||||
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/util/json:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/util/json: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/client-go/kubernetes: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",
|
||||||
"//vendor/k8s.io/klog:go_default_library",
|
"//vendor/k8s.io/klog:go_default_library",
|
||||||
"//vendor/sigs.k8s.io/yaml:go_default_library",
|
"//vendor/sigs.k8s.io/yaml:go_default_library",
|
||||||
|
@ -26,6 +26,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
"k8s.io/client-go/util/workqueue"
|
"k8s.io/client-go/util/workqueue"
|
||||||
"k8s.io/klog"
|
"k8s.io/klog"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/apis/config"
|
"k8s.io/kubernetes/pkg/scheduler/apis/config"
|
||||||
@ -56,6 +57,8 @@ type framework struct {
|
|||||||
postBindPlugins []PostBindPlugin
|
postBindPlugins []PostBindPlugin
|
||||||
unreservePlugins []UnreservePlugin
|
unreservePlugins []UnreservePlugin
|
||||||
permitPlugins []PermitPlugin
|
permitPlugins []PermitPlugin
|
||||||
|
|
||||||
|
clientSet clientset.Interface
|
||||||
}
|
}
|
||||||
|
|
||||||
// extensionPoint encapsulates desired and applied set of plugins at a specific extension
|
// extensionPoint encapsulates desired and applied set of plugins at a specific extension
|
||||||
@ -85,15 +88,37 @@ func (f *framework) getExtensionPoints(plugins *config.Plugins) []extensionPoint
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type frameworkOptions struct {
|
||||||
|
clientSet clientset.Interface
|
||||||
|
}
|
||||||
|
|
||||||
|
// Option for the framework.
|
||||||
|
type Option func(*frameworkOptions)
|
||||||
|
|
||||||
|
// WithClientSet sets clientSet for the scheduling framework.
|
||||||
|
func WithClientSet(clientSet clientset.Interface) Option {
|
||||||
|
return func(o *frameworkOptions) {
|
||||||
|
o.clientSet = clientSet
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var defaultFrameworkOptions = frameworkOptions{}
|
||||||
|
|
||||||
var _ = Framework(&framework{})
|
var _ = Framework(&framework{})
|
||||||
|
|
||||||
// NewFramework initializes plugins given the configuration and the registry.
|
// NewFramework initializes plugins given the configuration and the registry.
|
||||||
func NewFramework(r Registry, plugins *config.Plugins, args []config.PluginConfig) (Framework, error) {
|
func NewFramework(r Registry, plugins *config.Plugins, args []config.PluginConfig, opts ...Option) (Framework, error) {
|
||||||
|
options := defaultFrameworkOptions
|
||||||
|
for _, opt := range opts {
|
||||||
|
opt(&options)
|
||||||
|
}
|
||||||
|
|
||||||
f := &framework{
|
f := &framework{
|
||||||
registry: r,
|
registry: r,
|
||||||
nodeInfoSnapshot: schedulernodeinfo.NewSnapshot(),
|
nodeInfoSnapshot: schedulernodeinfo.NewSnapshot(),
|
||||||
pluginNameToWeightMap: make(map[string]int),
|
pluginNameToWeightMap: make(map[string]int),
|
||||||
waitingPods: newWaitingPodsMap(),
|
waitingPods: newWaitingPodsMap(),
|
||||||
|
clientSet: options.clientSet,
|
||||||
}
|
}
|
||||||
if plugins == nil {
|
if plugins == nil {
|
||||||
return f, nil
|
return f, nil
|
||||||
@ -552,6 +577,11 @@ func (f *framework) ListPlugins() map[string][]string {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ClientSet returns a kubernetes clientset.
|
||||||
|
func (f *framework) ClientSet() clientset.Interface {
|
||||||
|
return f.clientSet
|
||||||
|
}
|
||||||
|
|
||||||
func (f *framework) pluginsNeeded(plugins *config.Plugins) map[string]config.Plugin {
|
func (f *framework) pluginsNeeded(plugins *config.Plugins) map[string]config.Plugin {
|
||||||
pgMap := make(map[string]config.Plugin, 0)
|
pgMap := make(map[string]config.Plugin, 0)
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@ import (
|
|||||||
|
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
|
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -429,4 +430,7 @@ type FrameworkHandle interface {
|
|||||||
|
|
||||||
// GetWaitingPod returns a waiting pod given its UID.
|
// GetWaitingPod returns a waiting pod given its UID.
|
||||||
GetWaitingPod(uid types.UID) WaitingPod
|
GetWaitingPod(uid types.UID) WaitingPod
|
||||||
|
|
||||||
|
// ClientSet returns a kubernetes clientSet.
|
||||||
|
ClientSet() clientset.Interface
|
||||||
}
|
}
|
||||||
|
@ -42,6 +42,7 @@ go_test(
|
|||||||
"//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/types:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/util/clock:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/util/clock:go_default_library",
|
||||||
|
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
|
||||||
"//vendor/github.com/prometheus/client_model/go:go_default_library",
|
"//vendor/github.com/prometheus/client_model/go:go_default_library",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
@ -28,6 +28,7 @@ import (
|
|||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
"k8s.io/apimachinery/pkg/util/clock"
|
"k8s.io/apimachinery/pkg/util/clock"
|
||||||
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
|
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
|
||||||
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
|
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/metrics"
|
"k8s.io/kubernetes/pkg/scheduler/metrics"
|
||||||
@ -221,6 +222,10 @@ func (*fakeFramework) GetWaitingPod(uid types.UID) framework.WaitingPod {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (*fakeFramework) ClientSet() clientset.Interface {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func TestPriorityQueue_AddWithReversePriorityLessFunc(t *testing.T) {
|
func TestPriorityQueue_AddWithReversePriorityLessFunc(t *testing.T) {
|
||||||
q := NewPriorityQueue(nil, &fakeFramework{})
|
q := NewPriorityQueue(nil, &fakeFramework{})
|
||||||
if err := q.Add(&medPriorityPod); err != nil {
|
if err := q.Add(&medPriorityPod); err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user