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

推薦する

IDC:中国のビデオクラウド市場規模は2021年上半期に43.7億米ドルに達した

インターナショナル・データ・コーポレーション(IDC)が発表した最新の「中国ビデオクラウド市場追跡(...

調査によると、企業はポストパンデミック時代にクラウドサービスへの移行を加速するだろう

LogicMonitor の新しい調査結果によると、全体的な状況はまだ変化しているものの、COVID...

Baidu Spark Projectはオリジナル記事の掲載問題を解決できるか?

インターネット情報環境の健全な発展を促進するため、検索エンジンは日々アルゴリズムを更新し、質の高いオ...

新浪微博が収益化を目指す草の根の大口アカウントを取り締まり、マーケティング会社が圧迫される

研修記者の季家鵬が北京からレポートSina Weiboでお金を稼ぐのはもう簡単ではありません。記者の...

A5 Webmaster Networkの第7回ソフトコピーライティングとソフトコピーマーケティングトレーニングの申し込み受付を開始しました

企業向けでもウェブサイトマーケティング向けでも、ソフトテキストマーケティングは欠かせないマーケティン...

dwidc: 米国CN2独立サーバー、CC攻撃をフィルタリングする多層ファイアウォール、450元、2*e5-2620/32gメモリ/240gSSD+1THDD/30M帯域幅

Dawang Data は現在、米国西海岸のサンノゼ データ センターにある独立サーバーを 50% ...

タイガースニフの徹底分析:成功する製品はどのように作られるか

Huxiu は設立からまだ半年しか経っていないテクノロジーメディアのウェブサイトです。さまざまな角度...

誰もがクラウド コンピューティングとビッグ データについて語っていますが、クラウド コンピューティングとは一体何でしょうか?

(1)超大規模「クラウド」はかなりの規模を持っています。 Google クラウド コンピューティング...

ブラック 5 プロモーション: a2hosting-50% オフ/SSD/無制限のスペース/SS サポート

A2hosting、ブラックフライデーがやって来ました! SSD ハード ドライブを搭載した仮想ホス...

2020 年に注目すべき 10 社のエッジ コンピューティング スタートアップ

エッジでのイノベーション市場調査会社IDCによると、世界のエッジコンピューティング市場規模は2024...

凌鳥クラウドDTSalesが2019年アリババ神々の戦いニューリテールグローバル決勝で2位を獲得

[[283294]] 11月20日、2019年アリババ世界神々の戦いイノベーション・起業コンテスト...

VeryCD はすべての共有リソースリンクを削除し、eMule は変革の過程にある可能性があります

最近、多くのネットユーザーが、いつも利用しているダウンロード Web サイト VeryCD のすべて...

#プロモーション: urpad-$3/4IP/1G メモリ/100G ハードディスク/1T トラフィック/ロサンゼルス

Urpad が最後に私のブログに登場したのは、2018 年 3 月 8 日です。Root Level...

【AWS コミュニティディスカッション活動概要 1】適切なクラウドコンピューティングプラットフォームを選択するには?

今日では、クラウド コンピューティング プラットフォームが次々と登場しています。クラウド コンピュー...

ウェブサイト運営その4 - 龍の十八掌

最近、友人からオンラインプロモーションのやり方やプロジェクトの運営方法をよく聞かれますが、ネットワー...