mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-08 11:38:15 +00:00
Pass registry parameter to scheduler instead of global singleton
This commit is contained in:
parent
ea8e1e01c5
commit
e9793c8bdb
@ -7,6 +7,7 @@ go_library(
|
|||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
deps = [
|
deps = [
|
||||||
"//pkg/scheduler/apis/config:go_default_library",
|
"//pkg/scheduler/apis/config:go_default_library",
|
||||||
|
"//pkg/scheduler/framework/v1alpha1:go_default_library",
|
||||||
"//staging/src/k8s.io/apiserver/pkg/server:go_default_library",
|
"//staging/src/k8s.io/apiserver/pkg/server:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/informers:go_default_library",
|
"//staging/src/k8s.io/client-go/informers:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/informers/core/v1:go_default_library",
|
"//staging/src/k8s.io/client-go/informers/core/v1:go_default_library",
|
||||||
|
@ -26,6 +26,7 @@ import (
|
|||||||
"k8s.io/client-go/tools/leaderelection"
|
"k8s.io/client-go/tools/leaderelection"
|
||||||
"k8s.io/client-go/tools/record"
|
"k8s.io/client-go/tools/record"
|
||||||
kubeschedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config"
|
kubeschedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config"
|
||||||
|
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Config has all the context to run a Scheduler
|
// Config has all the context to run a Scheduler
|
||||||
@ -51,6 +52,9 @@ type Config struct {
|
|||||||
|
|
||||||
// LeaderElection is optional.
|
// LeaderElection is optional.
|
||||||
LeaderElection *leaderelection.LeaderElectionConfig
|
LeaderElection *leaderelection.LeaderElectionConfig
|
||||||
|
|
||||||
|
// Registry is a collection of all available plugins.
|
||||||
|
Registry framework.Registry
|
||||||
}
|
}
|
||||||
|
|
||||||
type completedConfig struct {
|
type completedConfig struct {
|
||||||
@ -73,6 +77,9 @@ func (c *Config) Complete() CompletedConfig {
|
|||||||
if c.InsecureMetricsServing != nil {
|
if c.InsecureMetricsServing != nil {
|
||||||
c.InsecureMetricsServing.Name = "metrics"
|
c.InsecureMetricsServing.Name = "metrics"
|
||||||
}
|
}
|
||||||
|
if c.Registry == nil {
|
||||||
|
c.Registry = framework.NewRegistry()
|
||||||
|
}
|
||||||
|
|
||||||
apiserver.AuthorizeClientBearerToken(c.LoopbackClientConfig, &c.Authentication, &c.Authorization)
|
apiserver.AuthorizeClientBearerToken(c.LoopbackClientConfig, &c.Authentication, &c.Authorization)
|
||||||
|
|
||||||
|
@ -58,10 +58,13 @@ import (
|
|||||||
"k8s.io/klog"
|
"k8s.io/klog"
|
||||||
)
|
)
|
||||||
|
|
||||||
var frameworkRegistry = framework.NewRegistry()
|
|
||||||
|
|
||||||
// NewSchedulerCommand creates a *cobra.Command object with default parameters
|
// NewSchedulerCommand creates a *cobra.Command object with default parameters
|
||||||
func NewSchedulerCommand() *cobra.Command {
|
func NewSchedulerCommand() *cobra.Command {
|
||||||
|
return NewSchedulerCommandWithRegistry(nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewSchedulerCommandWithRegistry creates a *cobra.Command object with registry and default parameters
|
||||||
|
func NewSchedulerCommandWithRegistry(registry framework.Registry) *cobra.Command {
|
||||||
opts, err := options.NewOptions()
|
opts, err := options.NewOptions()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
klog.Fatalf("unable to initialize command options: %v", err)
|
klog.Fatalf("unable to initialize command options: %v", err)
|
||||||
@ -77,7 +80,7 @@ constraints, affinity and anti-affinity specifications, data locality, inter-wor
|
|||||||
interference, deadlines, and so on. Workload-specific requirements will be exposed
|
interference, deadlines, and so on. Workload-specific requirements will be exposed
|
||||||
through the API as necessary.`,
|
through the API as necessary.`,
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
if err := runCommand(cmd, args, opts); err != nil {
|
if err := runCommand(cmd, args, opts, registry); err != nil {
|
||||||
fmt.Fprintf(os.Stderr, "%v\n", err)
|
fmt.Fprintf(os.Stderr, "%v\n", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
@ -108,7 +111,7 @@ through the API as necessary.`,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// runCommand runs the scheduler.
|
// runCommand runs the scheduler.
|
||||||
func runCommand(cmd *cobra.Command, args []string, opts *options.Options) error {
|
func runCommand(cmd *cobra.Command, args []string, opts *options.Options, registry framework.Registry) error {
|
||||||
verflag.PrintAndExitIfRequested()
|
verflag.PrintAndExitIfRequested()
|
||||||
utilflag.PrintFlags(cmd.Flags())
|
utilflag.PrintFlags(cmd.Flags())
|
||||||
|
|
||||||
@ -137,6 +140,10 @@ func runCommand(cmd *cobra.Command, args []string, opts *options.Options) error
|
|||||||
|
|
||||||
stopCh := make(chan struct{})
|
stopCh := make(chan struct{})
|
||||||
|
|
||||||
|
if registry != nil {
|
||||||
|
c.Registry = registry
|
||||||
|
}
|
||||||
|
|
||||||
// Get the completed config
|
// Get the completed config
|
||||||
cc := c.Complete()
|
cc := c.Complete()
|
||||||
|
|
||||||
@ -177,7 +184,7 @@ func Run(cc schedulerserverconfig.CompletedConfig, stopCh <-chan struct{}) error
|
|||||||
cc.Recorder,
|
cc.Recorder,
|
||||||
cc.ComponentConfig.AlgorithmSource,
|
cc.ComponentConfig.AlgorithmSource,
|
||||||
stopCh,
|
stopCh,
|
||||||
frameworkRegistry,
|
cc.Registry,
|
||||||
cc.ComponentConfig.Plugins,
|
cc.ComponentConfig.Plugins,
|
||||||
cc.ComponentConfig.PluginConfig,
|
cc.ComponentConfig.PluginConfig,
|
||||||
scheduler.WithName(cc.ComponentConfig.SchedulerName),
|
scheduler.WithName(cc.ComponentConfig.SchedulerName),
|
||||||
@ -328,9 +335,3 @@ func newHealthzHandler(config *kubeschedulerconfig.KubeSchedulerConfiguration, s
|
|||||||
}
|
}
|
||||||
return pathRecorderMux
|
return pathRecorderMux
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegisterFrameworkPlugin adds a new plugin to the registry. If a plugin with the same name
|
|
||||||
// exists, it returns an error.
|
|
||||||
func RegisterFrameworkPlugin(name string, factory framework.PluginFactory) error {
|
|
||||||
return frameworkRegistry.Register(name, factory)
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user