当前位置:首页 > 科技  > 软件

Kubernetes Lease 及分布式选主

来源: 责编: 时间:2024-01-02 09:28:55 288观看
导读分布式选主在分布式系统中,应用服务常常会通过多个节点(或实例)的方式来保证高可用。然而在某些场景下,有些数据或者任务无法被并行操作,此时就需要由一个特定的节点来执行这些特殊的任务(或者进行协调及决策),这个特定的节点

分布式选主

在分布式系统中,应用服务常常会通过多个节点(或实例)的方式来保证高可用。然而在某些场景下,有些数据或者任务无法被并行操作,此时就需要由一个特定的节点来执行这些特殊的任务(或者进行协调及决策),这个特定的节点也就是领导者(Leader),而在多个节点中选择领导者的机制也就是分布式选主(Leader Election)。6u028资讯网——每日最新资讯28at.com

6u028资讯网——每日最新资讯28at.com

如今诸多知名项目也都使用了分布式选主,例如:6u028资讯网——每日最新资讯28at.com

  • Etcd
  • Kafka
  • Elasticsearch
  • Zookeeper

常用算法包括:6u028资讯网——每日最新资讯28at.com

  • Paxos:一种著名的分布式共识算法,原理和实现较为复杂(此算法基本就是共识理论的奠基之作,曾有人说:"世界上只有一种共识协议,就是 Paxos,其他所有共识算法都是 Paxos 的退化版本")。
  • Raft:目前最广泛使用的分布式共识算法之一,Etcd 使用的就是 Raft,Elasticsearch 和 Kafka 在后来的版本中也都抛弃了早期的算法并转向了 Raft。
  • ZAB(Zookeeper Atomic Broadcast):Zookeeper 使用的一致性协议,也包括选主机制。

Kubernetes Lease

在 Kubernetes 中,诸如 kube-scheduler 和 kube-controller-manager 等核心组件也需要使用分布式选主,因为其需要确保任一时刻只有一个调度器在做出调度决策,同一时间只有一个控制管理器在处理资源对象。6u028资讯网——每日最新资讯28at.com

然而,除了核心组件,用户的应用服务很可能也有类似分布式选主的需求,为了满足这种通用需求,kubernetes 提供了 Lease(翻译为“租约”)这样一个特殊的资源对象。6u028资讯网——每日最新资讯28at.com

6u028资讯网——每日最新资讯28at.com

如上图所示,在 k8s 中选主是通过争抢一个分布式锁(Lease)来实现的,抢到锁的实例成为 leader,为了确认自己持续存活,leader 需要不断的续签这个锁(Lease),一旦 leader 挂掉,则锁被释放,其他候选人便可以竞争成为新的 leader。6u028资讯网——每日最新资讯28at.com

Lease 的结构也很简单:6u028资讯网——每日最新资讯28at.com

apiVersion: coordination.k8s.io/v1kind: Leasemetadata:  # objectspec:  acquireTime: # 当前租约被获取的时间  holderIdentity: # 当前租约持有者的身份信息  leaseDurationSeconds: # 租约候选者需要等待才能强制获取它的持续时间  leaseTransitions: # 租约换了多少次持有者  renewTime: # 当前租约持有者最后一次更新租约的时间

Lease 本质上与其它资源并无区别,除了 Lease,其实也可以用 configmap 或者 endpoint 作为分布式锁,因为在底层都是 k8s 通过资源对象的 resourceVersion 字段进行 compare-and-swap,也就是通过这个字段实现的乐观锁。当然在实际使用中,建议还是用 Lease。6u028资讯网——每日最新资讯28at.com

使用示例

使用 Lease 进行分布式选主的示例如下:6u028资讯网——每日最新资讯28at.com

