mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-10-31 02:08:13 +00:00 
			
		
		
		
	Merge pull request #44404 from bsalamat/config_fix
Automatic merge from submit-queue Scheduler configurator looks for a specific key in ConfigMap.Data **What this PR does / why we need it**: Changes scheduler configurator to look for a specific key in ConfigMap.Data instead of the old logic which expected only one entry to exist in the map. The key is a constant whose value is "policy.cfg". **Which issue this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close that issue when PR gets merged)*: fixes # **Special notes for your reviewer**: **Release note**: ```release-note ```
This commit is contained in:
		| @@ -139,17 +139,13 @@ func (sc schedulerConfigurator) getSchedulerPolicyConfig() (*schedulerapi.Policy | |||||||
| 			return nil, fmt.Errorf("Error getting scheduler policy ConfigMap: %v.", err) | 			return nil, fmt.Errorf("Error getting scheduler policy ConfigMap: %v.", err) | ||||||
| 		} | 		} | ||||||
| 		if policyConfigMap != nil { | 		if policyConfigMap != nil { | ||||||
| 			// We expect the first element in the Data member of the ConfigMap to | 			var configString string | ||||||
| 			// contain the policy config. | 			configString, policyConfigMapFound = policyConfigMap.Data[options.SchedulerPolicyConfigMapKey] | ||||||
| 			if len(policyConfigMap.Data) != 1 { | 			if !policyConfigMapFound { | ||||||
| 				return nil, fmt.Errorf("ConfigMap %v has %v entries in its 'Data'. It must have only one.", sc.policyConfigMap, len(policyConfigMap.Data)) | 				return nil, fmt.Errorf("No element with key = '%v' is found in the ConfigMap 'Data'.", options.SchedulerPolicyConfigMapKey) | ||||||
| 			} |  | ||||||
| 			policyConfigMapFound = true |  | ||||||
| 			// This loop should iterate only once, as we have already checked the length of Data. |  | ||||||
| 			for _, val := range policyConfigMap.Data { |  | ||||||
| 				glog.V(5).Infof("Scheduler policy ConfigMap: %v", val) |  | ||||||
| 				configData = []byte(val) |  | ||||||
| 			} | 			} | ||||||
|  | 			glog.V(5).Infof("Scheduler policy ConfigMap: %v", configString) | ||||||
|  | 			configData = []byte(configString) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -18,6 +18,8 @@ limitations under the License. | |||||||
| package options | package options | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
|  | 	"fmt" | ||||||
|  |  | ||||||
| 	utilfeature "k8s.io/apiserver/pkg/util/feature" | 	utilfeature "k8s.io/apiserver/pkg/util/feature" | ||||||
| 	"k8s.io/kubernetes/pkg/api" | 	"k8s.io/kubernetes/pkg/api" | ||||||
| 	"k8s.io/kubernetes/pkg/apis/componentconfig" | 	"k8s.io/kubernetes/pkg/apis/componentconfig" | ||||||
| @@ -33,6 +35,10 @@ import ( | |||||||
| 	"github.com/spf13/pflag" | 	"github.com/spf13/pflag" | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | // SchedulerPolicyConfigMapKey defines the key of the element in the | ||||||
|  | // scheduler's policy ConfigMap that contains scheduler's policy config. | ||||||
|  | const SchedulerPolicyConfigMapKey string = "policy.cfg" | ||||||
|  |  | ||||||
| // SchedulerServer has all the context and params needed to run a Scheduler | // SchedulerServer has all the context and params needed to run a Scheduler | ||||||
| type SchedulerServer struct { | type SchedulerServer struct { | ||||||
| 	componentconfig.KubeSchedulerConfiguration | 	componentconfig.KubeSchedulerConfiguration | ||||||
| @@ -64,7 +70,8 @@ func (s *SchedulerServer) AddFlags(fs *pflag.FlagSet) { | |||||||
| 	fs.StringVar(&s.Address, "address", s.Address, "The IP address to serve on (set to 0.0.0.0 for all interfaces)") | 	fs.StringVar(&s.Address, "address", s.Address, "The IP address to serve on (set to 0.0.0.0 for all interfaces)") | ||||||
| 	fs.StringVar(&s.AlgorithmProvider, "algorithm-provider", s.AlgorithmProvider, "The scheduling algorithm provider to use, one of: "+factory.ListAlgorithmProviders()) | 	fs.StringVar(&s.AlgorithmProvider, "algorithm-provider", s.AlgorithmProvider, "The scheduling algorithm provider to use, one of: "+factory.ListAlgorithmProviders()) | ||||||
| 	fs.StringVar(&s.PolicyConfigFile, "policy-config-file", s.PolicyConfigFile, "File with scheduler policy configuration. This file is used if policy ConfigMap is not provided or --use-legacy-policy-config==true") | 	fs.StringVar(&s.PolicyConfigFile, "policy-config-file", s.PolicyConfigFile, "File with scheduler policy configuration. This file is used if policy ConfigMap is not provided or --use-legacy-policy-config==true") | ||||||
| 	fs.StringVar(&s.PolicyConfigMapName, "policy-configmap", s.PolicyConfigMapName, "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") | 	usage := fmt.Sprintf("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'", SchedulerPolicyConfigMapKey) | ||||||
|  | 	fs.StringVar(&s.PolicyConfigMapName, "policy-configmap", s.PolicyConfigMapName, usage) | ||||||
| 	fs.StringVar(&s.PolicyConfigMapNamespace, "policy-configmap-namespace", s.PolicyConfigMapNamespace, "The namespace where policy ConfigMap is located. The system namespace will be used if this is not provided or is empty.") | 	fs.StringVar(&s.PolicyConfigMapNamespace, "policy-configmap-namespace", s.PolicyConfigMapNamespace, "The namespace where policy ConfigMap is located. The system namespace will be used if this is not provided or is empty.") | ||||||
| 	fs.BoolVar(&s.UseLegacyPolicyConfig, "use-legacy-policy-config", false, "When set to true, scheduler will ignore policy ConfigMap and uses policy config file") | 	fs.BoolVar(&s.UseLegacyPolicyConfig, "use-legacy-policy-config", false, "When set to true, scheduler will ignore policy ConfigMap and uses policy config file") | ||||||
| 	fs.BoolVar(&s.EnableProfiling, "profiling", true, "Enable profiling via web interface host:port/debug/pprof/") | 	fs.BoolVar(&s.EnableProfiling, "profiling", true, "Enable profiling via web interface host:port/debug/pprof/") | ||||||
|   | |||||||
| @@ -99,7 +99,7 @@ func TestSchedulerCreationFromConfigMap(t *testing.T) { | |||||||
| 	policyConfigMap := v1.ConfigMap{ | 	policyConfigMap := v1.ConfigMap{ | ||||||
| 		ObjectMeta: metav1.ObjectMeta{Namespace: metav1.NamespaceSystem, Name: configPolicyName}, | 		ObjectMeta: metav1.ObjectMeta{Namespace: metav1.NamespaceSystem, Name: configPolicyName}, | ||||||
| 		Data: map[string]string{ | 		Data: map[string]string{ | ||||||
| 			"scheduler-policy-config.json": `{ | 			options.SchedulerPolicyConfigMapKey: `{ | ||||||
| 			"kind" : "Policy", | 			"kind" : "Policy", | ||||||
| 			"apiVersion" : "v1", | 			"apiVersion" : "v1", | ||||||
| 			"predicates" : [ | 			"predicates" : [ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Kubernetes Submit Queue
					Kubernetes Submit Queue