Skip to content

Commit badcd4a

Browse files
authored
Merge pull request kubernetes#84084 from wojtek-t/migrate_scheduler_to_endpoints_lease_lock
Migrate components to EndpointsLeases leader election lock
2 parents 5856397 + fafbad4 commit badcd4a

File tree

7 files changed

+72
-13
lines changed

7 files changed

+72
-13
lines changed

cmd/cloud-controller-manager/app/options/options_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func TestDefaultFlags(t *testing.T) {
4949
},
5050
ControllerStartInterval: metav1.Duration{Duration: 0},
5151
LeaderElection: componentbaseconfig.LeaderElectionConfiguration{
52-
ResourceLock: "endpoints",
52+
ResourceLock: "endpointsleases",
5353
LeaderElect: true,
5454
LeaseDuration: metav1.Duration{Duration: 15 * time.Second},
5555
RenewDeadline: metav1.Duration{Duration: 10 * time.Second},

cmd/kube-scheduler/app/options/options_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ pluginConfig:
266266
LeaseDuration: metav1.Duration{Duration: 15 * time.Second},
267267
RenewDeadline: metav1.Duration{Duration: 10 * time.Second},
268268
RetryPeriod: metav1.Duration{Duration: 2 * time.Second},
269-
ResourceLock: "endpoints",
269+
ResourceLock: "endpointsleases",
270270
ResourceNamespace: "kube-system",
271271
ResourceName: "kube-scheduler",
272272
},
@@ -348,7 +348,7 @@ pluginConfig:
348348
LeaseDuration: metav1.Duration{Duration: 15 * time.Second},
349349
RenewDeadline: metav1.Duration{Duration: 10 * time.Second},
350350
RetryPeriod: metav1.Duration{Duration: 2 * time.Second},
351-
ResourceLock: "endpoints",
351+
ResourceLock: "endpointsleases",
352352
ResourceNamespace: "kube-system",
353353
ResourceName: "kube-scheduler",
354354
},
@@ -411,7 +411,7 @@ pluginConfig:
411411
LeaseDuration: metav1.Duration{Duration: 15 * time.Second},
412412
RenewDeadline: metav1.Duration{Duration: 10 * time.Second},
413413
RetryPeriod: metav1.Duration{Duration: 2 * time.Second},
414-
ResourceLock: "endpoints",
414+
ResourceLock: "endpointsleases",
415415
ResourceNamespace: "kube-system",
416416
ResourceName: "kube-scheduler",
417417
},

pkg/controller/apis/config/v1alpha1/defaults.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,10 @@ func RecommendedDefaultGenericControllerManagerConfiguration(obj *kubectrlmgrcon
126126
obj.Controllers = []string{"*"}
127127
}
128128

129+
if len(obj.LeaderElection.ResourceLock) == 0 {
130+
obj.LeaderElection.ResourceLock = "endpointsleases"
131+
}
132+
129133
// Use the default ClientConnectionConfiguration and LeaderElectionConfiguration options
130134
componentbaseconfigv1alpha1.RecommendedDefaultClientConnectionConfiguration(&obj.ClientConnection)
131135
componentbaseconfigv1alpha1.RecommendedDefaultLeaderElectionConfiguration(&obj.LeaderElection)

pkg/scheduler/apis/config/v1alpha1/defaults.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ func SetDefaults_KubeSchedulerConfiguration(obj *kubeschedulerconfigv1alpha1.Kub
7373
obj.MetricsBindAddress = net.JoinHostPort("0.0.0.0", strconv.Itoa(ports.InsecureSchedulerPort))
7474
}
7575

76+
if len(obj.LeaderElection.ResourceLock) == 0 {
77+
obj.LeaderElection.ResourceLock = "endpointsleases"
78+
}
7679
if len(obj.LeaderElection.LockObjectNamespace) == 0 && len(obj.LeaderElection.ResourceNamespace) == 0 {
7780
obj.LeaderElection.LockObjectNamespace = kubeschedulerconfigv1alpha1.SchedulerDefaultLockObjectNamespace
7881
}

plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ const (
4545
autoscalingGroup = "autoscaling"
4646
batchGroup = "batch"
4747
certificatesGroup = "certificates.k8s.io"
48+
coordinationGroup = "coordination.k8s.io"
4849
discoveryGroup = "discovery.k8s.io"
4950
extensionsGroup = "extensions"
5051
policyGroup = "policy"
@@ -172,7 +173,7 @@ func NodeRules() []rbacv1.PolicyRule {
172173

173174
// Node leases
174175
if utilfeature.DefaultFeatureGate.Enabled(features.NodeLease) {
175-
nodePolicyRules = append(nodePolicyRules, rbacv1helpers.NewRule("get", "create", "update", "patch", "delete").Groups("coordination.k8s.io").Resources("leases").RuleOrDie())
176+
nodePolicyRules = append(nodePolicyRules, rbacv1helpers.NewRule("get", "create", "update", "patch", "delete").Groups(coordinationGroup).Resources("leases").RuleOrDie())
176177
}
177178

178179
// RuntimeClass
@@ -394,10 +395,17 @@ func ClusterRoles() []rbacv1.ClusterRole {
394395
ObjectMeta: metav1.ObjectMeta{Name: "system:kube-controller-manager"},
395396
Rules: []rbacv1.PolicyRule{
396397
eventsRule(),
397-
rbacv1helpers.NewRule("create").Groups(legacyGroup).Resources("endpoints", "secrets", "serviceaccounts").RuleOrDie(),
398+
// Needed for leader election.
399+
rbacv1helpers.NewRule("create").Groups(coordinationGroup).Resources("leases").RuleOrDie(),
400+
rbacv1helpers.NewRule("get", "update").Groups(coordinationGroup).Resources("leases").Names("kube-controller-manager").RuleOrDie(),
401+
// TODO: Remove once we fully migrate to lease in leader-election.
402+
rbacv1helpers.NewRule("create").Groups(legacyGroup).Resources("endpoints").RuleOrDie(),
403+
rbacv1helpers.NewRule("get", "update").Groups(legacyGroup).Resources("endpoints").Names("kube-controller-manager").RuleOrDie(),
404+
// Fundamental resources.
405+
rbacv1helpers.NewRule("create").Groups(legacyGroup).Resources("secrets", "serviceaccounts").RuleOrDie(),
398406
rbacv1helpers.NewRule("delete").Groups(legacyGroup).Resources("secrets").RuleOrDie(),
399-
rbacv1helpers.NewRule("get").Groups(legacyGroup).Resources("endpoints", "namespaces", "secrets", "serviceaccounts", "configmaps").RuleOrDie(),
400-
rbacv1helpers.NewRule("update").Groups(legacyGroup).Resources("endpoints", "secrets", "serviceaccounts").RuleOrDie(),
407+
rbacv1helpers.NewRule("get").Groups(legacyGroup).Resources("namespaces", "secrets", "serviceaccounts", "configmaps").RuleOrDie(),
408+
rbacv1helpers.NewRule("update").Groups(legacyGroup).Resources("secrets", "serviceaccounts").RuleOrDie(),
401409
// Needed to check API access. These creates are non-mutating
402410
rbacv1helpers.NewRule("create").Groups(authenticationGroup).Resources("tokenreviews").RuleOrDie(),
403411
rbacv1helpers.NewRule("create").Groups(authorizationGroup).Resources("subjectaccessreviews").RuleOrDie(),
@@ -471,8 +479,11 @@ func ClusterRoles() []rbacv1.ClusterRole {
471479
eventsRule(),
472480
// This is for leaderlease access
473481
// TODO: scope this to the kube-system namespace
482+
rbacv1helpers.NewRule("create").Groups(coordinationGroup).Resources("leases").RuleOrDie(),
483+
rbacv1helpers.NewRule("get", "update").Groups(coordinationGroup).Resources("leases").Names("kube-scheduler").RuleOrDie(),
484+
// TODO: Remove once we fully migrate to lease in leader-election.
474485
rbacv1helpers.NewRule("create").Groups(legacyGroup).Resources("endpoints").RuleOrDie(),
475-
rbacv1helpers.NewRule("get", "update", "patch", "delete").Groups(legacyGroup).Resources("endpoints").Names("kube-scheduler").RuleOrDie(),
486+
rbacv1helpers.NewRule("get", "update").Groups(legacyGroup).Resources("endpoints").Names("kube-scheduler").RuleOrDie(),
476487

477488
// Fundamental resources
478489
rbacv1helpers.NewRule(Read...).Groups(legacyGroup).Resources("nodes").RuleOrDie(),

plugin/pkg/auth/authorizer/rbac/bootstrappolicy/testdata/cluster-roles.yaml

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -510,10 +510,39 @@ items:
510510
- create
511511
- patch
512512
- update
513+
- apiGroups:
514+
- coordination.k8s.io
515+
resources:
516+
- leases
517+
verbs:
518+
- create
519+
- apiGroups:
520+
- coordination.k8s.io
521+
resourceNames:
522+
- kube-controller-manager
523+
resources:
524+
- leases
525+
verbs:
526+
- get
527+
- update
513528
- apiGroups:
514529
- ""
515530
resources:
516531
- endpoints
532+
verbs:
533+
- create
534+
- apiGroups:
535+
- ""
536+
resourceNames:
537+
- kube-controller-manager
538+
resources:
539+
- endpoints
540+
verbs:
541+
- get
542+
- update
543+
- apiGroups:
544+
- ""
545+
resources:
517546
- secrets
518547
- serviceaccounts
519548
verbs:
@@ -528,7 +557,6 @@ items:
528557
- ""
529558
resources:
530559
- configmaps
531-
- endpoints
532560
- namespaces
533561
- secrets
534562
- serviceaccounts
@@ -537,7 +565,6 @@ items:
537565
- apiGroups:
538566
- ""
539567
resources:
540-
- endpoints
541568
- secrets
542569
- serviceaccounts
543570
verbs:
@@ -604,6 +631,21 @@ items:
604631
- create
605632
- patch
606633
- update
634+
- apiGroups:
635+
- coordination.k8s.io
636+
resources:
637+
- leases
638+
verbs:
639+
- create
640+
- apiGroups:
641+
- coordination.k8s.io
642+
resourceNames:
643+
- kube-scheduler
644+
resources:
645+
- leases
646+
verbs:
647+
- get
648+
- update
607649
- apiGroups:
608650
- ""
609651
resources:
@@ -617,9 +659,7 @@ items:
617659
resources:
618660
- endpoints
619661
verbs:
620-
- delete
621662
- get
622-
- patch
623663
- update
624664
- apiGroups:
625665
- ""

staging/src/k8s.io/component-base/config/v1alpha1/defaults.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ func RecommendedDefaultLeaderElectionConfiguration(obj *LeaderElectionConfigurat
4444
obj.RetryPeriod = metav1.Duration{Duration: 2 * time.Second}
4545
}
4646
if obj.ResourceLock == "" {
47+
// TODO: Migrate to LeaseLock.
4748
obj.ResourceLock = EndpointsResourceLock
4849
}
4950
if obj.LeaderElect == nil {

0 commit comments

Comments
 (0)