1、在 Kubernetes的 kube-controller-manager,kube-scheduler以及底层实现 controller-rumtime 都支持高可用中的leader选举,本文以kube-controller-manager (底层的实现是 client-go) 中的leader选举机制为例进行介绍。
--leader-elect Default: true 在执行主循环之前,启动领导选举(Leader Election)客户端,并尝试获得领导者身份;
--leader-elect-resource-lock Default: "leases" 锁定的资源对象的类型,支持的选项为 leases、endpoints和 configmaps;
--leader-elect-resource-name Default: "kube-controller-manager" 执行锁操作的资源对象名称;
--leader-elect-resource-namespace Default: "kube-system" 执行锁操作的资源对象的名字空间;
--leader-elect-lease-duration Default: 15s 领导者节点在被其他候选节点替代之前可以停止的最长时长;
--leader-elect-renew-deadline Default: 10s 当前leader在被剥夺领导权前可多次尝试续约leader身份,相邻两次尝试之间的间歇时长;
--leader-elect-retry-period Default: 2s 候选节点尝试获得领导者身份时,客户端在相邻两次尝试之间要等待的时长。
一般通过Annotations(control-plane.alpha.kubernetes.io/leader)来标识被选举为leader;
2、controller-runtime也是基于client-go实现,只是简单地对client-go的封装,源码目录 "sigs.k8s.io/controller-runtime/pkg/leaderelection"
3、kube-controller-manage也是基于client-go实现,client-go源码目录"k8s.io/client-go/tools/leaderelection",需要详细介绍