K8s 中 leader election 选举原理
在开发CRD时,定义 controller
的时候,会看到如下代码
mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
// 是否进行 leader 选举
LeaderElection: enableLeaderElection,
// Namespace and name
LeaderElectionNamespace: leaderElectionNamespace,
LeaderElectionID: "alluxio.data.fluid.io",
// ...
})
对于有状态组件来说,实现高可用一般来说通过选主来达到同一时刻只能有一个组件在处理业务逻辑。
这里,会比较好奇这个选举是如何实现的,接下来的内容便从源码的角度进行解读。