Definition:
Karmadaとは,KubernetesのAPIをそのまま使いながら, 複数のクラスターをまたいでアプリケーションを管理・運用するための, マルチクラウド・オーケストレーション・システムである.
Karmadaは, Cloud Native Computing Foundationのインキュベーティングプロジェクト[当初はサンドボックスとして採択され, 2022年に昇格]として位置づけられるマルチクラスター管理基盤であり, その起源はHuaweiによるマルチクラウド運用の実務的要請に遡る.Kubernetesの普及に伴い, 単一クラスターのスケーラビリティや可用性の限界, さらにはリージョン分散やクラウドベンダー間のポータビリティといった課題が顕在化したことを背景として, 既存のAPIやツールチェーンを維持したまま複数クラスターを統合的に扱う必要性が高まった.この文脈においてKarmadaは設計されており, 既存のKubernetesネイティブな宣言的モデルを保持しつつ, コントロールプレーンを論理的に拡張する形でマルチクラスター環境を統合する点に特徴がある.
KubernetesのフェデレーションK機構であるKubernetes Federation v2の思想的後継と位置づけられる側面を持つが, 独立して設計されたHuawei社内プロジェクトを起源とし, より実運用志向の設計へと再構成されている点が重要である.すなわち, Federation v2が複雑なカスタムリソースと制御ロジックに依存していたのに対し, Karmadaは「API互換性の維持」と「非侵入的統合」を重視している.
メンバークラスターとの接続には, PushモードとPullモードという二つの方式が用意されている.Pushモードでは, コントロールプレーンからメンバークラスターのAPIサーバーに直接接続してリソースを配布・同期する.一方Pullモードでは, メンバークラスター側にkarmada-agentを配置し, エージェントがコントロールプレーンからポリシーを取得して自律的に適用する.後者はネットワーク的にコントロールプレーンから直接到達できないクラスターや, セキュリティ上の制約が強い環境での統合に適しており, 両モードを使い分けることで既存クラスターを改変することなく段階的な統合が可能となっている.
機能的には, KarmadaはKubernetes APIサーバー互換のエンドポイントを提供し, ユーザーは単一クラスターと同様にリソース定義を適用できる.Karmadaの宣言的管理の核心を成すのが, PropagationPolicyとOverridePolicyという二つのカスタムリソースである.PropagationPolicyは, どのリソースをどのクラスターにどのルールで配布するかを定義するものであり, レプリカ数の分割戦略, リージョンやラベルに基づく配置制約, フェイルオーバー戦略などを記述できる.OverridePolicyはクラスターごとの差分設定——イメージタグ, 環境変数, レプリカ数の上書きなど——を宣言的に管理するためのものであり, 同一のワークロード定義を環境差異に応じてクラスターごとにカスタマイズすることを可能にする.
スケジューラはこれらのポリシーを評価してクラスター選択を行い, その結果をResourceBindingという内部オブジェクトとして記録する.ResourceBindingはリソースと配置先クラスターの対応関係を保持し, 以降の同期・ステータス集約処理の基点となる.リソースの差分同期やステータス集約といった機構により, 各クラスターの状態が中央に反映され, 一貫した管理が可能となる.
さらに, Karmadaはフェイルオーバーと災害復旧の機能を重視しており, 特定クラスターの障害時には他のクラスターへ自動的に再配置を行う仕組みを備える.状態伝播は基本的に即時同期を志向しているが, ネットワーク分断などの障害時には非同期的な伝播によって結果整合的な状態収束を図る設計となっている.結果として, KarmadaはKubernetesの宣言的モデルとエコシステムを保持したまま, グローバルスケールでのアプリケーション運用を可能にする基盤として位置づけられる.
Mathematics is the language with which God has written the universe.