mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-10-30 17:58:14 +00:00 
			
		
		
		
	Multiple scheduler leader election support
This commit is contained in:
		| @@ -702,5 +702,7 @@ windows-line-endings | |||||||
| www-prefix | www-prefix | ||||||
| zone-id | zone-id | ||||||
| zone-name | zone-name | ||||||
|  | lock-object-name | ||||||
|  | lock-object-namespace | ||||||
|  |  | ||||||
| horizontal-pod-autoscaler-use-rest-clients | horizontal-pod-autoscaler-use-rest-clients | ||||||
|   | |||||||
| @@ -595,6 +595,10 @@ type KubeSchedulerConfiguration struct { | |||||||
| 	FailureDomains string | 	FailureDomains string | ||||||
| 	// leaderElection defines the configuration of leader election client. | 	// leaderElection defines the configuration of leader election client. | ||||||
| 	LeaderElection LeaderElectionConfiguration | 	LeaderElection LeaderElectionConfiguration | ||||||
|  | 	// LockObjectNamespace defines the namespace of the lock object | ||||||
|  | 	LockObjectNamespace string | ||||||
|  | 	// LockObjectName defines the lock object name | ||||||
|  | 	LockObjectName string | ||||||
| } | } | ||||||
|  |  | ||||||
| // LeaderElectionConfiguration defines the configuration of leader election | // LeaderElectionConfiguration defines the configuration of leader election | ||||||
| @@ -904,3 +908,11 @@ func (m *ConfigurationMap) Set(value string) error { | |||||||
| func (*ConfigurationMap) Type() string { | func (*ConfigurationMap) Type() string { | ||||||
| 	return "mapStringString" | 	return "mapStringString" | ||||||
| } | } | ||||||
|  |  | ||||||
|  | const ( | ||||||
|  | 	// "kube-system" is the default scheduler lock object namespace | ||||||
|  | 	SchedulerDefaultLockObjectNamespace string = "kube-system" | ||||||
|  |  | ||||||
|  | 	// "kube-scheduler" is the default scheduler lock object name | ||||||
|  | 	SchedulerDefaultLockObjectName = "kube-scheduler" | ||||||
|  | ) | ||||||
|   | |||||||
| @@ -158,6 +158,12 @@ func SetDefaults_KubeSchedulerConfiguration(obj *KubeSchedulerConfiguration) { | |||||||
| 	if obj.FailureDomains == "" { | 	if obj.FailureDomains == "" { | ||||||
| 		obj.FailureDomains = api.DefaultFailureDomains | 		obj.FailureDomains = api.DefaultFailureDomains | ||||||
| 	} | 	} | ||||||
|  | 	if obj.LockObjectNamespace == "" { | ||||||
|  | 		obj.LockObjectNamespace = SchedulerDefaultLockObjectNamespace | ||||||
|  | 	} | ||||||
|  | 	if obj.LockObjectName == "" { | ||||||
|  | 		obj.LockObjectName = SchedulerDefaultLockObjectName | ||||||
|  | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| func SetDefaults_LeaderElectionConfiguration(obj *LeaderElectionConfiguration) { | func SetDefaults_LeaderElectionConfiguration(obj *LeaderElectionConfiguration) { | ||||||
|   | |||||||
| @@ -130,6 +130,10 @@ type KubeSchedulerConfiguration struct { | |||||||
| 	FailureDomains string `json:"failureDomains"` | 	FailureDomains string `json:"failureDomains"` | ||||||
| 	// leaderElection defines the configuration of leader election client. | 	// leaderElection defines the configuration of leader election client. | ||||||
| 	LeaderElection LeaderElectionConfiguration `json:"leaderElection"` | 	LeaderElection LeaderElectionConfiguration `json:"leaderElection"` | ||||||
|  | 	// LockObjectNamespace defines the namespace of the lock object | ||||||
|  | 	LockObjectNamespace string `json:"lockObjectNamespace"` | ||||||
|  | 	// LockObjectName defines the lock object name | ||||||
|  | 	LockObjectName string `json:"lockObjectName"` | ||||||
| } | } | ||||||
|  |  | ||||||
| // HairpinMode denotes how the kubelet should configure networking to handle | // HairpinMode denotes how the kubelet should configure networking to handle | ||||||
| @@ -600,3 +604,11 @@ type KubeletAnonymousAuthentication struct { | |||||||
| 	// Anonymous requests have a username of system:anonymous, and a group name of system:unauthenticated. | 	// Anonymous requests have a username of system:anonymous, and a group name of system:unauthenticated. | ||||||
| 	Enabled *bool `json:"enabled"` | 	Enabled *bool `json:"enabled"` | ||||||
| } | } | ||||||
|  |  | ||||||
|  | const ( | ||||||
|  | 	// "kube-system" is the default scheduler lock object namespace | ||||||
|  | 	SchedulerDefaultLockObjectNamespace string = "kube-system" | ||||||
|  |  | ||||||
|  | 	// "kube-scheduler" is the default scheduler lock object name | ||||||
|  | 	SchedulerDefaultLockObjectName = "kube-scheduler" | ||||||
|  | ) | ||||||
|   | |||||||
| @@ -72,6 +72,8 @@ func (s *SchedulerServer) AddFlags(fs *pflag.FlagSet) { | |||||||
| 	fs.Float32Var(&s.KubeAPIQPS, "kube-api-qps", s.KubeAPIQPS, "QPS to use while talking with kubernetes apiserver") | 	fs.Float32Var(&s.KubeAPIQPS, "kube-api-qps", s.KubeAPIQPS, "QPS to use while talking with kubernetes apiserver") | ||||||
| 	fs.Int32Var(&s.KubeAPIBurst, "kube-api-burst", s.KubeAPIBurst, "Burst to use while talking with kubernetes apiserver") | 	fs.Int32Var(&s.KubeAPIBurst, "kube-api-burst", s.KubeAPIBurst, "Burst to use while talking with kubernetes apiserver") | ||||||
| 	fs.StringVar(&s.SchedulerName, "scheduler-name", s.SchedulerName, "Name of the scheduler, used to select which pods will be processed by this scheduler, based on pod's \"spec.SchedulerName\".") | 	fs.StringVar(&s.SchedulerName, "scheduler-name", s.SchedulerName, "Name of the scheduler, used to select which pods will be processed by this scheduler, based on pod's \"spec.SchedulerName\".") | ||||||
|  | 	fs.StringVar(&s.LockObjectNamespace, "lock-object-namespace", s.LockObjectNamespace, "Define the namespace of the lock object.") | ||||||
|  | 	fs.StringVar(&s.LockObjectName, "lock-object-name", s.LockObjectName, "Define the name of the lock object.") | ||||||
| 	fs.IntVar(&s.HardPodAffinitySymmetricWeight, "hard-pod-affinity-symmetric-weight", api.DefaultHardPodAffinitySymmetricWeight, | 	fs.IntVar(&s.HardPodAffinitySymmetricWeight, "hard-pod-affinity-symmetric-weight", api.DefaultHardPodAffinitySymmetricWeight, | ||||||
| 		"RequiredDuringScheduling affinity is not symmetric, but there is an implicit PreferredDuringScheduling affinity rule corresponding "+ | 		"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.") | 			"to every RequiredDuringScheduling affinity rule. --hard-pod-affinity-symmetric-weight represents the weight of implicit PreferredDuringScheduling affinity rule.") | ||||||
|   | |||||||
| @@ -113,8 +113,8 @@ func Run(s *options.SchedulerServer) error { | |||||||
| 	// TODO: enable other lock types | 	// TODO: enable other lock types | ||||||
| 	rl := &resourcelock.EndpointsLock{ | 	rl := &resourcelock.EndpointsLock{ | ||||||
| 		EndpointsMeta: metav1.ObjectMeta{ | 		EndpointsMeta: metav1.ObjectMeta{ | ||||||
| 			Namespace: "kube-system", | 			Namespace: s.LockObjectNamespace, | ||||||
| 			Name:      "kube-scheduler", | 			Name:      s.LockObjectName, | ||||||
| 		}, | 		}, | ||||||
| 		Client: kubecli, | 		Client: kubecli, | ||||||
| 		LockConfig: resourcelock.ResourceLockConfig{ | 		LockConfig: resourcelock.ResourceLockConfig{ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Haoran Wang
					Haoran Wang