Skip to content

Commit 391af8b

Browse files
authored
Add --leader-election-namespace flag (#123)
Fixes (part of) aws-controllers-k8s/community#1753 This patch introduces a new `--leader-election-namespace` flag used to configure controller-runtime leaderElection componenet. This namespace is utilized by the controller to manage the `coordination.k8s.io/lease` obejct for leader election. In the context of the controller-runtime library, if the LeaderElectionNamespace parametere is not explicitly set, the library will automatically default its value to the content of the file mounted at /var/run/secrets/kubernetes.io/serviceaccount/namespace. > https://github.com/kubernetes-sigs/controller-runtime/blob/main/pkg/leaderelection/leader_election.go#L112-L127 In Kubernetes, when a pod is created, a service account is automatically associated with it, unless explicitly specified otherwise. This service account contains relevant information, such as the namespace in which the pod is deployed. The Kubernetes API server mounts a two files for the service account in the pod's filesystem at /var/run/secrets/kubernetes.io/serviceaccount/token and /var/run/secrets/kubernetes.io/serviceaccount/namespace, respectively. > https://github.com/kubernetes/kubernetes/blob/master/pkg/controller/serviceaccount/tokens_controller.go#L399-L402 By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
1 parent 9655d6d commit 391af8b

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

pkg/config/config.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import (
3838

3939
const (
4040
flagEnableLeaderElection = "enable-leader-election"
41+
flagLeaderElectionNamespace = "leader-election-namespace"
4142
flagMetricAddr = "metrics-addr"
4243
flagEnableDevLogging = "enable-development-logging"
4344
flagAWSRegion = "aws-region"
@@ -72,6 +73,7 @@ var (
7273
type Config struct {
7374
MetricsAddr string
7475
EnableLeaderElection bool
76+
LeaderElectionNamespace string
7577
EnableDevelopmentLogging bool
7678
AccountID string
7779
Region string
@@ -111,6 +113,23 @@ func (cfg *Config) BindFlags() {
111113
"Enable leader election for controller manager. "+
112114
"Enabling this will ensure there is only one active controller manager.",
113115
)
116+
flag.StringVar(
117+
// In the context of the controller-runtime library, if the LeaderElectionNamespace parametere is not
118+
// explicitly set, the library will automatically default its value to the content of the file
119+
// mounted at /var/run/secrets/kubernetes.io/serviceaccount/namespace.
120+
// https://github.com/kubernetes-sigs/controller-runtime/blob/main/pkg/leaderelection/leader_election.go#L112-L127
121+
//
122+
// In Kubernetes, when a pod is created, a service account is automatically associated with it,
123+
// unless explicitly specified otherwise. This service account contains relevant information, such
124+
// as the namespace in which the pod is deployed. The Kubernetes API server mounts a two files
125+
// for the service account in the pod's filesystem at /var/run/secrets/kubernetes.io/serviceaccount/token
126+
// and /var/run/secrets/kubernetes.io/serviceaccount/namespace, respectively.
127+
// https://github.com/kubernetes/kubernetes/blob/master/pkg/controller/serviceaccount/tokens_controller.go#L399-L402
128+
&cfg.LeaderElectionNamespace, flagLeaderElectionNamespace,
129+
"",
130+
"Specific namespace that the controller will utilize to manage the coordination.k8s.io/lease object for leader election."+
131+
" By default it will try to use the namespace of the service account mounted to the controller pod.",
132+
)
114133
flag.BoolVar(
115134
&cfg.EnableDevelopmentLogging, flagEnableDevLogging,
116135
false,

0 commit comments

Comments
 (0)