Kubernetes 核心组件 Leader 选举机制

Kubernetes 核心组件 Leader 选举机制

Kubernetes 内部很多核心组件是有状态的,都以一主多从多实例的方式运行。这些组件的一主多从中,只有主实例负责处理数据,从实例处在热备状态。当主实例异常时从实例将竞选成为主实例并接替进行任务处理,所以这个选举机制是 Kubernetes 对于这有状态组件高可用的保障。

核心组件如 kube-scheduler 或 kube-controller-manager 等组件,在同一时刻只有一个实例在处理业务逻辑,因此需要在启动的实例中进行选主,决定哪个实例负责处理任务。这些核心组件都是使用的 client-go 中提供的工具类 leaderelection,也就是本文的主角。

leaderelection 依赖于 Kubernetes 中提供的 EndpointsConfigMapLease 三种资源锁,leaderelection 选主的实现方式就是基于这三种资源锁:

  • 多个副本去创建资源,创建成功则获得锁成为 leader;
  • leader 在租约内去刷新锁;
  • 其他副本则通过比对锁的更新时间,判断是否竞争成为 leader。

除了能在核心组件中使用,这个组件也能使用在我们开发的应用中,前提是我们的应用运行在 Kubernetes 环境且有操作资源锁的权限。

阅读更多