mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-11-04 07:49:35 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			150 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
/*
 | 
						|
Copyright 2018 The Kubernetes Authors.
 | 
						|
 | 
						|
Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
you may not use this file except in compliance with the License.
 | 
						|
You may obtain a copy of the License at
 | 
						|
 | 
						|
    http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
 | 
						|
Unless required by applicable law or agreed to in writing, software
 | 
						|
distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
See the License for the specific language governing permissions and
 | 
						|
limitations under the License.
 | 
						|
*/
 | 
						|
 | 
						|
package options
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
 | 
						|
	"github.com/spf13/pflag"
 | 
						|
	"k8s.io/apimachinery/pkg/util/validation/field"
 | 
						|
	"k8s.io/kubernetes/pkg/scheduler/algorithmprovider"
 | 
						|
	kubeschedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config"
 | 
						|
	"k8s.io/kubernetes/pkg/scheduler/apis/config/validation"
 | 
						|
	"k8s.io/kubernetes/pkg/scheduler/framework/plugins/interpodaffinity"
 | 
						|
)
 | 
						|
 | 
						|
// DeprecatedOptions contains deprecated options and their flags.
 | 
						|
// TODO remove these fields once the deprecated flags are removed.
 | 
						|
type DeprecatedOptions struct {
 | 
						|
	// The fields below here are placeholders for flags that can't be directly
 | 
						|
	// mapped into componentconfig.KubeSchedulerConfiguration.
 | 
						|
	PolicyConfigFile               string
 | 
						|
	PolicyConfigMapName            string
 | 
						|
	PolicyConfigMapNamespace       string
 | 
						|
	UseLegacyPolicyConfig          bool
 | 
						|
	AlgorithmProvider              string
 | 
						|
	HardPodAffinitySymmetricWeight int32
 | 
						|
	SchedulerName                  string
 | 
						|
}
 | 
						|
 | 
						|
// AddFlags adds flags for the deprecated options.
 | 
						|
