Kubernetes LeaderElection 提供器编辑

提供在 Kubernetes 上运行的一组 Elastic Agent 之间启用领导者选举的选项。一次只有一个 Elastic Agent 将成为领导者锁的持有者,并且基于此,可以在 Elastic Agent 持有领导权的条件下启用配置。这在以下情况下很有用:一组 Elastic Agent 中的 Elastic Agent 收集 Kubernetes 集群的集群范围指标,例如 kube-state-metrics 端点。

提供器需要一个 kubeconfig 文件来建立与 Kubernetes API 的连接。如果它在 InCluster 环境中运行(Elastic Agent 作为 Pod 运行),它可以自动访问 API。

providers.kubernetes_leaderelection:
  #enabled: true
  #kube_config: /Users/elastic-agent/.kube/config
  #kube_client_options:
  #  qps: 5
  #  burst: 10
  #leader_lease: agent-k8s-leader-lock
  #leader_retryperiod: 2
  #leader_leaseduration: 15
  #leader_renewdeadline: 10
启用
(可选)默认为 true。要显式禁用 LeaderElection 提供器,请设置 enabled: false
kube_config
(可选)使用给定的配置文件作为 Kubernetes 客户端的配置。如果未设置 kube_config,则将检查 KUBECONFIG 环境变量,如果不存在,则将回退到 InCluster。
kube_client_options
(可选)为 Kubernetes 客户端配置其他选项。支持的选项是 qpsburst。如果未设置,则使用 Kubernetes 客户端的默认 QPS 和突发设置。
leader_lease
(可选)指定领导者租约的名称。默认情况下,这设置为 elastic-agent-cluster-leader
leader_retryperiod
(可选)默认值为 2(以秒为单位)。Elastic Agent 尝试获取 leader 角色之前的等待时间。
leader_leaseduration
(可选)默认值为 15(以秒为单位)。领导者 Elastic Agent 持有 leader 状态的时间。
leader_renewdeadline
(可选)默认值为 10(以秒为单位)。领导者重试获取 leader 角色的时间。

可用的键是

类型 描述

kubernetes_leaderelection.leader

布尔值

领导标志的值。当 Elastic Agent 是当前领导者时,此值设置为 true,否则设置为 false

了解领导者计时编辑

如上所述,LeaderElection 配置提供以下参数:租约期限 (leader_leaseduration)、续订截止日期 (leader_renewdeadline) 和重试周期 (leader_retryperiod)。根据提供的配置,每个代理将触发 Kubernetes API 请求,并将尝试检查租约的状态。

对 K8s 控制 API 的领导者调用次数与安装的 Elastic Agent 数量成正比。这意味着请求将来自每个 leader_retryperiod 的所有 Elastic Agent。将 leader_retryperiod 设置为大于默认值 (2 秒) 的值意味着对 Kubernetes 控制 API 的请求更少,但也会增加从领导者 Elastic Agent 收集指标可能会丢失的时间段。

该库对计时参数应用 特定检查,如果未验证这些参数,Elastic Agent 将退出并显示 panic 错误。

一般来说:- 租约期限必须大于续订截止日期 - 续订截止日期必须大于 retryperiod*JitterFactor。

常量 JitterFactor=1.2 在 leaderelection 库 中定义。

仅在领导时启用配置编辑

使用基于 kubernetes_leaderelection.leader 键的条件来利用领导者选举提供程序,并仅在 Elastic Agent 持有领导锁时启用特定输入。以下示例仅在获取领导锁时启用 state_container 指标集

- 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