Kubernetes リースと分散リーダー選出

Kubernetes リースと分散リーダー選出

分散リーダー選出

分散システムでは、アプリケーション サービスは高可用性を確保するために複数のノード (またはインスタンス) を使用することが多いです。ただし、シナリオによっては、一部のデータまたはタスクを並行して操作できない場合があります。現時点では、これらの特別なタスクを実行する(または調整して決定する)には特定のノードが必要です。この特定のノードがリーダーであり、複数のノードの中からリーダーを選択するメカニズムは分散リーダー選出と呼ばれます。

最近では、多くの有名なプロジェクトでも分散リーダー選挙が使用されています。たとえば、

  • その他
  • カフカ
  • エラスティックサーチ
  • 動物園の飼育員

一般的なアルゴリズムには次のものがあります。

  • Paxos: 複雑な原理と実装を備えた、よく知られた分散型コンセンサス アルゴリズムです (このアルゴリズムは基本的にコンセンサス理論の基礎です。かつて誰かがこう言いました。「世界にはコンセンサス プロトコルが 1 つだけあり、それが Paxos です。他のすべてのコンセンサス アルゴリズムは Paxos の退化したバージョンです」)。
  • Raft: 最も広く使用されている分散コンセンサス アルゴリズムの 1 つ。 Etcd は Raft を使用します。 Elasticsearch と Kafka も初期のアルゴリズムを放棄し、後のバージョンでは Raft に移行しました。
  • ZAB (Zookeeper Atomic Broadcast): Zookeeper が使用する一貫性プロトコル。リーダー選出メカニズムも含まれます。

Kubernetes リース

Kubernetes では、kube-scheduler や kube-controller-manager などのコア コンポーネントも分散リーダー選出を使用する必要があります。これは、常に 1 つのスケジューラだけがスケジュール決定を行い、同時に 1 つのコントロール マネージャーだけがリソース オブジェクトを処理するようにする必要があるためです。

ただし、コア コンポーネントに加えて、ユーザー アプリケーション サービスにも同様の分散リーダー選出要件がある場合があります。この一般的な要件を満たすために、Kubernetes は Lease と呼ばれる特別なリソース オブジェクトを提供します。

上の図に示すように、k8s におけるリーダー選出は、分散ロック (リース) を競うことで実現されます。ロックを取得したインスタンスがリーダーになります。リーダーは、その存続を確認するために、ロック(リース)を継続的に更新する必要があります。リーダーが電話を切るとロックが解除され、他の候補者が新しいリーダーになるために競争できるようになります。

リースの構造も非常にシンプルです。

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

リースは本質的に他のリソースと変わりません。 Lease に加えて、configmap またはエンドポイントを分散ロックとして使用することもできます。これは、最下層で、k8s がリソース オブジェクトの resourceVersion フィールドを使用して比較とスワップを実行するため、つまり、このフィールドを通じて楽観的ロックが実装されるためです。もちろん、実際の使用ではリースを使用することをお勧めします。

使用例

分散リーダー選出に 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/[email protected]/tools/leaderelection

<<:  Kubernetes CRD とオペレーターの紹介

>>:  Istio と Flagger を組み合わせたグレースケール リリース

推薦する

タオバオの新たな変化に直面 - ヒューリスティック対応の実行計画(I)

タオバオの新たな変化に直面 - ジンケの対応実施計画数日前、私たちはタオバオに大きな変化を経験しまし...

検索フレンドリーなデザインの基本原則について語るシャリ・サロウ

5月25日、厦門でグローバル検索エンジン戦略会議が開催されました。Grantastic Design...

アリババクラウド神龍アクセラレータエンジンがTPCx-BBで1位を獲得、2位に40%差

このほど、国際標準化試験機関TPCはビッグデータ処理性能TPCx-BB SF3000の最新ランキング...

百科事典ウェブサイトにおけるソーシャルメディアマーケティングの考慮事項

百科事典のウェブサイトは、中国でよく使われる百度百科事典、滬東百科事典、索想百科事典など、通常、より...

ダブル11にBステーションが潜んでいる?

「ビリビリのトップ100製品リスト?聞いたことないよ」多くのUpマスターは半ば冗談めかして「ビリビリ...

非伝統的なメディアを通じたネットワークマーケティングについての簡単な議論

インターネットは人々の生活に静かに浸透してきました。情報の発展に伴い、数多くの非伝統的なメディアが登...

desivps が losangelesvps.com を買収

創業から3年未満のアメリカのVPS販売業者losangelesvps.comが、www.desivp...

百度のCEOロビン・リー:人間関係重視の会社にならないように、管理する人を3人だけにしたかった

ロビン・リーが初めて制服を着用新浪科技報、10月27日午後、百度の会長兼CEOであるロビン・リー氏は...

翻訳:コア原則分析、何を学びましたか?

1. 背景分散アーキテクチャでは、サービスの数とシステム区分の両方の観点から、管理する必要があるサー...

テンセントのソーシャルeコマース「小蒜品」を分析!

中国の電子商取引市場は、常に最も競争が激しく、最も失敗しやすい分野であると考えられてきました。インタ...

IoT におけるエッジ コンピューティングとは何ですか?

「接続された」デバイスの数が増えると過剰なデータが生成されますが、モノのインターネット (IoT) ...

スキルギャップが拡大する中、クラウド時代の企業は主導権を握らなければならない。

「クラウドコンピューティングの人材不足をどう解決するか?」これは多くの IT リーダーにとって重要な...

クラウドコンピューティングの8つの一般的な用途

クラウド コンピューティングとは、ユーザーがインターネット経由でクラウド サービスに対して料金を支払...

ブラックフライデープロモーション: weloveservers-1gメモリ年間支払い19ドル

weloveservers のブラック フライデー プロモーションが始まりました。1G のメモリが年...

ランキング向上におけるURL内のキーワードの役割

URL、または Uniform Resource Locator (URL、英語の Uniform ...