import (    "context"    "time"    "k8s.io/client-go/kubernetes"    "k8s.io/client-go/rest"    "k8s.io/client-go/tools/leaderelection"    "k8s.io/client-go/tools/leaderelection/resourcelock")func main() {    config, err := rest.InClusterConfig()    if err != nil {        panic(err.Error())    }    clientset, err := kubernetes.NewForConfig(config)    if err != nil {        panic(err.Error())    }    // 配置 Lease 参数    leaseLock := &resourcelock.LeaseLock{        LeaseMeta: metav1.ObjectMeta{            Name:      "my-lease",            Namespace: "default",        },        Client: clientset.CoordinationV1(),        LockConfig: resourcelock.ResourceLockConfig{            Identity: "my-identity",        },    }    // 配置 Leader Election    leaderElectionConfig := leaderelection.LeaderElectionConfig{        Lock:          leaseLock,        LeaseDuration: 15 * time.Second,        RenewDeadline: 10 * time.Second,        RetryPeriod:   2 * time.Second,        Callbacks: leaderelection.LeaderCallbacks{            OnStartedLeading: func(ctx context.Context) {                // 当前实例成为 Leader                // 在这里执行 Leader 专属的逻辑            },            OnStoppedLeading: func() {                // 当前实例失去 Leader 地位                // 可以在这里执行清理工作            },            OnNewLeader: func(identity string) {                // 有新的 Leader 产生            }        },    }    leaderElector, err := leaderelection.NewLeaderElector(leaderElectionConfig)    if err != nil {        panic(err.Error())    }    // 开始 Leader Election    ctx := context.Background()    leaderElector.Run(ctx)}

参考资料:6u028资讯网——每日最新资讯28at.com

  • https://kubernetes.io/docs/concepts/architecture/leases/
  • https://kubernetes.io/docs/reference/kubernetes-api/cluster-resources/lease-v1/
  • https://pkg.go.dev/k8s.io/client-go@v0.29.0/tools/leaderelection

6u028资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-55040-0.htmlKubernetes Lease 及分布式选主

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 五个用于构建Web应用程序的Go Web框架

下一篇: 我们一起聊聊如何使用Docker来编排Web应用

标签:
  • 热门焦点
  • 如何正确使用:Has和:Nth-Last-Child

    我们可以用CSS检查,以了解一组元素的数量是否小于或等于一个数字。例如,一个拥有三个或更多子项的grid。你可能会想,为什么需要这样做呢?在某些情况下,一个组件或一个布局可能会
  • 从零到英雄:高并发与性能优化的神奇之旅

    作者 | 波哥审校 | 重楼作为公司的架构师或者程序员,你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢?笔者在出道那会为此是吃尽了苦头的,不过也得
  • 重估百度丨“晚熟”的百度云,能等到春天吗?

    ©自象限原创作者|程心排版|王喻可2016年7月13日,百度云计算战略发布会在北京举行,宣告着百度智能云的正式启程。彼时的会场座无虚席,甚至排队排到了门外,在场的所有人几乎都
  • 大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • 阿里瓴羊One推出背后,零售企业迎数字化新解

    作者:刘旷近年来随着数字经济的高速发展,各式各样的SaaS应用服务更是层出不穷,但本质上SaaS大多局限于单一业务流层面,对用户核心关切的增长问题等则没有提供更好的解法。在Saa
  • 认真聊聊东方甄选:如何告别低垂的果实

    来源:山核桃作者:财经无忌爆火一年后,俞敏洪和他的东方甄选依旧是颇受外界关心的“网红”。7月5日至9日,为期5天的东方甄选“甘肃行”首次在自有App内直播,
  • 小米汽车电池信息疑似曝光:容量101kWh,支持800V高压快充

    7月14日消息,今日一名博主在社交媒体发布了一张疑似小米汽车电池信息的照片,显示该电池包正是宁德时代麒麟电池,容量为101kWh,电压为726.7V,可以预测小
  • 苹果、三星、惠普等暂停向印度出口笔记本和平板电脑

    集微网消息,据彭博社报道,在8月3日印度突然禁止在没有许可证的情况下向印度进口电脑/平板及显示器等产品后,苹果、三星电子和惠普等大公司暂停向印度
  • OPPO K11搭载高性能石墨散热系统:旗舰同款 性能凉爽释放

    日前OPPO官方宣布,将于7月25日14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖点就是将配备索尼
Top