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 を組み合わせたグレースケール リリース

推薦する

タオバオSEOは検索マーケティング業界から注目を集めている

報告書によると、2012年にタオバオの店舗総数は500万を超えた。タオバオ店舗の総数が増加するにつれ...

ウェブサイトのコンテンツの最適化はこのように行うべきであり、これが本当のやり方です

ウェブサイトのコンテンツ構築はすでに当たり前のことであり、すべてのウェブマスターはコンテンツに基づく...

なぜ書店が必要なのでしょうか?

書店を開こうとする人は多く、書店で本を読む人は多くても、オンラインで購入している。多くの書店は損益分...

URL パスを最適化する方法は?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています基本的なウ...

SAPは世界最大のビジネスネットワークを拡大する計画で、中国でさらに多くのクラウド製品が発売される予定

SAP は本日開催された SAPPHIRE NOW カンファレンスにおいて、ビジネス成果の向上、経済...

2018 年のクラウド コンピューティングの 4 つの意外なトレンド

2018 年は成長が加速する年となり、仮想製品によってデータ漏洩が増加し、クラウド コンピューティン...

ウェブサイトのキーワードランキングの機会をつかみ、ウェブサイトのドメイン名から始めましょう

今日、私は偶然、特定のウェブサイトタイトルや特定のウェブサイトの説明のないウェブサイトがBaiduで...

Vcluster を使用して Kubernetes でマルチテナントを実装する方法

翻訳者 |李睿レビュー |チョンロウ Kubernetes は、組織がコンテナ化されたアプリケーショ...

商品に注力し、オペレーションを軽視する ― なぜアンジュークはソウファンを上回れないのか?

製品とオペレーションのどちらがより重要ですか? これは、鶏が先か卵が先かを議論するのと同じように、そ...

日用品にロゴをデザインすると、その人気が大幅に高まります

月収10万元の起業の夢を実現するミニプログラム起業支援プラン日本人が想像力豊かなことは誰もが知ってお...

入札促進の「ブラックフライデー」に合理的に対処する

入札プロモーションを数年間行っている場合、毎年、Baiduの入札プロモーションの結果に「低迷期」が数...

インターネットマーケティングでは「バレル原則」に注意する必要がある

いわゆる「樽原理」は短板理論であり、樽が保持できる水の量は樽の長い板ではなく、樽の中で最も短い板によ...

プロメテウスはわずか4.55ポンド:4Gメモリ/4コア/50Gハードディスク/2Tトラフィック

iperweb は、prometeus (イタリアで登録) の 2 番目のブランド (英国で登録) ...

#618# uuuvps: 米国の cn2 gia VPS は年間 256 元から、香港の cn2 VPS は年間 299 元から

uuuvps 618イベント:(1)米国西海岸サンノゼデータセンターのCN2 GIA回線付きVPSが...