成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Kubernetes Lease 及分布式選主

開發 云原生
除了核心組件,用戶的應用服務很可能也有類似分布式選主的需求,為了滿足這種通用需求,kubernetes 提供了 Lease(翻譯為“租約”)這樣一個特殊的資源對象。

分布式選主

在分布式系統中,應用服務常常會通過多個節點(或實例)的方式來保證高可用。然而在某些場景下,有些數據或者任務無法被并行操作,此時就需要由一個特定的節點來執行這些特殊的任務(或者進行協調及決策),這個特定的節點也就是領導者(Leader),而在多個節點中選擇領導者的機制也就是分布式選主(Leader Election)。

如今諸多知名項目也都使用了分布式選主,例如:

  • Etcd
  • Kafka
  • Elasticsearch
  • Zookeeper

常用算法包括:

  • Paxos:一種著名的分布式共識算法,原理和實現較為復雜(此算法基本就是共識理論的奠基之作,曾有人說:"世界上只有一種共識協議,就是 Paxos,其他所有共識算法都是 Paxos 的退化版本")。
  • Raft:目前最廣泛使用的分布式共識算法之一,Etcd 使用的就是 Raft,Elasticsearch 和 Kafka 在后來的版本中也都拋棄了早期的算法并轉向了 Raft。
  • ZAB(Zookeeper Atomic Broadcast):Zookeeper 使用的一致性協議,也包括選主機制。

Kubernetes Lease

在 Kubernetes 中,諸如 kube-scheduler 和 kube-controller-manager 等核心組件也需要使用分布式選主,因為其需要確保任一時刻只有一個調度器在做出調度決策,同一時間只有一個控制管理器在處理資源對象。

然而,除了核心組件,用戶的應用服務很可能也有類似分布式選主的需求,為了滿足這種通用需求,kubernetes 提供了 Lease(翻譯為“租約”)這樣一個特殊的資源對象。

如上圖所示,在 k8s 中選主是通過爭搶一個分布式鎖(Lease)來實現的,搶到鎖的實例成為 leader,為了確認自己持續存活,leader 需要不斷的續簽這個鎖(Lease),一旦 leader 掛掉,則鎖被釋放,其他候選人便可以競爭成為新的 leader。

Lease 的結構也很簡單:

apiVersion: coordination.k8s.io/v1
kind: Lease
metadata:
  # object
spec:
  acquireTime: # 當前租約被獲取的時間
  holderIdentity: # 當前租約持有者的身份信息
  leaseDurationSeconds: # 租約候選者需要等待才能強制獲取它的持續時間
  leaseTransitions: # 租約換了多少次持有者
  renewTime: # 當前租約持有者最后一次更新租約的時間

Lease 本質上與其它資源并無區別,除了 Lease,其實也可以用 configmap 或者 endpoint 作為分布式鎖,因為在底層都是 k8s 通過資源對象的 resourceVersion 字段進行 compare-and-swap,也就是通過這個字段實現的樂觀鎖。當然在實際使用中,建議還是用 Lease。

使用示例

使用 Lease 進行分布式選主的示例如下:

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)
}

參考資料:

  • 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

責任編輯:趙寧寧 來源: 系統架構師Go
相關推薦

2025-06-13 07:30:51

2014-12-11 09:56:33

DockerKubernetesGoogle

2022-06-08 07:36:03

LocustKubernete微服務

2020-03-31 08:05:23

分布式開發技術

2019-10-10 09:16:34

Zookeeper架構分布式

2017-09-01 05:35:58

分布式計算存儲

2019-06-19 15:40:06

分布式鎖RedisJava

2023-05-29 14:07:00

Zuul網關系統

2015-08-04 15:47:39

2021-08-17 00:24:38

塊存儲云原生分布式

2017-10-27 08:40:44

分布式存儲剪枝系統

2023-10-26 18:10:43

分布式并行技術系統

2023-09-14 15:44:46

分布式事務數據存儲

2023-07-05 00:09:13

分布式存儲架構

2015-05-26 11:18:06

分布式系統可擴展性

2023-11-06 13:15:32

分布式事務Seata

2022-03-24 14:11:25

KubernetesCitusPostgreSQL

2022-02-21 10:17:33

Rancher開源云原生

2018-07-17 08:14:22

分布式分布式鎖方位

2024-03-01 09:53:34

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕乱码亚洲精品一区 | 久久久久久亚洲精品 | 九九热在线视频观看这里只有精品 | 日本一区二区三区免费观看 | 亚洲在线一区二区 | 中文字幕一区二区三区在线视频 | 久久久久久久久久久久91 | 国产精品一区二区视频 | 麻豆国产一区二区三区四区 | 日韩电影中文字幕在线观看 | 91免费在线 | 国产免费a视频 | 日一区二区 | 欧美成人一区二区 | 久久精品亚洲一区二区三区浴池 | 一区二区三区四区av | av资源中文在线天堂 | 国产精品久久久久久久久久 | 亚洲欧美一区二区三区国产精品 | 久久久精品一区 | 啪啪精品 | 日韩在线视频免费观看 | 亚洲精品在线免费 | 免费骚视频 | 亚洲系列第一页 | 欧美xxxx性xxxxx高清 | 天色综合网 | 97久久精品午夜一区二区 | 欧美日韩不卡 | h视频在线播放 | 一区二区三区中文字幕 | 91av在线免费| 日日操操 | 国产成人免费视频网站视频社区 | av网址在线播放 | 91高清视频在线观看 | 亚洲中午字幕 | 一本一道久久a久久精品蜜桃 | 国产精品美女久久久久久久久久久 | 午夜视频在线 | 日韩精品一区二区三区在线播放 |