mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 12:15:52 +00:00
instantiates scheduler ComponentConfig after parsing feature gates
This commit is contained in:
parent
61e30f1355
commit
4c9c761bbb
@ -69,7 +69,7 @@ func (o *DeprecatedOptions) Validate() []error {
|
||||
return errs
|
||||
}
|
||||
|
||||
// ApplyPolicySourceTo sets cfg.PolicySource from flags passed on the command line in the following precedence order:
|
||||
// ApplyTo sets cfg.PolicySource from flags passed on the command line in the following precedence order:
|
||||
//
|
||||
// 1. --use-legacy-policy-config to use a policy file.
|
||||
// 2. --policy-configmap to use a policy config map value.
|
||||
|
@ -71,28 +71,14 @@ type Options struct {
|
||||
|
||||
// NewOptions returns default scheduler app options.
|
||||
func NewOptions() (*Options, error) {
|
||||
cfg, err := latest.Default()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
hhost, hport, err := splitHostIntPort(cfg.HealthzBindAddress)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
o := &Options{
|
||||
ComponentConfig: *cfg,
|
||||
SecureServing: apiserveroptions.NewSecureServingOptions().WithLoopback(),
|
||||
SecureServing: apiserveroptions.NewSecureServingOptions().WithLoopback(),
|
||||
CombinedInsecureServing: &CombinedInsecureServingOptions{
|
||||
Healthz: (&apiserveroptions.DeprecatedInsecureServingOptions{
|
||||
BindNetwork: "tcp",
|
||||
}).WithLoopback(),
|
||||
Metrics: (&apiserveroptions.DeprecatedInsecureServingOptions{
|
||||
BindNetwork: "tcp",
|
||||
}).WithLoopback(),
|
||||
BindPort: hport,
|
||||
BindAddress: hhost,
|
||||
BindNetwork: "tcp"}).WithLoopback(),
|
||||
},
|
||||
Authentication: apiserveroptions.NewDelegatingAuthenticationOptions(),
|
||||
Authorization: apiserveroptions.NewDelegatingAuthorizationOptions(),
|
||||
@ -116,6 +102,81 @@ func NewOptions() (*Options, error) {
|
||||
return o, nil
|
||||
}
|
||||
|
||||
// Complete completes the remaining instantiation of the options obj.
|
||||
// In particular, it injects the latest internal versioned ComponentConfig.
|
||||
func (o *Options) Complete(nfs *cliflag.NamedFlagSets) error {
|
||||
cfg, err := latest.Default()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
hhost, hport, err := splitHostIntPort(cfg.HealthzBindAddress)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// Obtain CLI args related with insecure serving.
|
||||
// If not specified in command line, derive the default settings from cfg.
|
||||
insecureServing := nfs.FlagSet("insecure serving")
|
||||
if !insecureServing.Changed("address") {
|
||||
o.CombinedInsecureServing.BindAddress = hhost
|
||||
}
|
||||
if !insecureServing.Changed("port") {
|
||||
o.CombinedInsecureServing.BindPort = hport
|
||||
}
|
||||
// Obtain deprecated CLI args. Set them to cfg if specified in command line.
|
||||
deprecated := nfs.FlagSet("deprecated")
|
||||
if deprecated.Changed("profiling") {
|
||||
cfg.EnableProfiling = o.ComponentConfig.EnableProfiling
|
||||
}
|
||||
if deprecated.Changed("contention-profiling") {
|
||||
cfg.EnableContentionProfiling = o.ComponentConfig.EnableContentionProfiling
|
||||
}
|
||||
if deprecated.Changed("kubeconfig") {
|
||||
cfg.ClientConnection.Kubeconfig = o.ComponentConfig.ClientConnection.Kubeconfig
|
||||
}
|
||||
if deprecated.Changed("kube-api-content-type") {
|
||||
cfg.ClientConnection.ContentType = o.ComponentConfig.ClientConnection.ContentType
|
||||
}
|
||||
if deprecated.Changed("kube-api-qps") {
|
||||
cfg.ClientConnection.QPS = o.ComponentConfig.ClientConnection.QPS
|
||||
}
|
||||
if deprecated.Changed("kube-api-burst") {
|
||||
cfg.ClientConnection.Burst = o.ComponentConfig.ClientConnection.Burst
|
||||
}
|
||||
if deprecated.Changed("lock-object-namespace") {
|
||||
cfg.LeaderElection.ResourceNamespace = o.ComponentConfig.LeaderElection.ResourceNamespace
|
||||
}
|
||||
if deprecated.Changed("lock-object-name") {
|
||||
cfg.LeaderElection.ResourceName = o.ComponentConfig.LeaderElection.ResourceName
|
||||
}
|
||||
// Obtain CLI args related with leaderelection. Set them to cfg if specified in command line.
|
||||
leaderelection := nfs.FlagSet("leader election")
|
||||
if leaderelection.Changed("leader-elect") {
|
||||
cfg.LeaderElection.LeaderElect = o.ComponentConfig.LeaderElection.LeaderElect
|
||||
}
|
||||
if leaderelection.Changed("leader-elect-lease-duration") {
|
||||
cfg.LeaderElection.LeaseDuration = o.ComponentConfig.LeaderElection.LeaseDuration
|
||||
}
|
||||
if leaderelection.Changed("leader-elect-renew-deadline") {
|
||||
cfg.LeaderElection.RenewDeadline = o.ComponentConfig.LeaderElection.RenewDeadline
|
||||
}
|
||||
if leaderelection.Changed("leader-elect-retry-period") {
|
||||
cfg.LeaderElection.RetryPeriod = o.ComponentConfig.LeaderElection.RetryPeriod
|
||||
}
|
||||
if leaderelection.Changed("leader-elect-resource-lock") {
|
||||
cfg.LeaderElection.ResourceLock = o.ComponentConfig.LeaderElection.ResourceLock
|
||||
}
|
||||
if leaderelection.Changed("leader-elect-resource-name") {
|
||||
cfg.LeaderElection.ResourceName = o.ComponentConfig.LeaderElection.ResourceName
|
||||
}
|
||||
if leaderelection.Changed("leader-elect-resource-namespace") {
|
||||
cfg.LeaderElection.ResourceNamespace = o.ComponentConfig.LeaderElection.ResourceNamespace
|
||||
}
|
||||
|
||||
o.ComponentConfig = *cfg
|
||||
return nil
|
||||
}
|
||||
|
||||
func splitHostIntPort(s string) (string, int, error) {
|
||||
host, port, err := net.SplitHostPort(s)
|
||||
if err != nil {
|
||||
|
@ -68,6 +68,7 @@ func NewSchedulerCommand(registryOptions ...Option) *cobra.Command {
|
||||
klog.Fatalf("unable to initialize command options: %v", err)
|
||||
}
|
||||
|
||||
namedFlagSets := opts.Flags()
|
||||
cmd := &cobra.Command{
|
||||
Use: "kube-scheduler",
|
||||
Long: `The Kubernetes scheduler is a control plane process which assigns
|
||||
@ -79,6 +80,10 @@ kube-scheduler is the reference implementation.
|
||||
See [scheduling](https://kubernetes.io/docs/concepts/scheduling-eviction/)
|
||||
for more information about scheduling and the kube-scheduler component.`,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
if err := opts.Complete(&namedFlagSets); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "%v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
if err := runCommand(cmd, opts, registryOptions...); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "%v\n", err)
|
||||
os.Exit(1)
|
||||
@ -94,7 +99,6 @@ for more information about scheduling and the kube-scheduler component.`,
|
||||
},
|
||||
}
|
||||
fs := cmd.Flags()
|
||||
namedFlagSets := opts.Flags()
|
||||
verflag.AddFlags(namedFlagSets.FlagSet("global"))
|
||||
globalflag.AddGlobalFlags(namedFlagSets.FlagSet("global"), cmd.Name())
|
||||
for _, f := range namedFlagSets.FlagSets {
|
||||
|
@ -249,6 +249,18 @@ profiles:
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
nfs := opts.Flags()
|
||||
for _, f := range nfs.FlagSets {
|
||||
fs.AddFlagSet(f)
|
||||
}
|
||||
if err := fs.Parse(tc.flags); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if err := opts.Complete(&nfs); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// use listeners instead of static ports so parallel test runs don't conflict
|
||||
opts.SecureServing.Listener = makeListener(t)
|
||||
defer opts.SecureServing.Listener.Close()
|
||||
@ -257,13 +269,6 @@ profiles:
|
||||
opts.CombinedInsecureServing.Healthz.Listener = makeListener(t)
|
||||
defer opts.CombinedInsecureServing.Healthz.Listener.Close()
|
||||
|
||||
for _, f := range opts.Flags().FlagSets {
|
||||
fs.AddFlagSet(f)
|
||||
}
|
||||
if err := fs.Parse(tc.flags); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
_, sched, err := Setup(ctx, opts)
|
||||
|
@ -86,13 +86,17 @@ func StartTestServer(t Logger, customFlags []string) (result TestServer, err err
|
||||
if err != nil {
|
||||
return TestServer{}, err
|
||||
}
|
||||
|
||||
namedFlagSets := opts.Flags()
|
||||
for _, f := range namedFlagSets.FlagSets {
|
||||
fs.AddFlagSet(f)
|
||||
}
|
||||
|
||||
fs.Parse(customFlags)
|
||||
|
||||
if err := opts.Complete(&namedFlagSets); err != nil {
|
||||
return TestServer{}, err
|
||||
}
|
||||
|
||||
if opts.SecureServing.BindPort != 0 {
|
||||
opts.SecureServing.Listener, opts.SecureServing.BindPort, err = createListenerOnFreePort()
|
||||
if err != nil {
|
||||
|
@ -23,7 +23,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/scheduler/apis/config/scheme"
|
||||
)
|
||||
|
||||
// Default creates a default configuration of the latset versioned type.
|
||||
// Default creates a default configuration of the latest versioned type.
|
||||
// This function needs to be updated whenever we bump the scheduler's component config version.
|
||||
func Default() (*config.KubeSchedulerConfiguration, error) {
|
||||
versionedCfg := v1beta2.KubeSchedulerConfiguration{}
|
||||
|
Loading…
Reference in New Issue
Block a user