You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
k8s 简化了我们在集群上部署、运维应用的流程。在 k8s 上,我们可以很方便地部署一个分布式应用。以 Deployment 为例,应用就由多个 Pod 组成,基于 Pod 的伸缩能力,应用天然就具备应用的高可用性和可扩展性。但在分布式系统中,通常我们需要指定其中一个 Pod 为 leader,负责协调所有 Pod 或执行特定任务。
一般提到 Leader 选举,我们都会想到利用 ZooKeeper 或 Redis 等软件的分布式锁来实现,所有 Pod 不断争抢锁,抢到锁的 Pod 就成为 Leader,并且 Leader 不断进行 “心跳” 对锁进行续期。其他 Pod 依旧不断强锁,保证 之前 Leader 出现异常后能快速选举出新的 Leader。
然后就根据 LeaderElectionConfig 创建一个 LeaderElector 实例,并调用其 run 方法进行抢锁。调用 run 方法后,Pod 会尝试更新锁资源。示例代码中是 ConfigMapLock,所以 Pod 会尝试创建或更新 ConfigMap,一旦更新成功,就会将当前 Pod 的 IP 写入到 ConfigMap 的 metadata.annotations,写入成功后该 Pod 就成为了 Leader。
Activity