KubeCon + CloudNativeCon Japan 2025 特集 Blog 最終日の記事になります。

このブログでは、Google の Kaslin Fields 氏が発表した「Multi Cluster Magics with Argo CD and Cluster Inventory」のセッション内容をベースに、マルチクラスタにおけるアプリケーション運用とクラスタ管理の標準化について紹介します。

目次

  1. 自己紹介
  2. KubeCon の参加に至った経緯
  3. マルチクラスタ運用の課題
  4. Argo CD でマルチクラスタを管理
  5. Glue Code
  6. SIG Multicluster の発足
  7. Multicluster API と MCO
  8. まとめ

自己紹介

昨年度、株式会社サイバーエージェントに SRE として新卒入社しました 後藤 廉(@ren510dev)です。現在は、株式会社AbemaTV Platform Division Cloud Platform Team にて Google Cloud / AWS を中心に各種 OSS を用いたマルチクラウド基盤の構築・運用を担当しています。

ABEMA では、Google Cloud / AWS を活用したマルチクラウド構成を採用し、開局以降段階的な拡張により、現在では 300 以上のマイクロサービスが各クラウドプロバイダ上の Kubernetes 環境で稼働しています。

Platform Division のこれまでの取り組みについては下記を見てみてください。

さて、私は今回初めての現地参加となりました。以前から KubeCon のセッションはタイムシフトや登壇スライドを通じてキャッチアップしており、いずれ現地に出向いて対外的な事例やコミュニティの熱量を肌で感じたいと思っていました。

また、ABEMA ではマルチクラウド環境のもと、GKE / EKS 等の各種クラウドベンダが提供する Kubernetes エンジンや CNCF の OSS を幅広く活用しています。

そうした背景もあり、現場の課題感に通じる知見が得られるのではないかという期待と、今後のチーム運用に還元できるヒントを得たいという思いがありました。

先日のイベントで発表された「CyberAgent – Cloud Native Technology Map 2025」の中でも ABEMA の Cloud Platform 運用構成について紹介されていますで、興味のある方は是非ご覧ください。

マルチクラスタ運用の課題

みなさんはマルチクラスタ運用をされていますでしょうか。また複数のクラスタを管理・運用する際のベストプラクティスについてどのような考えをお持ちでしょうか。

Kubernetes 登場初期から、複数のクラスタでアプリケーションをどのように管理するかという命題は存在しました。

というのも、Kubernetes そのものはクラスタの識別情報を保持しないため、クラスタが自分自身の存在を認識することはできず、他のクラスタ情報を持つこともできません。セッションでは、昨今 Kubernetes が直面する最大の課題の 1 つに、マルチクラスタ運用の複雑さ、複数のクラスタをどう管理するのかという Kubernetes による Kubernetes の管理 が挙げられることが強く言及されていました。

それなら、わざわざクラスタを分割せずに Namespace を使えばよいのでは?と考えるかもしれません。実際に Namespace を利用することでリソースの論理分離は可能ですが、例えば以下のようなユースケースには不十分です。

  • 地理的な要因(レイテンシやデータガバナンス)
  • セキュリティ、コスト、組織単位での分離要求

つまり Namespace では物理的・論理的に完全な分離が必要なシナリオには対応しきれないわけです。

Argo CD でマルチクラスタを管理

同一アプリケーションを複数クラスタに跨ってデプロイ・管理するためのツールの一つに Argo CD があります。

Argo CD は、各クラスタへのアクセス情報を Secret として保持し、アプリケーションの定義毎に各クラスタをリスト化します。その上で、指定されたクラスタに対して同一のマニフェストを同期的に適用することで、単一の Controller から複数のクラスタへアプリケーションを一括デプロイすることが可能になります。

# application-cluster1.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: myapp-cluster1
spec:
  destination:
    server: https://cluster1.example.com
    namespace: myapp
  source:
    repoURL: https://github.com/example-org/myapp
    path: manifests
    targetRevision: main
  project: default
---
# application-cluster2.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: myapp-cluster2
spec:
  destination:
    server: https://cluster2.example.com
    namespace: myapp
  source:
    repoURL: https://github.com/example-org/myapp
    path: manifests
    targetRevision: main
  project: default
---
# and more...

