Kubernetes LeaderElection 提供程序
编辑Kubernetes LeaderElection 提供程序
编辑提供在 Kubernetes 上运行的一组 Elastic Agent 之间启用 LeaderElection 的选项。一次只有一个 Elastic Agent 将成为 Leader 锁的持有者,并基于此,可以启用配置,条件是 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 客户端配置其他选项。支持的选项是
qps
和burst
。如果未设置,则使用 Kubernetes 客户端的默认 QPS 和突发设置。 -
leader_lease
- (可选) 指定 Leader 租约的名称。默认设置为
elastic-agent-cluster-leader
。 -
leader_retryperiod
- (可选) 默认值为 2(秒)。Elastic Agent 尝试获取
leader
角色之前的时间长度。 -
leader_leaseduration
- (可选) 默认值为 15(秒)。Leader Elastic Agent 保持
leader
状态的时间长度。 -
leader_renewdeadline
- (可选) 默认值为 10(秒)。Leader 重新尝试获取
leader
角色的时间长度。
可用的键是
键 | 类型 | 描述 |
---|---|---|
|
|
领导权标志的值。当 Elastic Agent 是当前 Leader 时,将其设置为 |
了解 Leader 定时
编辑如上所述,LeaderElection 配置提供了以下参数:租约持续时间 (leader_leaseduration
)、续订截止时间 (leader_renewdeadline
) 和重试周期 (leader_retryperiod
)。根据提供的配置,每个代理都将触发 Kubernetes API 请求,并尝试检查租约的状态。
对 K8s 控制 API 的 Leader 调用次数与安装的 Elastic Agent 数量成正比。这意味着每个 leader_retryperiod
都会从所有 Elastic Agent 发出请求。将 leader_retryperiod
设置为大于默认值 (2 秒) 的值,意味着将发出更少的请求到 Kubernetes 控制 API,但也将增加可能丢失 Leader Elastic Agent 收集的指标的周期。
该库对定时参数应用了 特定检查,如果未验证这些参数,Elastic Agent 将退出并出现 panic
错误。
一般来说:- 租约持续时间必须大于续订截止时间 - 续订截止时间必须大于重试周期 * 抖动因子。
常数 JitterFactor=1.2 在 leaderelection 库 中定义。
仅在领导权时启用配置
编辑使用基于 kubernetes_leaderelection.leader
键的条件来利用 leaderelection 提供程序,并且仅当 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