From 3aee7416e571dd0fc287548c4be06864fe54f122 Mon Sep 17 00:00:00 2001 From: Jintao Zhang Date: Tue, 23 Aug 2022 06:38:16 +0800 Subject: [PATCH] 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 Signed-off-by: Jintao Zhang --- .../templates/controller-role.yaml | 15 --------------- internal/ingress/controller/status.go | 19 +++++-------------- test/e2e/status/update.go | 6 +++--- 3 files changed, 8 insertions(+), 32 deletions(-) diff --git a/charts/ingress-nginx/templates/controller-role.yaml b/charts/ingress-nginx/templates/controller-role.yaml index 8e5f8a0d7..7a10adb52 100644 --- a/charts/ingress-nginx/templates/controller-role.yaml +++ b/charts/ingress-nginx/templates/controller-role.yaml @@ -58,21 +58,6 @@ rules: - get - list - watch - - apiGroups: - - "" - resources: - - configmaps - resourceNames: - - {{ .Values.controller.electionID }} - verbs: - - get - - update - - apiGroups: - - "" - resources: - - configmaps - verbs: - - create - apiGroups: - coordination.k8s.io resources: diff --git a/internal/ingress/controller/status.go b/internal/ingress/controller/status.go index a56a6b831..3b0a41ab8 100644 --- a/internal/ingress/controller/status.go +++ b/internal/ingress/controller/status.go @@ -99,25 +99,16 @@ func setupLeaderElection(config *leaderElectionConfig) { EventRecorder: recorder, } - // TODO: If we upgrade client-go to v0.24 then we can only use LeaseLock. - // MultiLock is used for lock's migration - lock := resourcelock.MultiLock{ - Primary: &resourcelock.ConfigMapLock{ - ConfigMapMeta: objectMeta, - Client: config.Client.CoreV1(), - LockConfig: resourceLockConfig, - }, - Secondary: &resourcelock.LeaseLock{ - LeaseMeta: objectMeta, - Client: config.Client.CoordinationV1(), - LockConfig: resourceLockConfig, - }, + lock := &resourcelock.LeaseLock{ + LeaseMeta: objectMeta, + Client: config.Client.CoordinationV1(), + LockConfig: resourceLockConfig, } ttl := 30 * time.Second elector, err := leaderelection.NewLeaderElector(leaderelection.LeaderElectionConfig{ - Lock: &lock, + Lock: lock, LeaseDuration: ttl, RenewDeadline: ttl / 2, RetryPeriod: ttl / 4, diff --git a/test/e2e/status/update.go b/test/e2e/status/update.go index b512520f4..c9c6ef333 100644 --- a/test/e2e/status/update.go +++ b/test/e2e/status/update.go @@ -92,10 +92,10 @@ var _ = framework.IngressNginxDescribe("[Status] status update", func() { assert.Nil(ginkgo.GinkgoT(), err, "unexpected error cleaning Ingress status") framework.Sleep(10 * time.Second) - err = f.KubeClientSet.CoreV1(). - ConfigMaps(f.Namespace). + err = f.KubeClientSet.CoordinationV1(). + Leases(f.Namespace). Delete(context.TODO(), "ingress-controller-leader", metav1.DeleteOptions{}) - assert.Nil(ginkgo.GinkgoT(), err, "unexpected error deleting leader election configmap") + assert.Nil(ginkgo.GinkgoT(), err, "unexpected error deleting leader election lease") _, cmd, err = f.KubectlProxy(port) assert.Nil(ginkgo.GinkgoT(), err, "unexpected error starting kubectl proxy")