mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 05:57:25 +00:00
Merge pull request #103468 from Huang-Wei/fix-sched-cc
instantiates scheduler ComponentConfig after parsing feature gates
This commit is contained in:
commit
17f6f28621
@ -69,7 +69,7 @@ func (o *DeprecatedOptions) Validate() []error {
|
|||||||
return errs
|
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.
|
// 1. --use-legacy-policy-config to use a policy file.
|
||||||
// 2. --policy-configmap to use a policy config map value.
|
// 2. --policy-configmap to use a policy config map value.
|
||||||
|
@ -71,28 +71,14 @@ type Options struct {
|
|||||||
|
|
||||||
// NewOptions returns default scheduler app options.
|
// NewOptions returns default scheduler app options.
|
||||||
func NewOptions() (*Options, error) {
|
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{
|
o := &Options{
|
||||||
ComponentConfig: *cfg,
|
|
||||||
SecureServing: apiserveroptions.NewSecureServingOptions().WithLoopback(),
|
SecureServing: apiserveroptions.NewSecureServingOptions().WithLoopback(),
|
||||||
CombinedInsecureServing: &CombinedInsecureServingOptions{
|
CombinedInsecureServing: &CombinedInsecureServingOptions{
|
||||||
Healthz: (&apiserveroptions.DeprecatedInsecureServingOptions{
|
Healthz: (&apiserveroptions.DeprecatedInsecureServingOptions{
|
||||||
BindNetwork: "tcp",
|
BindNetwork: "tcp",
|
||||||
}).WithLoopback(),
|
}).WithLoopback(),
|
||||||
Metrics: (&apiserveroptions.DeprecatedInsecureServingOptions{
|
Metrics: (&apiserveroptions.DeprecatedInsecureServingOptions{
|
||||||
BindNetwork: "tcp",
|
BindNetwork: "tcp"}).WithLoopback(),
|
||||||
}).WithLoopback(),
|
|
||||||
BindPort: hport,
|
|
||||||
BindAddress: hhost,
|
|
||||||
},
|
},
|
||||||
Authentication: apiserveroptions.NewDelegatingAuthenticationOptions(),
|
Authentication: apiserveroptions.NewDelegatingAuthenticationOptions(),
|
||||||
Authorization: apiserveroptions.NewDelegatingAuthorizationOptions(),
|
Authorization: apiserveroptions.NewDelegatingAuthorizationOptions(),
|
||||||
@ -116,6 +102,81 @@ func NewOptions() (*Options, error) {
|
|||||||
return o, nil
|
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) {
|
func splitHostIntPort(s string) (string, int, error) {
|
||||||
host, port, err := net.SplitHostPort(s)
|
host, port, err := net.SplitHostPort(s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -68,6 +68,7 @@ func NewSchedulerCommand(registryOptions ...Option) *cobra.Command {
|
|||||||
klog.Fatalf("unable to initialize command options: %v", err)
|
klog.Fatalf("unable to initialize command options: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namedFlagSets := opts.Flags()
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "kube-scheduler",
|
Use: "kube-scheduler",
|
||||||
Long: `The Kubernetes scheduler is a control plane process which assigns
|
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/)
|
See [scheduling](https://kubernetes.io/docs/concepts/scheduling-eviction/)
|
||||||
for more information about scheduling and the kube-scheduler component.`,
|
for more information about scheduling and the kube-scheduler component.`,
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
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 {
|
if err := runCommand(cmd, opts, registryOptions...); err != nil {
|
||||||
fmt.Fprintf(os.Stderr, "%v\n", err)
|
fmt.Fprintf(os.Stderr, "%v\n", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
@ -94,7 +99,6 @@ for more information about scheduling and the kube-scheduler component.`,
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
fs := cmd.Flags()
|
fs := cmd.Flags()
|
||||||
namedFlagSets := opts.Flags()
|
|
||||||
verflag.AddFlags(namedFlagSets.FlagSet("global"))
|
verflag.AddFlags(namedFlagSets.FlagSet("global"))
|
||||||
globalflag.AddGlobalFlags(namedFlagSets.FlagSet("global"), cmd.Name())
|
globalflag.AddGlobalFlags(namedFlagSets.FlagSet("global"), cmd.Name())
|
||||||
for _, f := range namedFlagSets.FlagSets {
|
for _, f := range namedFlagSets.FlagSets {
|
||||||
|
@ -249,6 +249,18 @@ profiles:
|
|||||||
t.Fatal(err)
|
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
|
// use listeners instead of static ports so parallel test runs don't conflict
|
||||||
opts.SecureServing.Listener = makeListener(t)
|
opts.SecureServing.Listener = makeListener(t)
|
||||||
defer opts.SecureServing.Listener.Close()
|
defer opts.SecureServing.Listener.Close()
|
||||||
@ -257,13 +269,6 @@ profiles:
|
|||||||
opts.CombinedInsecureServing.Healthz.Listener = makeListener(t)
|
opts.CombinedInsecureServing.Healthz.Listener = makeListener(t)
|
||||||
defer opts.CombinedInsecureServing.Healthz.Listener.Close()
|
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())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
defer cancel()
|
defer cancel()
|
||||||
_, sched, err := Setup(ctx, opts)
|
_, sched, err := Setup(ctx, opts)
|
||||||
|
@ -86,13 +86,17 @@ func StartTestServer(t Logger, customFlags []string) (result TestServer, err err
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return TestServer{}, err
|
return TestServer{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
namedFlagSets := opts.Flags()
|
namedFlagSets := opts.Flags()
|
||||||
for _, f := range namedFlagSets.FlagSets {
|
for _, f := range namedFlagSets.FlagSets {
|
||||||
fs.AddFlagSet(f)
|
fs.AddFlagSet(f)
|
||||||
}
|
}
|
||||||
|
|
||||||
fs.Parse(customFlags)
|
fs.Parse(customFlags)
|
||||||
|
|
||||||
|
if err := opts.Complete(&namedFlagSets); err != nil {
|
||||||
|
return TestServer{}, err
|
||||||
|
}
|
||||||
|
|
||||||
if opts.SecureServing.BindPort != 0 {
|
if opts.SecureServing.BindPort != 0 {
|
||||||
opts.SecureServing.Listener, opts.SecureServing.BindPort, err = createListenerOnFreePort()
|
opts.SecureServing.Listener, opts.SecureServing.BindPort, err = createListenerOnFreePort()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -23,7 +23,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/scheduler/apis/config/scheme"
|
"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.
|
// This function needs to be updated whenever we bump the scheduler's component config version.
|
||||||
func Default() (*config.KubeSchedulerConfiguration, error) {
|
func Default() (*config.KubeSchedulerConfiguration, error) {
|
||||||
versionedCfg := v1beta2.KubeSchedulerConfiguration{}
|
versionedCfg := v1beta2.KubeSchedulerConfiguration{}
|
||||||
|
Loading…
Reference in New Issue
Block a user