从 Kubernetes 中的一组候选 Pod 中选出领导者的正确方法

SRF*_*SRF 5 kubernetes

为了执行领导者选举,Kubernetes 文档建议在候选 pod 集中部署一个边车。

https://kubernetes.io/blog/2016/01/simple-leader-election-with-kubernetes/

这个边车遵循以下步骤来选举领导者。

  1. 如果不存在有效的领导者,则每个边车都会尝试以原子方式更新 Kubernetes 端点对象。只有一个边车可以成功更新端点对象。
  2. 更新端点的边车将在指定的时间段内担任领导者。
  3. 当前领导者将再次更新端点以延长持续时间以保留领导权。
  4. 当存在有效的领导者时,其他边车不会尝试再次更新端点。
  5. 如果当前leader在持续时间内没有更新endpoint,其他边车会认为leader被撤销。所有侧车都将进入步骤 1。

这种方法几乎没有问题。

  1. 可以在短时间内同时运行 2 个领导者。例子:

如果当前leader挂了,不能及时更新endpoint,另一边的一辆汽车将获得leader。但前任领导人需要一段时间才能意识到其领导地位被撤销。在这段短暂的时间内,现有的 2 个领导者可以破坏共享资源/数据。

其源代码中也提到了这一点。

This implementation does not guarantee that only one client is acting as a leader (a.k.a. fencing).
Run Code Online (Sandbox Code Playgroud)
  1. 该侧车的源代码已退役/存档。所以,它不是在积极发展。 https://github.com/kubernetes-retired/contrib/tree/master/election

那么,使用 Kubernetes 选举领导者的正确方法是什么?

小智 1

最初的问题已经很老了,但现在,租赁应该可以解决问题。