From fe42c194bf114219011a35399591f293cd9bb25a Mon Sep 17 00:00:00 2001 From: ChrsMark Date: Thu, 8 Apr 2021 12:14:26 +0300 Subject: [PATCH 1/4] Add leaderelection docs Signed-off-by: ChrsMark --- .../elastic-agent-providers.asciidoc | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/docs/en/ingest-management/elastic-agent/elastic-agent-providers.asciidoc b/docs/en/ingest-management/elastic-agent/elastic-agent-providers.asciidoc index 4fb7b1581a..05286792c5 100644 --- a/docs/en/ingest-management/elastic-agent/elastic-agent-providers.asciidoc +++ b/docs/en/ingest-management/elastic-agent/elastic-agent-providers.asciidoc @@ -194,6 +194,33 @@ This means that anyone who have access to Agent Pod (`kubectl exec` for example) access Kubernetes Secrets API and get a specific secret no matter which namespace it belongs to. In this, this option should be carefully considered. +[discrete] +[[kubernetes_leaderelection-provider]] +==== Kubernetes LeaderElection Provider + +Provides the option to enable leaderelection between a set of Agents +running on Kubernetes. Only one Agent at a time will be the holder of the leader +lock and based on this, configurations can be enabled with the condition +that the Agent holds the leadership. This can be useful in cases where we want +only Agent between a set of Agents to collect cluster wide metrics for the +Kubernetes cluster like from `kube-state-metrics` endpoint. + +Provider needs a `kubeconfig` file so as to establish connection to Kubernetes API, +or it can automatically reach the API if it runs in an inCluster environment (Agent runs as Pod). + +[source,yaml] +---- +providers.kubernetes_leaderelection: + #kube_config: /Users/elastic-agent/.kube/config + #leader_lease: agent-k8s-leader-lock +---- + +`kube_config`:: (Optional) Use given config file as configuration for Kubernetes +client. If kube_config is not set, KUBECONFIG environment variable will be +checked and if not present it will fall back to InCluster. +`leader_lease`:: (Optional) Specify the name of the leader lease. +By default it is `elastic-agent-cluster-leader`. + [discrete] [[dynamic-providers]] === Dynamic Providers From 9a53280e19df9d383f94a812fe5267e36b0977bc Mon Sep 17 00:00:00 2001 From: ChrsMark Date: Thu, 8 Apr 2021 13:50:38 +0300 Subject: [PATCH 2/4] Add keys tables and example Signed-off-by: ChrsMark --- .../elastic-agent-providers.asciidoc | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/docs/en/ingest-management/elastic-agent/elastic-agent-providers.asciidoc b/docs/en/ingest-management/elastic-agent/elastic-agent-providers.asciidoc index 05286792c5..aa1343b9ce 100644 --- a/docs/en/ingest-management/elastic-agent/elastic-agent-providers.asciidoc +++ b/docs/en/ingest-management/elastic-agent/elastic-agent-providers.asciidoc @@ -221,6 +221,39 @@ checked and if not present it will fall back to InCluster. `leader_lease`:: (Optional) Specify the name of the leader lease. By default it is `elastic-agent-cluster-leader`. +The available key is: + +|=== +|Key |Type |Description + +|`kubernetes_leaderelection.leader` +|`bool` +|The value of the leadership flags. True when the Agents holds the leader lock. + +|=== + +==== Enabling confgiurations only when on leadership + +In order to leverage leaderelection provider and enable +specific inputs only when Agent holds the leadership lock, users +can use conditions based on `kubernetes_leaderelection.leader` key. +Below we provide an example that will enable `state_container` +metricset only when the leadership lock is acquired: + +[source,yaml] +---- +- data_stream: + dataset: kubernetes.state_container + type: metrics + metricsets: + - state_container + add_metadata: true + hosts: + - 'kube-state-metrics:8080' + period: 10s + condition: ${kubernetes_leaderelection.leader} == true +---- + [discrete] [[dynamic-providers]] === Dynamic Providers From de3c575f7b480682519dc33636145a9959a2e93a Mon Sep 17 00:00:00 2001 From: ChrsMark Date: Thu, 8 Apr 2021 14:48:31 +0300 Subject: [PATCH 3/4] fix Signed-off-by: ChrsMark --- .../elastic-agent/elastic-agent-providers.asciidoc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/en/ingest-management/elastic-agent/elastic-agent-providers.asciidoc b/docs/en/ingest-management/elastic-agent/elastic-agent-providers.asciidoc index aa1343b9ce..bb439e5a14 100644 --- a/docs/en/ingest-management/elastic-agent/elastic-agent-providers.asciidoc +++ b/docs/en/ingest-management/elastic-agent/elastic-agent-providers.asciidoc @@ -232,7 +232,8 @@ The available key is: |=== -==== Enabling confgiurations only when on leadership +[discrete] +===== Enabling confgiurations only when on leadership In order to leverage leaderelection provider and enable specific inputs only when Agent holds the leadership lock, users From 2ca55b78f4ace0b156e8b27c611a45ead65edbdd Mon Sep 17 00:00:00 2001 From: Chris Mark Date: Thu, 8 Apr 2021 15:43:21 +0300 Subject: [PATCH 4/4] Update docs/en/ingest-management/elastic-agent/elastic-agent-providers.asciidoc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Carlos Pérez-Aradros Herce --- .../elastic-agent/elastic-agent-providers.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/ingest-management/elastic-agent/elastic-agent-providers.asciidoc b/docs/en/ingest-management/elastic-agent/elastic-agent-providers.asciidoc index bb439e5a14..9306abf673 100644 --- a/docs/en/ingest-management/elastic-agent/elastic-agent-providers.asciidoc +++ b/docs/en/ingest-management/elastic-agent/elastic-agent-providers.asciidoc @@ -228,7 +228,7 @@ The available key is: |`kubernetes_leaderelection.leader` |`bool` -|The value of the leadership flags. True when the Agents holds the leader lock. +|The value of the leadership flag. It is `true` when the Agent is the current leader, `false` otherwise. |===