Skip to content

Commit 7ba3e55

Browse files
authored
Merge pull request #1773 from joelanford/feat/leader-election-use-leases-only
⚠ leaderelection: use 'leases' as default resource lock object
2 parents f529380 + 6c4d947 commit 7ba3e55

File tree

2 files changed

+18
-15
lines changed

2 files changed

+18
-15
lines changed

pkg/leaderelection/leader_election.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
corev1client "k8s.io/client-go/kubernetes/typed/core/v1"
2828
"k8s.io/client-go/rest"
2929
"k8s.io/client-go/tools/leaderelection/resourcelock"
30+
3031
"sigs.k8s.io/controller-runtime/pkg/recorder"
3132
)
3233

@@ -39,7 +40,7 @@ type Options struct {
3940
LeaderElection bool
4041

4142
// LeaderElectionResourceLock determines which resource lock to use for leader election,
42-
// defaults to "configmapsleases".
43+
// defaults to "leases".
4344
LeaderElectionResourceLock string
4445

4546
// LeaderElectionNamespace determines the namespace in which the leader
@@ -57,11 +58,12 @@ func NewResourceLock(config *rest.Config, recorderProvider recorder.Provider, op
5758
return nil, nil
5859
}
5960

60-
// Default resource lock to "configmapsleases". We must keep this default until we are sure all controller-runtime
61-
// users have upgraded from the original default ConfigMap lock to a controller-runtime version that has this new
62-
// default. Many users of controller-runtime skip versions, so we should be extremely conservative here.
61+
// Default resource lock to "leases". The previous default (from v0.7.0 to v0.11.x) was configmapsleases, which was
62+
// used to migrate from configmaps to leases. Since the default was "configmapsleases" for over a year, spanning
63+
// five minor releases, any actively maintained operators are very likely to have a released version that uses
64+
// "configmapsleases". Therefore defaulting to "leases" should be safe.
6365
if options.LeaderElectionResourceLock == "" {
64-
options.LeaderElectionResourceLock = resourcelock.ConfigMapsLeasesResourceLock
66+
options.LeaderElectionResourceLock = resourcelock.LeasesResourceLock
6567
}
6668

6769
// LeaderElectionID must be provided to prevent clashes

pkg/manager/manager_test.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import (
4040
"k8s.io/client-go/rest"
4141
"k8s.io/client-go/tools/leaderelection/resourcelock"
4242
configv1alpha1 "k8s.io/component-base/config/v1alpha1"
43+
4344
"sigs.k8s.io/controller-runtime/pkg/cache"
4445
"sigs.k8s.io/controller-runtime/pkg/cache/informertest"
4546
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -446,33 +447,33 @@ var _ = Describe("manger.Manager", func() {
446447
// We must keep this default until we are sure all controller-runtime users have upgraded from the original default
447448
// ConfigMap lock to a controller-runtime version that has this new default. Many users of controller-runtime skip
448449
// versions, so we should be extremely conservative here.
449-
It("should default to ConfigMapsLeasesResourceLock", func() {
450+
It("should default to LeasesResourceLock", func() {
450451
m, err := New(cfg, Options{LeaderElection: true, LeaderElectionID: "controller-runtime", LeaderElectionNamespace: "my-ns"})
451452
Expect(m).ToNot(BeNil())
452453
Expect(err).ToNot(HaveOccurred())
453454
cm, ok := m.(*controllerManager)
454455
Expect(ok).To(BeTrue())
455-
multilock, isMultiLock := cm.resourceLock.(*resourcelock.MultiLock)
456-
Expect(isMultiLock).To(BeTrue())
457-
_, primaryIsConfigMapLock := multilock.Primary.(*resourcelock.ConfigMapLock)
458-
Expect(primaryIsConfigMapLock).To(BeTrue())
459-
_, secondaryIsLeaseLock := multilock.Secondary.(*resourcelock.LeaseLock)
460-
Expect(secondaryIsLeaseLock).To(BeTrue())
456+
_, isLeaseLock := cm.resourceLock.(*resourcelock.LeaseLock)
457+
Expect(isLeaseLock).To(BeTrue())
461458

462459
})
463460
It("should use the specified ResourceLock", func() {
464461
m, err := New(cfg, Options{
465462
LeaderElection: true,
466-
LeaderElectionResourceLock: resourcelock.LeasesResourceLock,
463+
LeaderElectionResourceLock: resourcelock.ConfigMapsLeasesResourceLock,
467464
LeaderElectionID: "controller-runtime",
468465
LeaderElectionNamespace: "my-ns",
469466
})
470467
Expect(m).ToNot(BeNil())
471468
Expect(err).ToNot(HaveOccurred())
472469
cm, ok := m.(*controllerManager)
473470
Expect(ok).To(BeTrue())
474-
_, isLeaseLock := cm.resourceLock.(*resourcelock.LeaseLock)
475-
Expect(isLeaseLock).To(BeTrue())
471+
multilock, isMultiLock := cm.resourceLock.(*resourcelock.MultiLock)
472+
Expect(isMultiLock).To(BeTrue())
473+
_, primaryIsConfigMapLock := multilock.Primary.(*resourcelock.ConfigMapLock)
474+
Expect(primaryIsConfigMapLock).To(BeTrue())
475+
_, secondaryIsLeaseLock := multilock.Secondary.(*resourcelock.LeaseLock)
476+
Expect(secondaryIsLeaseLock).To(BeTrue())
476477
})
477478
It("should release lease if ElectionReleaseOnCancel is true", func() {
478479
var rl resourcelock.Interface

0 commit comments

Comments
 (0)