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

Kubernetes Lease 及分布式选主

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

分布式选主

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

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

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

  • Etcd
  • Kafka
  • Elasticsearch
  • Zookeeper

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

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

Kubernetes Lease

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

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

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

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

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

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

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

使用示例

使用 Lease 进行分布式选主的示例如下:CZl28资讯网——每日最新资讯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)}

参考资料:CZl28资讯网——每日最新资讯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

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

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

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

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

下一篇: C++ module编程升级指南,子模块与分区全解析

标签:
  • 热门焦点
  • 一加Ace2 Pro真机揭晓 钛空灰配色质感拉满

    终于,在经过了几波预热之后,一加Ace2 Pro的外观真机图在网上出现了。还是博主数码闲聊站曝光的,这次的外观设计还是延续了一加11的方案,只是细节上有了调整,例如新加入了钛空灰
  • 6月安卓手机好评榜:魅族20 Pro蝉联冠军

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年6月1日至6月30日,仅限国内市场。第一名:魅族20 Pro好评率:95%5月份的时候魅族20 Pro就是
  • 三言两语说透设计模式的艺术-简单工厂模式

    一、写在前面工厂模式是最常见的一种创建型设计模式,通常说的工厂模式指的是工厂方法模式,是使用频率最高的工厂模式。简单工厂模式又称为静态工厂方法模式,不属于GoF 23种设计
  • Automa-通过连接块来自动化你的浏览器

    1、前言通过浏览器插件可实现自动化脚本的录制与编写,具有代表性的工具就是:Selenium IDE、Katalon Recorder,对于简单的业务来说可快速实现自动化的上手工作。Selenium IDEKat
  • 三万字盘点 Spring 九大核心基础功能

    大家好,我是三友~~今天来跟大家聊一聊Spring的9大核心基础功能。话不多说,先上目录:图片友情提示,本文过长,建议收藏,嘿嘿嘿!一、资源管理资源管理是Spring的一个核心的基础功能,不
  • 从零到英雄:高并发与性能优化的神奇之旅

    作者 | 波哥审校 | 重楼作为公司的架构师或者程序员,你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢?笔者在出道那会为此是吃尽了苦头的,不过也得
  • 零售大模型“干中学”,攀爬数字化珠峰

    文/侯煜编辑/cc来源/华尔街科技眼对于绝大多数登山爱好者而言,攀爬珠穆朗玛峰可谓终极目标。攀登珠峰的商业路线有两条,一是尼泊尔境内的南坡路线,一是中国境内的北坡路线。相
  • 认真聊聊东方甄选:如何告别低垂的果实

    来源:山核桃作者:财经无忌爆火一年后,俞敏洪和他的东方甄选依旧是颇受外界关心的“网红”。7月5日至9日,为期5天的东方甄选“甘肃行”首次在自有App内直播,
  • iQOO Neo8 Pro评测:旗舰双芯加持 最强性能游戏旗舰

    【Techweb评测】去年10月,iQOO推出了一款Neo7手机,该机搭载了联发科天玑9000+,配备独显芯片Pro+,带来了同价位段最佳的游戏体验,一经上市便受到了诸多用
Top