しかし、クラスタやアプリケーションの数が増えるにつれて、この構成はスケーラビリティの観点で課題が生じてきます。複数のアプリケーションがそれぞれ異なるクラスタにデプロイされる状況では、どのアプリケーションがどのクラスタリストを参照しているかという構成の依存関係が複雑に絡むためリストのリスト状態となります。

 

このような構成では、

  • 新しいクラスタの追加時に、複数のアプリケーション定義を横断的に修正する必要がある
  • リージョンや用途等、クラスタ毎の属性に応じたデプロイ制御が困難になる
  • クラスタ構成の全体像が散在し、可視性や保守性が低下する

という問題に向き合わなければなりません。

Glue Code

Argo CD に限らず、マルチクラスタに対応する OSS やクラウドベンダの機能は多数存在し、年々増加傾向にあります。

これらのプロジェクトは、それぞれに独自のクラスタ管理モデルやクラスタリストの形式を持っていますが、内部的には似たような機能をゼロから再実装しています。

そのため、複数ベンダを利用するサービスの場合、プロジェクト間の統合が複雑化することになります。

例:

  • Argo CD に登録したクラスタ情報と Karmada のクラスタ定義に互換性がない
  • OCM のクラスタ識別方法と GKE Fleet の API モデルは独立している

クラスタの管理者は、これらのツール間のギャップを無くするためにクラスタ名やリージョン、用途等のメタ情報を別々に管理し、各プロジェクト向けに再定義し直す必要があります。

このように、差異を埋めるための言わば橋渡しのために書かれるコードは Glue Code と呼ばれ、構成の重複・整合性の破綻・管理コストの増加という形で、運用の足枷となります。

セッションでは、これを「クラスタリストの再発明(= Constant cycle)」と呼んでおり、マルチクラスタの統合管理における共通言語の欠如こそが最大の障壁であると強調していました。

SIG Multicluster の発足

前述の通り、現在のマルチクラスタ環境にはツールやベンダが乱立・散在し、クラスタリストの形式や扱い方に統一性がありません。このため、ツール間でクラスタ情報を連携する共通言語が存在せず、管理者はプロジェクト毎に同じようなクラスタ情報を定義・管理・同期するといった非効率な作業が必要になる課題があります。

以上の背景を受け、マルチクラスタの標準化に向けて Kubernetes コミュニティの中で SIG Multicluster(Special Interest Group Multicluster)が発足しました。

SIG Multicluster では、マルチクラスタの運用を統一的に扱うために API 標準を 2 つ定義しています。

Part 1:Multicluster Services(MCS)API

MCS は複数クラスタに跨る L4 の Service をシームレスに扱うことを目的とした API です。

  • ServiceExport:各クラスタのサービスを外部に公開することを宣言
  • ServiceImport:他クラスタから参照するためのインターフェース
  • ClusterSet:MCS のスコープとなるクラスタの集合体

これにより、一つのサービスが複数クラスタ上にあることを前提に通信や名前解決ができるようになります。MCS 自体は KEP-1645 として 2020 年に提案され、現在では IstioSubmarinerMCS-aware CoreDNS 等でも採用が進んでいます。

Part 2:ClusterProfiles API

ClusterProfiles は、Cluster Inventory に基づき複数のクラスタのメタデータを、統一された形式で集約・管理することを目的とした API です。Cluster Inventory とは、Kubernetes におけるマルチクラスタ運用をスケーラブルかつ標準化された形で実現するための概念で、ClusterProfiles API 仕様の中心的な考え方になっています。

ClusterProfiles API 自体は 2023 年末頃に KEP-4322 で提案されました。

ClusterProfile は CRD として定義される Kubernetes オブジェクトで、location や environment、kubernetesVersion 等の任意の情報を ラベル・プロパティとして保持します。複数の ClusterProfile をまとめて ClusterSet を構成し、用途別・環境別のグルーピングが可能になり、Namespace 毎にも分離できるため、マルチテナント環境にも対応可能です。

これにより、Argo CD や MultiKueue といったツールが、同じフォーマットのクラスタ情報を参照・制御できるようになります。

Multicluster API と MCO

実際にクラスタマネージャに ClusterProfiles API を採用した例として Google Cloud が 2025 年 4 月に OSS として公開した Multicluster Orchestrator(MCO)があります。MCO は、マルチクラスタ環境をより自律的かつ最適化された形で運用するためのオーケストレータで、以下のような特徴があります。

1. Hub Cluster

