Skip to content

Commit 2f2b5e9

Browse files
a-hilalyacornett21
andauthored
Add leader elections flags/values to the deployment manifests (#455)
Issue: aws-controllers-k8s/community#1753 (comment) ACK controllers use k8s-sigs/controller-runtime behind the scenes, which support leader election. This feature is not properly working due to a missing configuration `LeaderElectionNamespace` which is used by the manager to create `k8s.io/coordination` Lease objects. This patch sets the default `LeaderElectionNamespace` to `ack-system` and adds the capability of enabling leader election using helm values. By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license. Co-authored-by: Adam Cornett <[email protected]>
1 parent ec1e003 commit 2f2b5e9

14 files changed

+175
-39
lines changed

go.mod

+11-11
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ go 1.19
44

55
require (
66
github.com/aws-controllers-k8s/pkg v0.0.4
7-
github.com/aws-controllers-k8s/runtime v0.26.0
7+
github.com/aws-controllers-k8s/runtime v0.27.1
88
github.com/aws/aws-sdk-go v1.44.93
99
github.com/dlclark/regexp2 v1.4.0 // indirect
1010
// pin to v0.1.1 due to release problem with v0.1.2
@@ -14,11 +14,12 @@ require (
1414
github.com/iancoleman/strcase v0.2.0
1515
github.com/operator-framework/api v0.6.0
1616
github.com/pkg/errors v0.9.1
17+
github.com/samber/lo v1.37.0
1718
github.com/spf13/cobra v1.6.0
1819
github.com/stretchr/testify v1.8.0
19-
golang.org/x/mod v0.6.0
20+
golang.org/x/mod v0.8.0
2021
gopkg.in/src-d/go-git.v4 v4.13.1
21-
k8s.io/apimachinery v0.26.1
22+
k8s.io/apimachinery v0.26.8
2223
sigs.k8s.io/controller-runtime v0.14.5
2324
)
2425

@@ -41,7 +42,7 @@ require (
4142
github.com/google/gnostic v0.5.7-v3refs // indirect
4243
github.com/google/go-cmp v0.5.9 // indirect
4344
github.com/google/gofuzz v1.1.0 // indirect
44-
github.com/google/uuid v1.1.2 // indirect
45+
github.com/google/uuid v1.3.0 // indirect
4546
github.com/imdario/mergo v0.3.12 // indirect
4647
github.com/inconshreveable/mousetrap v1.0.1 // indirect
4748
github.com/jaypipes/envutil v1.0.0 // indirect
@@ -61,7 +62,6 @@ require (
6162
github.com/prometheus/client_model v0.3.0 // indirect
6263
github.com/prometheus/common v0.37.0 // indirect
6364
github.com/prometheus/procfs v0.8.0 // indirect
64-
github.com/samber/lo v1.37.0 // indirect
6565
github.com/sergi/go-diff v1.0.0 // indirect
6666
github.com/sirupsen/logrus v1.8.1 // indirect
6767
github.com/spf13/pflag v1.0.5 // indirect
@@ -72,11 +72,11 @@ require (
7272
go.uber.org/zap v1.24.0 // indirect
7373
golang.org/x/crypto v0.1.0 // indirect
7474
golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 // indirect
75-
golang.org/x/net v0.7.0 // indirect
75+
golang.org/x/net v0.8.0 // indirect
7676
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect
77-
golang.org/x/sys v0.5.0 // indirect
78-
golang.org/x/term v0.5.0 // indirect
79-
golang.org/x/text v0.7.0 // indirect
77+
golang.org/x/sys v0.6.0 // indirect
78+
golang.org/x/term v0.6.0 // indirect
79+
golang.org/x/text v0.8.0 // indirect
8080
golang.org/x/time v0.3.0 // indirect
8181
gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect
8282
google.golang.org/appengine v1.6.7 // indirect
@@ -86,9 +86,9 @@ require (
8686
gopkg.in/warnings.v0 v0.1.2 // indirect
8787
gopkg.in/yaml.v2 v2.4.0 // indirect
8888
gopkg.in/yaml.v3 v3.0.1 // indirect
89-
k8s.io/api v0.26.1 // indirect
89+
k8s.io/api v0.26.8 // indirect
9090
k8s.io/apiextensions-apiserver v0.26.1 // indirect
91-
k8s.io/client-go v0.26.1 // indirect
91+
k8s.io/client-go v0.26.8 // indirect
9292
k8s.io/component-base v0.26.1 // indirect
9393
k8s.io/klog/v2 v2.80.1 // indirect
9494
k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 // indirect

go.sum

+20-19
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,8 @@ github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:l
7979
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
8080
github.com/aws-controllers-k8s/pkg v0.0.4 h1:fQX18NZZG6eVKdG3WWp/oE7QJgFe7Dz/Ublu+ua4PW8=
8181
github.com/aws-controllers-k8s/pkg v0.0.4/go.mod h1:LC/9DlYrXu8FWNwLquZLq1WhcyRo7qXb7upRLAEosQk=
82-
github.com/aws-controllers-k8s/runtime v0.26.0 h1:XKqygFzHSBtM74Ov9IroZbyCVeYei9Eskp4aKbJ2SFw=
83-
github.com/aws-controllers-k8s/runtime v0.26.0/go.mod h1:jizDzKikL09cueIuA9ZxoZ+4pfn5U7oKW5s/ZAqOA6E=
82+
github.com/aws-controllers-k8s/runtime v0.27.1 h1:tvJRQDioBFkob0kF4DwgS7MsoXZKwkG5QCHWxFEh+2o=
83+
github.com/aws-controllers-k8s/runtime v0.27.1/go.mod h1:oSCqCzbzJLUrzv+cx4TIxCuSUvL75ABJmhxBc87IRqc=
8484
github.com/aws/aws-sdk-go v1.44.93 h1:hAgd9fuaptBatSft27/5eBMdcA8+cIMqo96/tZ6rKl8=
8585
github.com/aws/aws-sdk-go v1.44.93/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
8686
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
@@ -317,8 +317,9 @@ github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hf
317317
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
318318
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
319319
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
320-
github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
321320
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
321+
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
322+
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
322323
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
323324
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
324325
github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
@@ -680,8 +681,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
680681
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
681682
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
682683
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
683-
golang.org/x/mod v0.6.0 h1:b9gGHsz9/HhJ3HF5DHQytPpuwocVTChQJK3AvoLRD5I=
684-
golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI=
684+
golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8=
685+
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
685686
golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
686687
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
687688
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -727,8 +728,8 @@ golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwY
727728
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
728729
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
729730
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
730-
golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g=
731-
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
731+
golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
732+
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
732733
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
733734
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
734735
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -809,12 +810,12 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc
809810
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
810811
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
811812
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
812-
golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
813-
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
813+
golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
814+
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
814815
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
815816
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
816-
golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY=
817-
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
817+
golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw=
818+
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
818819
golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
819820
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
820821
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -824,8 +825,8 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
824825
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
825826
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
826827
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
827-
golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
828-
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
828+
golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68=
829+
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
829830
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
830831
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
831832
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -1035,22 +1036,22 @@ honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9
10351036
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
10361037
k8s.io/api v0.18.2/go.mod h1:SJCWI7OLzhZSvbY7U8zwNl9UA4o1fizoug34OV/2r78=
10371038
k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo=
1038-
k8s.io/api v0.26.1 h1:f+SWYiPd/GsiWwVRz+NbFyCgvv75Pk9NK6dlkZgpCRQ=
1039-
k8s.io/api v0.26.1/go.mod h1:xd/GBNgR0f707+ATNyPmQ1oyKSgndzXij81FzWGsejg=
1039+
k8s.io/api v0.26.8 h1:k2OtFmQPWfDUyAuYAwQPftVygF/vz4BMGSKnd15iddM=
1040+
k8s.io/api v0.26.8/go.mod h1:QaflR7cmG3V9lIz0VLBM+ylndNN897OAUAoJDcgwiQw=
10401041
k8s.io/apiextensions-apiserver v0.18.2/go.mod h1:q3faSnRGmYimiocj6cHQ1I3WpLqmDgJFlKL37fC4ZvY=
10411042
k8s.io/apiextensions-apiserver v0.20.1/go.mod h1:ntnrZV+6a3dB504qwC5PN/Yg9PBiDNt1EVqbW2kORVk=
10421043
k8s.io/apiextensions-apiserver v0.26.1 h1:cB8h1SRk6e/+i3NOrQgSFij1B2S0Y0wDoNl66bn8RMI=
10431044
k8s.io/apiextensions-apiserver v0.26.1/go.mod h1:AptjOSXDGuE0JICx/Em15PaoO7buLwTs0dGleIHixSM=
10441045
k8s.io/apimachinery v0.18.2/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA=
10451046
k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
1046-
k8s.io/apimachinery v0.26.1 h1:8EZ/eGJL+hY/MYCNwhmDzVqq2lPl3N3Bo8rvweJwXUQ=
1047-
k8s.io/apimachinery v0.26.1/go.mod h1:tnPmbONNJ7ByJNz9+n9kMjNP8ON+1qoAIIC70lztu74=
1047+
k8s.io/apimachinery v0.26.8 h1:SzpGtRX3/j/Ylg8Eg65Iobpxi9Jz4vOvI0qcBZyPVrM=
1048+
k8s.io/apimachinery v0.26.8/go.mod h1:qYzLkrQ9lhrZRh0jNKo2cfvf/R1/kQONnSiyB7NUJU0=
10481049
k8s.io/apiserver v0.18.2/go.mod h1:Xbh066NqrZO8cbsoenCwyDJ1OSi8Ag8I2lezeHxzwzw=
10491050
k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU=
10501051
k8s.io/client-go v0.18.2/go.mod h1:Xcm5wVGXX9HAA2JJ2sSBUn3tCJ+4SVlCbl2MNNv+CIU=
10511052
k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y=
1052-
k8s.io/client-go v0.26.1 h1:87CXzYJnAMGaa/IDDfRdhTzxk/wzGZ+/HUQpqgVSZXU=
1053-
k8s.io/client-go v0.26.1/go.mod h1:IWNSglg+rQ3OcvDkhY6+QLeasV4OYHDjdqeWkDQZwGE=
1053+
k8s.io/client-go v0.26.8 h1:pPuTYaVtLlg/7n6rqs3MsKLi4XgNaJ3rTMyS37Y5CKU=
1054+
k8s.io/client-go v0.26.8/go.mod h1:1sBQqKmdy9rWZYQnoedpc0gnRXG7kU3HrKZvBe2QbGM=
10541055
k8s.io/code-generator v0.18.2/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc=
10551056
k8s.io/code-generator v0.20.1/go.mod h1:UsqdF+VX4PU2g46NC2JRs4gc+IfrctnwHb76RNbWHJg=
10561057
k8s.io/component-base v0.18.2/go.mod h1:kqLlMuhJNHQ9lz8Z7V5bxUUtjFZnrypArGl58gmDfUM=

pkg/generate/ack/controller.go

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ var (
3737
"config/rbac/role-reader.yaml.tpl",
3838
"config/rbac/role-writer.yaml.tpl",
3939
"config/rbac/service-account.yaml.tpl",
40+
"config/rbac/leader-election-role-binding.yaml.tpl",
41+
"config/rbac/leader-election-role.yaml.tpl",
4042
"config/rbac/kustomization.yaml.tpl",
4143
"config/crd/kustomization.yaml.tpl",
4244
"config/overlays/namespaced/kustomization.yaml.tpl",

pkg/generate/ack/release.go

+2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ var (
3333
"helm/templates/role-reader.yaml.tpl",
3434
"helm/templates/role-writer.yaml.tpl",
3535
"helm/templates/_controller-role-kind-patch.yaml.tpl",
36+
"helm/templates/leader-election-role.yaml.tpl",
37+
"helm/templates/leader-election-role-binding.yaml.tpl",
3638
}
3739
releaseIncludePaths = []string{
3840
"config/controller/kustomization_def.yaml.tpl",

templates/cmd/controller/main.go.tpl

+8-7
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,14 @@ func main() {
8787
}
8888

8989
mgr, err := ctrlrt.NewManager(ctrlrt.GetConfigOrDie(), ctrlrt.Options{
90-
Scheme: scheme,
91-
Port: port,
92-
Host: host,
93-
MetricsBindAddress: ackCfg.MetricsAddr,
94-
LeaderElection: ackCfg.EnableLeaderElection,
95-
LeaderElectionID: awsServiceAPIGroup,
96-
Namespace: ackCfg.WatchNamespace,
90+
Scheme: scheme,
91+
Port: port,
92+
Host: host,
93+
MetricsBindAddress: ackCfg.MetricsAddr,
94+
LeaderElection: ackCfg.EnableLeaderElection,
95+
LeaderElectionID: "ack-"+awsServiceAPIGroup,
96+
Namespace: ackCfg.WatchNamespace,
97+
LeaderElectionNamespace: ackCfg.LeaderElectionNamespace,
9798
})
9899
if err != nil {
99100
setupLog.Error(

templates/config/controller/deployment.yaml.tpl

+7
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ spec:
3636
- "$(ACK_RESOURCE_TAGS)"
3737
- --watch-namespace
3838
- "$(ACK_WATCH_NAMESPACE)"
39+
- --enable-leader-election=$(ENABLE_LEADER_ELECTION)
40+
- --leader-election-namespace
41+
- "$(LEADER_ELECTION_NAMESPACE)"
3942
image: controller:latest
4043
name: controller
4144
ports:
@@ -65,6 +68,10 @@ spec:
6568
value: "info"
6669
- name: ACK_RESOURCE_TAGS
6770
value: "services.k8s.aws/controller-version=%CONTROLLER_SERVICE%-%CONTROLLER_VERSION%,services.k8s.aws/namespace=%K8S_NAMESPACE%"
71+
- name: ENABLE_LEADER_ELECTION
72+
value: "false"
73+
- name: LEADER_ELECTION_NAMESPACE
74+
value: "ack-system"
6875
securityContext:
6976
allowPrivilegeEscalation: false
7077
privileged: false

templates/config/rbac/kustomization.yaml.tpl

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ resources:
44
- role-reader.yaml
55
- role-writer.yaml
66
- service-account.yaml
7-
7+
- leader-election-role.yaml
8+
- leader-election-role-binding.yaml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
---
2+
apiVersion: rbac.authorization.k8s.io/v1
3+
kind: RoleBinding
4+
metadata:
5+
namespace: ack-system
6+
name: {{.ServicePackageName}}-leader-election-rolebinding
7+
roleRef:
8+
apiGroup: rbac.authorization.k8s.io
9+
kind: Role
10+
name: {{.ServicePackageName}}-leader-election-role
11+
subjects:
12+
- kind: ServiceAccount
13+
name: {{.ServiceAccountName}}
14+
namespace: ack-system
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
---
2+
apiVersion: rbac.authorization.k8s.io/v1
3+
kind: Role
4+
metadata:
5+
name: {{.ServicePackageName}}-leader-election-role
6+
namespace: ack-system
7+
rules:
8+
- apiGroups:
9+
- coordination.k8s.io
10+
resources:
11+
- leases
12+
verbs:
13+
- get
14+
- list
15+
- watch
16+
- create
17+
- update
18+
- patch
19+
- delete
20+
- apiGroups:
21+
- ""
22+
resources:
23+
- events
24+
verbs:
25+
- create
26+
- patch

templates/helm/templates/deployment.yaml

+9-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ spec:
4949
- --aws-endpoint-url
5050
- "$(AWS_ENDPOINT_URL)"
5151
- --enable-development-logging
52-
- "$(ACK_ENABLE_DEVELOPMENT_LOGGING)"
52+
- "$(ENABLE_DEVELOPMENT_LOGGING)"
5353
- --log-level
5454
- "$(ACK_LOG_LEVEL)"
5555
- --resource-tags
@@ -58,6 +58,10 @@ spec:
5858
- "$(ACK_WATCH_NAMESPACE)"
5959
- --deletion-policy
6060
- "$(DELETION_POLICY)"
61+
- --enable-leader-election
62+
- "$(ENABLE_LEADER_ELECTION)"
63+
- --leader-election-namespace
64+
- "$(LEADER_ELECTION_NAMESPACE)"
6165
{{- if gt .Values.reconcile.defaultResyncPeriod 0.0 }}
6266
- --reconcile-default-resync-seconds
6367
- "$(RECONCILE_DEFAULT_RESYNC_SECONDS)"
@@ -87,6 +91,10 @@ spec:
8791
value: {{ include "watch-namespace" . }}
8892
- name: DELETION_POLICY
8993
value: {{ .Values.deletionPolicy }}
94+
- name: ENABLED_LEADER_ELECTION
95+
value: {{ .Values.leaderElection.enabled | quote }}
96+
- name: LEADER_ELECTION_NAMESPACE
97+
value: {{ .Values.leaderElection.namespace | quote }}
9098
- name: ACK_ENABLE_DEVELOPMENT_LOGGING
9199
value: {{ .Values.log.enable_development_logging | quote }}
92100
- name: ACK_LOG_LEVEL
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{{- "{{ if .Values.leaderElection.enabled }}" }}
2+
apiVersion: rbac.authorization.k8s.io/v1
3+
kind: RoleBinding
4+
metadata:
5+
name: {{.ServicePackageName}}-leader-election-rolebinding
6+
{{ "{{ if .Values.leaderElection.namespace }}" }}
7+
namespace: {{ "{{ .Values.leaderElection.namespace }}" }}
8+
{{ "{{ else }}" }}
9+
namespace: {{ "{{ .Release.Namespace }}" }}
10+
{{ "{{ end }}" }}
11+
roleRef:
12+
apiGroup: rbac.authorization.k8s.io
13+
kind: Role
14+
name: {{.ServicePackageName}}-leader-election-role
15+
subjects:
16+
- kind: ServiceAccount
17+
name: {{.ServiceAccountName}}
18+
namespace: {{ "{{ .Release.Namespace }}" }}
19+
{{- "{{- end }}" }}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
{{- "{{ if .Values.leaderElection.enabled }}" }}
2+
apiVersion: rbac.authorization.k8s.io/v1
3+
kind: Role
4+
metadata:
5+
name: {{.ServicePackageName}}-leader-election-role
6+
{{ "{{ if .Values.leaderElection.namespace }}" }}
7+
namespace: {{ "{{ .Values.leaderElection.namespace }}" }}
8+
{{ "{{ else }}" }}
9+
namespace: {{ "{{ .Release.Namespace }}" }}
10+
{{ "{{ end }}" }}
11+
rules:
12+
- apiGroups:
13+
- coordination.k8s.io
14+
resources:
15+
- leases
16+
verbs:
17+
- get
18+
- list
19+
- watch
20+
- create
21+
- update
22+
- patch
23+
- delete
24+
- apiGroups:
25+
- ""
26+
resources:
27+
- events
28+
verbs:
29+
- create
30+
- patch
31+
{{- "{{- end }}" }}

templates/helm/values.schema.json

+12
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,18 @@
231231
},
232232
"type": "object"
233233
},
234+
"leaderElection": {
235+
"description": "Parameter to configure the controller's leader election system.",
236+
"properties": {
237+
"enabled": {
238+
"type": "boolean"
239+
},
240+
"namespace": {
241+
"type": "string"
242+
}
243+
},
244+
"type": "object"
245+
},
234246
"serviceAccount": {
235247
"description": "ServiceAccount settings",
236248
"properties": {

templates/helm/values.yaml.tpl

+12
Original file line numberDiff line numberDiff line change
@@ -121,3 +121,15 @@ serviceAccount:
121121
name: {{ .ServiceAccountName }}
122122
annotations: {}
123123
# eks.amazonaws.com/role-arn: arn:aws:iam::AWS_ACCOUNT_ID:role/IAM_ROLE_NAME
124+
125+
# Configuration of the leader election. Required for running multiple instances of the
126+
# controller within the same cluster.
127+
# See https://kubernetes.io/docs/concepts/architecture/leases/#leader-election
128+
leaderElection:
129+
# Enable Controller Leader Election. Set this to true to enable leader election
130+
# for this controller.
131+
enabled: false
132+
# Leader election can be scoped to a specific namespace. By default, the controller
133+
# will attempt to use the namespace of the service account mounted to the Controller
134+
# pod.
135+
namespace: ""

0 commit comments

Comments
 (0)