这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是《client-go实战》系列的第十二篇,又有一个精彩的知识点在本章呈现:选主(leader-election setnx,或者mysql的乐观锁,这样就需要维护新的组件了 其实这在kubernetes是个很典型的问题,毕竟pod多实例在kubernetes是常态了,所以当然也有官方的解法,页就是本文的主题:选主(leader-election ) 选主(leader-election) 说到这里您应该能理解选主的含义了:多个进程竞争某个key的leader,咱们可以把特定的代码放在竞争成功后再执行,由于同一时刻只有一个进程可以竞争成功,这就相当于在不引入额外组件的情况下 indexer: indexer, queue: queue, } go controller.Run(1, stopCh) } 编码:主控程序(选主逻辑也在里面) 本文是讲选主(leader-election
spec: selector: app: zk clusterIP: None ports: - name: server port: 2888 - name: leader-election - containerPort: 2888 name: server - containerPort: 3888 name: leader-election
zk-hs labels: app: zk spec: ports: - port: 2888 name: server - port: 3888 name: leader-election - containerPort: 2888 name: server - containerPort: 3888 name: leader-election
server - containerPort: 2181 name: client - containerPort: 3888 name: leader-election clusterIP: None ports: - name: server port: 2888 - name: leader-election
项目地址 https://github.com/SainTechnologySolutions/allprogrammingtutorials/tree/master/apache-zookeeper/leader-election
--v=5" - "--timeout=150s" - "--retry-interval-start=500ms" - "--leader-election - "--csi-address=$(ADDRESS)" - "--v=5" - "--timeout=150s" - "--leader-election v3.3.0 args: - "--v=5" - "--csi-address=$(ADDRESS)" - "--leader-election - "--csi-address=$(ADDRESS)" - "--v=5" - "--timeout=150s" - "--leader-election
{ // when there are multiple controller-manager instances, // we observe that it will delete leader-election endpoints after 5min // and cause re-election // so skip the delete here // as leader-election
global-default Limited 20 128 6 50 193d leader-election 0, 0 global-default, 0, true, false, 0, 0 leader-election
name: zk labels: app: zk spec: ports: - port: 2888 name: peer - port: 3888 name: leader-election ports: - containerPort: 2888 name: peer - containerPort: 3888 name: leader-election
"_" + string(uuid.NewUUID()) // Construct clients for leader election rest.AddUserAgent(config, "leader-election
zk spec: selector: app: zk ports: - port: 2888 name: server - port: 3888 name: leader-election - containerPort: 2888 name: server - containerPort: 3888 name: leader-election
5min // and cause re-election // so skip the delete here // as leader-election
zk-hs labels: app: zk spec: ports: - port: 2888 name: server - port: 3888 name: leader-election - containerPort: 2888 name: server - containerPort: 3888 name: leader-election
然后,这些实例使用Atomix leader-election原语来确定每个交换机的主交换机。如果ONOS实例发生故障,则使用相同的原语为交换机选择新的主控制器。新交换机也采用相同的方法。 ?
实现示例: https : //github.com/kubernetes/client-go/blob/master/examples/leader-election/main.go 九、描述什么是什么
这其实是启动的3个副本,同一时间只有一个 Pod 提供服务,通过 leader-election 来实现的选主高可用,比如当前这里提供服务的是 csi-snapshotter-86f65d8bc-dncwv
coordinator node会经历一个领导者选举(leader-election)过程,以选择出一个作为coordinator功能的节点,其余的节点当作冗余备份。
zk-hs labels: app: zk spec: ports: - port: 2888 name: server - port: 3888 name: leader-election - containerPort: 2888 name: server - containerPort: 3888 name: leader-election
exempt /registry/prioritylevelconfigurations/global-default /registry/prioritylevelconfigurations/leader-election