Hub Cluster では、全ての ClusterProfile を管理し、ここに CRD を集約します。Hub Cluster は、マルチクラスタ全体の状態・リソースを一元的に管理する言わば Control-Plane の立ち位置で、他のクラスタを管理対象ノードとして扱います。

2. Auto Bin Packing 型スケジューリング

location や environment、kubernetesVersion 等、各クラスタが持つ情報を ClusterProfile 経由で取得します。クラスタ管理者が定義したルールやポリシに従って、最適なクラスタにアプリケーションをデプロイします。

また、負荷状況に応じて、スケジュール先を動的に再調整、Rebalancing することも可能です。

3. 他ツールとの統合性

MCO は単体で完結するわけではなく、既存ツールと連携して機能することを前提に設計されています。例えば、Argo CD ApplicationSet のデプロイ先を ClusterProfile を経由して MCO で決定したり、Kueue の Job や Batch 処理をクラスタ横断でスケジューリングしたりといった活用が可能です。

また、GKE / EKS / AKS といった各クラウドプロバイダが提供する Kubernetes エンジンに ClusterProfile が統合されれば、マルチクラウドにおける統一的なクラスタ運用が可能になるとされています。

まとめ

本ブログでは、Google の Kaslin Fields 氏による「Multi Cluster Magics with Argo CD and Cluster Inventory」のセッションを通して、Kubernetes におけるマルチクラスタ運用の構造的な課題と、その解決に向けた標準化の取り組みについて紹介しました。

Argo CD のような GitOps ツールベースの運用には限界があり、ツールやベンダ毎に異なるクラスタ管理方式が乱立する中、マルチクラスタ管理におけるツール間ギャップの解消と標準化への取り組みとして、Kubernetes SIG Multicluster は発足しました。

従来の管理方針は、主に「どのクラスタに何を置くか」といった静的な指定が中心でしたが、MCO はそれを動的に判断・最適化できるため、運用コストの大幅な削減やリソースの最大活用が期待できます。

現段階ではビジョンの面が強いものの、ClusterProfiles API や MCS API を取り入れた具体的なソリューションも既に登場しつつあります。特に、MCO では Kubernetes そのものの抽象化に焦点を当てており、単なるリソースのデプロイではなく、アプリケーションの配置、通信、キャパシティ管理、モニタリング、再スケジューリングまでを含めた、言わば Fleet as a Platform が目指されています。

セッションを通じて

ABEMA は今や 300 を超えるマイクロサービスで構成されており、非常に多くのクラスタを管理しています。また、テレビのイノベーションをコンセプトに、いつでもどこでも繋がる社会インフラを目指しており、これまで以上に堅牢なインフラ設計と高可用性が求められています。

そのためには複数の Kubernetes エンジン、リージョンに跨るアプリケーションの冗長構成を取る必要があり、今後もマルチクラスタを目指した運用体制はより加速していくと考えられます。

本ブログでも紹介した通り、現在の仕組みではマルチクラスタの管理に関して多くの課題が残ります。このような課題の解消に向けて、今回紹介した SIG Multicluster の仕組みは非常に興味深いものでした。まだまだビジョンの面が多い内容ではありますが、個人的にも今後の動きが非常に気になるところです。

KubeCon + CloudNativeCon Japan 2025 特集 Blog

  1. KubeCon + CloudNativeCon Japan 2025 現地参加を最大限に活かす!現役エンジニアが注目するポイントと歩き方
  2. KubeCon + CloudNativeCon Japan 2025 1 日目参加速報
  3. KubeCon + CloudNativeCon Japan 2025 2 日目参加速報
  4. 生成 AI マーケットの不確実性に立ち向かうためのクラウドネイティブ技術
  5. 若手だけじゃない!ベテラン層だって活躍したい
  6. Cloud Native とサイバーエージェントのこれまでとこれから
  7. 2 node で HA 構成を実現する Extended Raft Algorithm 〜入社 2 年目 AJA 所属〜
  8. Kubernetes SIG Node に Deep Dive する 〜入社 1 年目 CIU 所属〜
  9. Kubernets を活用したインフラ基盤運用の安定化について 〜入社 2 年目 CIU 所属編〜
  10. テナント志向で考える、マルチクラスタ・マルチクラウド運用 〜入社 1 年目 ABEMA 所属〜
  11. Argo CD x Cluster Inventory で実現するマルチクラスタ運用の新境地 〜入社 2 年目 ABEMA 所属〜 (👈 この記事)