Skip to content

Commit 730174f

Browse files
feat: using LeaseLock for election (#8921)
We removed the use of configmap as an election lock, so we will use the Lease API to complete the election. Before this, we used `MultiLock` to facilitate smooth migration of existing users of ingress-nginx from configmap to LeaseLock. Signed-off-by: Jintao Zhang <[email protected]> Signed-off-by: Jintao Zhang <[email protected]>
1 parent fe09f6d commit 730174f

File tree

3 files changed

+8
-32
lines changed

3 files changed

+8
-32
lines changed

charts/ingress-nginx/templates/controller-role.yaml

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -58,21 +58,6 @@ rules:
5858
- get
5959
- list
6060
- watch
61-
- apiGroups:
62-
- ""
63-
resources:
64-
- configmaps
65-
resourceNames:
66-
- {{ .Values.controller.electionID }}
67-
verbs:
68-
- get
69-
- update
70-
- apiGroups:
71-
- ""
72-
resources:
73-
- configmaps
74-
verbs:
75-
- create
7661
- apiGroups:
7762
- coordination.k8s.io
7863
resources:

internal/ingress/controller/status.go

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -99,25 +99,16 @@ func setupLeaderElection(config *leaderElectionConfig) {
9999
EventRecorder: recorder,
100100
}
101101

102-
// TODO: If we upgrade client-go to v0.24 then we can only use LeaseLock.
103-
// MultiLock is used for lock's migration
104-
lock := resourcelock.MultiLock{
105-
Primary: &resourcelock.ConfigMapLock{
106-
ConfigMapMeta: objectMeta,
107-
Client: config.Client.CoreV1(),
108-
LockConfig: resourceLockConfig,
109-
},
110-
Secondary: &resourcelock.LeaseLock{
111-
LeaseMeta: objectMeta,
112-
Client: config.Client.CoordinationV1(),
113-
LockConfig: resourceLockConfig,
114-
},
102+
lock := &resourcelock.LeaseLock{
103+
LeaseMeta: objectMeta,
104+
Client: config.Client.CoordinationV1(),
105+
LockConfig: resourceLockConfig,
115106
}
116107

117108
ttl := 30 * time.Second
118109

119110
elector, err := leaderelection.NewLeaderElector(leaderelection.LeaderElectionConfig{
120-
Lock: &lock,
111+
Lock: lock,
121112
LeaseDuration: ttl,
122113
RenewDeadline: ttl / 2,
123114
RetryPeriod: ttl / 4,

test/e2e/status/update.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,10 @@ var _ = framework.IngressNginxDescribe("[Status] status update", func() {
9292
assert.Nil(ginkgo.GinkgoT(), err, "unexpected error cleaning Ingress status")
9393
framework.Sleep(10 * time.Second)
9494

95-
err = f.KubeClientSet.CoreV1().
96-
ConfigMaps(f.Namespace).
95+
err = f.KubeClientSet.CoordinationV1().
96+
Leases(f.Namespace).
9797
Delete(context.TODO(), "ingress-controller-leader", metav1.DeleteOptions{})
98-
assert.Nil(ginkgo.GinkgoT(), err, "unexpected error deleting leader election configmap")
98+
assert.Nil(ginkgo.GinkgoT(), err, "unexpected error deleting leader election lease")
9999

100100
_, cmd, err = f.KubectlProxy(port)
101101
assert.Nil(ginkgo.GinkgoT(), err, "unexpected error starting kubectl proxy")

0 commit comments

Comments
 (0)