func (o *DeprecatedOptions) AddFlags(fs *pflag.FlagSet, cfg *kubeschedulerconfig.KubeSchedulerConfiguration) {
 | 
						|
	if o == nil {
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	fs.StringVar(&o.AlgorithmProvider, "algorithm-provider", o.AlgorithmProvider, "DEPRECATED: the scheduling algorithm provider to use, this sets the default plugins for component config profiles. Choose one of: "+algorithmprovider.ListAlgorithmProviders())
 | 
						|
	fs.StringVar(&o.PolicyConfigFile, "policy-config-file", o.PolicyConfigFile, "DEPRECATED: file with scheduler policy configuration. This file is used if policy ConfigMap is not provided or --use-legacy-policy-config=true. Note: The scheduler will fail if this is combined with Plugin configs")
 | 
						|
	usage := fmt.Sprintf("DEPRECATED: name of the ConfigMap object that contains scheduler's policy configuration. It must exist in the system namespace before scheduler initialization if --use-legacy-policy-config=false. The config must be provided as the value of an element in 'Data' map with the key='%v'. Note: The scheduler will fail if this is combined with Plugin configs", kubeschedulerconfig.SchedulerPolicyConfigMapKey)
 | 
						|
	fs.StringVar(&o.PolicyConfigMapName, "policy-configmap", o.PolicyConfigMapName, usage)
 | 
						|
	fs.StringVar(&o.PolicyConfigMapNamespace, "policy-configmap-namespace", o.PolicyConfigMapNamespace, "DEPRECATED: the namespace where policy ConfigMap is located. The kube-system namespace will be used if this is not provided or is empty. Note: The scheduler will fail if this is combined with Plugin configs")
 | 
						|
	fs.BoolVar(&o.UseLegacyPolicyConfig, "use-legacy-policy-config", o.UseLegacyPolicyConfig, "DEPRECATED: when set to true, scheduler will ignore policy ConfigMap and uses policy config file. Note: The scheduler will fail if this is combined with Plugin configs")
 | 
						|
 | 
						|
	fs.BoolVar(&cfg.EnableProfiling, "profiling", cfg.EnableProfiling, "DEPRECATED: enable profiling via web interface host:port/debug/pprof/")
 | 
						|
	fs.BoolVar(&cfg.EnableContentionProfiling, "contention-profiling", cfg.EnableContentionProfiling, "DEPRECATED: enable lock contention profiling, if profiling is enabled")
 | 
						|
	fs.StringVar(&cfg.ClientConnection.Kubeconfig, "kubeconfig", cfg.ClientConnection.Kubeconfig, "DEPRECATED: path to kubeconfig file with authorization and master location information.")
 | 
						|
	fs.StringVar(&cfg.ClientConnection.ContentType, "kube-api-content-type", cfg.ClientConnection.ContentType, "DEPRECATED: content type of requests sent to apiserver.")
 | 
						|
	fs.Float32Var(&cfg.ClientConnection.QPS, "kube-api-qps", cfg.ClientConnection.QPS, "DEPRECATED: QPS to use while talking with kubernetes apiserver")
 | 
						|
	fs.Int32Var(&cfg.ClientConnection.Burst, "kube-api-burst", cfg.ClientConnection.Burst, "DEPRECATED: burst to use while talking with kubernetes apiserver")
 | 
						|
	fs.StringVar(&cfg.LeaderElection.ResourceNamespace, "lock-object-namespace", cfg.LeaderElection.ResourceNamespace, "DEPRECATED: define the namespace of the lock object. Will be removed in favor of leader-elect-resource-namespace.")
 | 
						|
	fs.StringVar(&cfg.LeaderElection.ResourceName, "lock-object-name", cfg.LeaderElection.ResourceName, "DEPRECATED: define the name of the lock object. Will be removed in favor of leader-elect-resource-name")
 | 
						|
 | 
						|
	fs.Int32Var(&o.HardPodAffinitySymmetricWeight, "hard-pod-affinity-symmetric-weight", o.HardPodAffinitySymmetricWeight,
 | 
						|
		"DEPRECATED: RequiredDuringScheduling affinity is not symmetric, but there is an implicit PreferredDuringScheduling affinity rule corresponding "+
 | 
						|
			"to every RequiredDuringScheduling affinity rule. --hard-pod-affinity-symmetric-weight represents the weight of implicit PreferredDuringScheduling affinity rule. Must be in the range 0-100."+
 | 
						|
			"This option was moved to the policy configuration file")
 | 
						|
	fs.StringVar(&o.SchedulerName, "scheduler-name", o.SchedulerName, "DEPRECATED: name of the scheduler, used to select which pods will be processed by this scheduler, based on pod's \"spec.schedulerName\".")
 | 
						|
	// MarkDeprecated hides the flag from the help. We don't want that:
 | 
						|
	// fs.MarkDeprecated("hard-pod-affinity-symmetric-weight", "This option was moved to the policy configuration file")
 | 
						|
}
 | 
						|
 | 
						|
// Validate validates the deprecated scheduler options.
 | 
						|
func (o *DeprecatedOptions) Validate() []error {
 | 
						|
	var errs []error
 | 
						|
 | 
						|
	if o.UseLegacyPolicyConfig && len(o.PolicyConfigFile) == 0 {
 | 
						|
		errs = append(errs, field.Required(field.NewPath("policyConfigFile"), "required when --use-legacy-policy-config is true"))
 | 
						|
	}
 | 
						|
 | 
						|
	if err := validation.ValidateHardPodAffinityWeight(field.NewPath("hardPodAffinitySymmetricWeight"), o.HardPodAffinitySymmetricWeight); err != nil {
 | 
						|
		errs = append(errs, err)
 | 
						|
	}
 | 
						|
 | 
						|
	return errs
 | 
						|
}
 | 
						|
 | 
						|
// ApplyAlgorithmSourceTo sets cfg.AlgorithmSource 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.
 | 
						|
// 3. --algorithm-provider to use a named algorithm provider.
 | 
						|
func (o *DeprecatedOptions) ApplyAlgorithmSourceTo(cfg *kubeschedulerconfig.KubeSchedulerConfiguration) {
 | 
						|
	if o == nil {
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	switch {
 | 
						|
	case o.UseLegacyPolicyConfig || (len(o.PolicyConfigFile) > 0 && o.PolicyConfigMapName == ""):
 | 
						|
		cfg.AlgorithmSource = kubeschedulerconfig.SchedulerAlgorithmSource{
 | 
						|
			Policy: &kubeschedulerconfig.SchedulerPolicySource{
 | 
						|
				File: &kubeschedulerconfig.SchedulerPolicyFileSource{
 | 
						|
					Path: o.PolicyConfigFile,
 | 
						|
				},
 | 
						|
			},
 | 
						|
		}
 | 
						|
	case len(o.PolicyConfigMapName) > 0:
 | 
						|
		cfg.AlgorithmSource = kubeschedulerconfig.SchedulerAlgorithmSource{
 | 
						|
			Policy: &kubeschedulerconfig.SchedulerPolicySource{
 | 
						|
				ConfigMap: &kubeschedulerconfig.SchedulerPolicyConfigMapSource{
 | 
						|
					Name:      o.PolicyConfigMapName,
 | 
						|
					Namespace: o.PolicyConfigMapNamespace,
 | 
						|
				},
 | 
						|
			},
 | 
						|
		}
 | 
						|
	case len(o.AlgorithmProvider) > 0:
 | 
						|
		cfg.AlgorithmSource = kubeschedulerconfig.SchedulerAlgorithmSource{
 | 
						|
			Provider: &o.AlgorithmProvider,
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// ApplyTo sets a default profile plugin config if no config file is specified
 | 
						|
// It also calls ApplyAlgorithmSourceTo to set Policy settings in AlgorithmSource, if applicable.
 | 
						|
// Deprecated flags have an effect iff no config file was provided, in which
 | 
						|
// case this function expects a default KubeSchedulerConfiguration instance,
 | 
						|
// which has a single profile.
 | 
						|
func (o *DeprecatedOptions) ApplyTo(cfg *kubeschedulerconfig.KubeSchedulerConfiguration) {
 | 
						|
	if o == nil {
 | 
						|
		return
 | 
						|
	}
 | 
						|
	// The following deprecated options affect the only existing profile that is
 | 
						|
	// added by default.
 | 
						|
	profile := &cfg.Profiles[0]
 | 
						|
	if len(o.SchedulerName) > 0 {
 | 
						|
		profile.SchedulerName = o.SchedulerName
 | 
						|
	}
 | 
						|
	plCfg := kubeschedulerconfig.PluginConfig{
 | 
						|
		Name: interpodaffinity.Name,
 | 
						|
		Args: &kubeschedulerconfig.InterPodAffinityArgs{
 | 
						|
			HardPodAffinityWeight: o.HardPodAffinitySymmetricWeight,
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	profile.PluginConfig = append(profile.PluginConfig, plCfg)
 | 
						|
	o.ApplyAlgorithmSourceTo(cfg)
 | 
						|
}
 |