660 Views
October 13, 25
スライド概要
「どのクラスタに、どのように届けるか」をシンプルにしたい——その答えの一つが Cluster Inventory API です。
この API は、アプリやツールが クラスタを発見し、選び、届ける ための標準化の仕組みを目指しています。
本セッションでは、ClusterProfile API を中心に、以下を入門者向けに解説します。
• 背景と課題整理:なぜクラスタ一覧の標準化が必要なのか
• Cluster Inventory API と ClusterProfile の基本概念
• 現状の成熟度と、導入の第一歩としての手順
このセッションを通じて、参加者は Cluster Inventory API の役割やユースケース、始め方 を理解し、クラスタ運用に活かせるようになります。
🏆 #19 CNCF Contributor JP (Last Year) | 👨💻 Tech Lead @craftsmansw | ⚙️ Member: Knative & K8s SIGs | 💙 Kubernetes, TypeScript, OSS | 🚀 Sveltos Ambassador
入門 Cluster Inventory API ~ クラスタを「見つける・選ぶ・届ける」を標準化する ~ CloudNative Days Winter 2025 プレイベント Kahiro Okina, Craftsman Software, Inc.
I’m kahirokunn 所属 Craftsman Software, Inc. - Technical Lead Project Sveltos - Partner 開発プロダクト AppThrust - Customizable PaaS AppThrust Runners - Self Hosted GitHub Actions Runner オープンソース活動 CNCF / Kubernetes Continuous contribution to the ecosystem Knative Member Kubernetes SIGs Member CNCF DevStats Developer Activity Counts (Japan) 🎉 Ranked 17th in the last year Sveltos Community Ambassador kahirokunn kahirokunn kahirokunn
本日のゴール ツール毎に形式がばらつく「クラスタの表現とアクセス方法」を、 "共通の形" で揃えるイメージをつかむ。 また、それを利用した発展的な仕様が存在する事を認知する。
アジェンダ 1 なぜ標準の「クラスタの表現とアクセス方法」の仕様が必要? 2 Cluster Inventory API / ClusterProfile とは? 3 クラスタへの「アクセス」方法 4 各エコシステムでの採用状況 5 Cluster Inventory APIと関係ある概念・仕様 6 まとめ
アジェンダ 1 なぜ標準の「クラスタの表現とアクセス方法」の仕様が必要? 2 Cluster Inventory API / ClusterProfile とは? 3 クラスタへの「アクセス」方法 4 各エコシステムでの採用状況 5 Cluster Inventory APIと関係ある概念・仕様 6 まとめ
なぜ標準の「クラスタ表現・アクセス方法」の仕様が必要? 1 ツールごとにクラスタの表現方法・アクセス方法が異なる 2 クラスタ・ツールが増えるほど、クラスタ運用者の管理業務が肥大化 3 ツール開発者も都度それらを考えるのが大変
ツール毎の違い Argo CD Secretでクラスタが表現されている クラスタの表現 + クラスタアクセス に必要な情報 ProjectSveltos SveltosCluster + Secretでクラスタが表現されている クラスタの表現 クラスタアクセスに 必要な情報
ツール毎の違い ProjectSveltos SveltosCluster + Secretでクラスタが表現されている Argo CD Secretでクラスタが表現されている クラスタの表現 + クラスタアクセス に必要な情報 クラスタの表現とアクセス方法に こんなに差が・・・! クラスタの表現 クラスタアクセスに 必要な情報
なぜ標準の「クラスタ表現・アクセス方法」の仕様が必要? 共通のクラスタ表現・アクセス方法等標準とその実装があると、 どのツールでも同じ要領で扱えるし、ツール開発者も楽になる! ツール同士のかみ合わせも良くなり、様々なツールが連携できる様になる ので皆んな嬉しい!
なぜ標準の「クラスタ表現・アクセス方法」の仕様が必要? 共通のクラスタ表現・アクセス方法等標準とその実装があると、 どのツールでも同じ要領で扱えるし、ツール開発者も楽になる! ツール同士のかみ合わせも良くなり、様々なツールが連携できる様になる ので皆んな嬉しい! 「クラスタ表現・アクセス方法」の標準化を 叶えたのが Cluster Inventory APIです!
アジェンダ 1 なぜ標準の「クラスタの表現とアクセス方法」の仕様が必要? 2 Cluster Inventory API / ClusterProfile とは? 3 クラスタへの「アクセス」方法 4 各エコシステムでの採用状況 5 Cluster Inventory APIと関係ある概念・仕様 6 まとめ
Cluster Inventory APIとは? 複数のKubernetesクラスターを統一的に発見・管理するための標準API。 ClusterProfileの集合を管理し、マルチクラスター環境でのCluster Discoveryを 可能にする。 Cluster Inventory API ClusterProfile ClusterProfile ClusterProfile
Cluster Inventory APIとは? 複数のKubernetesクラスターを統一的に発見・管理するための標準API。 ClusterProfileの集合を管理し、マルチクラスター環境でのCluster Discoveryを 可能にする。 Cluster Inventory API ClusterProfile ClusterProfile ClusterProfile
ClusterProfileとは? 「クラスタ表現・アクセス方法」を標準化したのが ClusterProfile です。 クラスタの存在・属性・アクセス方法の共通の形をカスタムリソースで表現します。 クラスターの管理モデルの一例 画像引用元: https://github.com/kubernetes/enhancements/blob/master/keps/sig-multicluster/4322-cluster-inventory/README.md#clusterprofile-crd-scope
ClusterProfileとは? 以下は EKS クラスタへのアクセス情報を含む ClusterProfile の例です。 接続情報
ClusterProfileとは? 以下は EKS クラスタへのアクセス情報を含む ClusterProfile の例です。 あれ?ClusterProfileには認証情報が埋め込まれてない 接続情報 🤔
ClusterProfileとは? 以下は EKS クラスタへのアクセス情報を含む ClusterProfile の例です。 ClusterProfileを使って どうやってクラスタへアクセスするのか? 接続情報
アジェンダ 1 なぜ標準の「クラスタの表現とアクセス方法」の仕様が必要? 2 Cluster Inventory API / ClusterProfile とは? 3 クラスタへの「アクセス」方法 4 各エコシステムでの採用状況 5 Cluster Inventory APIと関係ある概念・仕様 6 まとめ
クラスタへの「アクセス」方法 EKS クラスタへのアクセス情報を含む ClusterProfile 使われるプロバイダがどのように動作するのかを定義 どのプロバイダを使うか?
クラスタへの「アクセス」方法 クラスターを操作できるトークンが含まれるリソースを標準出力するコマンドを pluginとして利用できます。 標準出力されるリソース
クラスタへの「アクセス」方法 AWS公式の手順に倣ってkubectlを使ってEKSへアクセスする場合、 裏側では次のコマンドが使われます。 aws eks get-token --cluster-name <cluster-name> --region <region> --output json 上記のコマンド実行結果も先ほど説明したクラスターを操作できるトークンが含まれるリソースを 標準出力します。
クラスタへの「アクセス」方法 AWS公式の手順に倣ってkubectlを使ってEKSへアクセスする場合、 裏側では次のコマンドが使われます。 aws eks get-token --cluster-name <cluster-name> --region <region> --output json 上記のコマンド実行結果も先ほど説明したクラスターを操作できるトークンが含まれるリソースを 標準出力します。 kubectlのexecプラグインを再利用しようとしています
アジェンダ 1 なぜ標準の「クラスタの表現とアクセス方法」の仕様が必要? 2 Cluster Inventory API / ClusterProfile とは? 3 クラスタへの「アクセス」方法 4 各エコシステムでの採用状況 5 Cluster Inventory APIと関係ある概念・仕様 6 まとめ
各エコシステムでの採用状況 1 Open Cluster Management 2 Argo CD 3 GKE Fleet 4 ProjectSveltos 5 MultiKueue
Open Cluster Management OCM は ManagedCluster というカスタムリソースを作成した時に、 対応する ClusterProfile を生成・管理します。 つまり、クラスタマネージャの役割をしています。 クラスタマネージャーについては後ほど説明します。
Argo CD 現時点で直接統合は未完の状態です。 Issueのやり取りでは以下の様にargocd-clusterに追加でcluster-inventory-apiを有効化する オプションを追加するのはどうか?と提案があります。 Add direct integration with ClusterProfile object #24282 しかし、PRを見る感じだと、 ApplicationSet の generator でPRが作成されています。 https://github.com/argoproj/argo-cd/pull/24509
GKE Fleet Fleet のメンバークラスタを ClusterProfile として表現します。 ArgoCDのClusterSecretへ変換するコントローラー、Argo CD ClusterProfile Syncerを オープンソースで提供しています。 https://github.com/GoogleCloudPlatform/gke-fleet-management/tree/main/argocd-clusterprofile-syncer 変換
ProjectSveltos ClusterProfileを元に、ProjectSvevltosのSveltosClusterとSecretを生成する コントローラーを現在開発中です。 https://github.com/projectsveltos/sveltos/issues/625 変換
MultiKueue 現時点で統合は未完の状態です。 Issueのやり取りでは以下の様にClusterProfileをMultiKueueClusterへ変換するコントローラーを 実装するProposal(WIP)が提案されています。 MultiKueue: support authentication to worker clusters using ClusterProfile #6714
ここまでのまとめ 当面は既存ツールをClusterProfileに適応させる為の「変換コントローラ」併用アプローチ が主流になりそうです。 各種便利なライブラリも用意されているので、今後新規作成されるマルチクラスター系の ツールは直接ClusterProfileを扱う物が出てきそうです。
アジェンダ 1 なぜ標準の「クラスタの表現とアクセス方法」の仕様が必要? 2 Cluster Inventory API / ClusterProfile とは? 3 クラスタへの「アクセス」方法 4 各エコシステムでの採用状況 5 Cluster Inventory APIと関係ある概念・仕様 6 まとめ
Cluster Inventory APIと関係ある概念・仕様 Placement Decision API (WIP) ClusterProfile API Consumer Cluster Profile API Cluster Manager Namespace Sameness Cluster Inventory ClusterSet About API(ClusterProperty) Multicluster Services API Gateway API
Cluster Inventory APIと関係ある概念・仕様 Placement Decision API (WIP) ClusterProfile API Consumer Cluster Profile API Cluster Manager Cluster Inventory APIと関連性が強い部分を選定し、 Namespace Sameness Cluster Inventory ClusterSet About API(ClusterProperty) 掻い摘んで末端から順に説明していきます! Multicluster Services API Gateway API
Cluster Inventory APIと関係ある概念・仕様 Placement Decision API (WIP) ClusterProfile API Consumer Cluster Profile API Cluster Manager Namespace Sameness Cluster Inventory ClusterSet About API(ClusterProperty) Multicluster Services API Gateway API
1.Namespace Sameness (概念) 1 特定の名前空間において、各クラスター間で権限と特性が一貫して維持されます。 2 Namspaceはすべてのクラスターに存在する必要はありませんが、存在 するクラスター間で一貫した動作をします。 https://multicluster.sigs.k8s.io/concepts/namespace-sameness/ 2.ClusterSet (概念) 1 単一の権限によって管理されるクラスターのグループ 2 ClusterSet内のクラスターはNamespace Samenessを準拠する必要があります https://multicluster.sigs.k8s.io/api-types/cluster-set/
2.ClusterSet (概念) 1 単一の権限によって管理されるクラスターのグループ 2 ClusterSet内のクラスターはNamespace Samenessを準拠する必要があります 3 clusterset-1に所属する全ClusterProfileは全て以下のNamespaceに配置されている 必要があります (KEP記述) https://multicluster.sigs.k8s.io/api-types/cluster-set/
Cluster Inventory APIと関係ある概念・仕様 Placement Decision API (WIP) ClusterProfile API Consumer Cluster Profile API Cluster Manager Namespace Sameness Cluster Inventory ClusterSet About API(ClusterProperty) Multicluster Services API Gateway API
3.Cluster Inventory (概念) クラスターの集合を指す概念的な用語です。 クラスターインベントリが CusterSet を構成するかどうかは任意です。 すべてのメンバークラスターが Namespace Sameness に準拠している場合に限り、 そのクラスターインベントリはClusterSetとみなされます。 https://multicluster.sigs.k8s.io/concepts/cluster-profile-api/
3.Cluster Inventory (概念) クラスターの集合を指す概念的な用語です。 クラスターインベントリが CusterSet を構成するかどうかは任意です。 すべてのメンバークラスターが Namespace Sameness に準拠している場合に限り、 超ざっくりに言うと そのクラスターインベントリはClusterSetとみなされます。 1Namespace == 1 Inventory or ClusterSetってこと! https://multicluster.sigs.k8s.io/concepts/cluster-profile-api/
Cluster Inventory APIと関係ある概念・仕様 Placement Decision API (WIP) ClusterProfile API Consumer Cluster Profile API Cluster Manager Namespace Sameness Cluster Inventory ClusterSet About API(ClusterProperty) Multicluster Services API Gateway API
4.Cluster Manager (概念) 各メンバークラスターごとに ClusterProfile API オブジェクトを作成し、 そのステータスを 最新の状態に保つ役割を担うエンティティです。各クラスターマネージャーは固有の名称で 識別されなければなりません。(なんだかfield managerみたいですね) 各 ClusterProfile リソースは原則として単一のクラスターマネージャーによって管理される 必要があります。クラスターマネージャーは 各メンバークラスタから必要な情報を取得し、 ClusterProfile APIリソースの状態を更新できるよう、十分なアクセス権限を有している必要 があります。 https://multicluster.sigs.k8s.io/concepts/cluster-profile-api/
4.Cluster Manager (概念) 各メンバークラスターごとに ClusterProfile API オブジェクトを作成し、 そのステータスを 最新の状態に保つ役割を担うエンティティです。各クラスターマネージャーは固有の名称で 識別されなければなりません。(なんだかfield managerみたいですね) 各 ClusterProfile リソースは原則として単一のクラスターマネージャーによって管理される 必要があります。クラスターマネージャーは 各メンバークラスタから必要な情報を取得し、 ClusterProfile APIリソースの状態を更新できるよう、十分なアクセス権限を有している必要 つまり、ClusterProfileを作成・管理する人 / システムのこと! があります。 https://multicluster.sigs.k8s.io/concepts/cluster-profile-api/
Cluster Inventory APIと関係ある概念・仕様 Placement Decision API (WIP) ClusterProfile API Consumer Cluster Profile API Cluster Manager Namespace Sameness Cluster Inventory ClusterSet About API(ClusterProperty) Multicluster Services API Gateway API
5.ClusterProfile API Consumer (概念) Cluster Managerを実行するユーザー、またはワークロード分散や運用管理などを目的として Cluster Manager向け拡張機能を開発する開発者(およびそれを実行するシステム)を指します。 https://multicluster.sigs.k8s.io/concepts/cluster-profile-api/
5.ClusterProfile API Consumer (概念) Cluster Managerを実行するユーザー、またはワークロード分散や運用管理などを目的として Cluster Manager向け拡張機能を開発する開発者(およびそれを実行するシステム)を指します。 つまり、ClusterProfileを使う人 / システムのこと! https://multicluster.sigs.k8s.io/concepts/cluster-profile-api/
ClusterProfile API Consumer のサンプルコード 1.起動時にコントローラーはprovider file指定。 SDKがparseする。 provider fileは以下の通り、json形式で書きます 2. ClusterProfileをBuildConfigFromCPに渡すと rest.Configが返ってくる 3. k8sClientを使って自由にK8s を操作できる
ClusterProfile API Consumer のサンプルコード 1.起動時にコントローラーはprovider fileを 指定。SDKがparseする。 このバイナリどうやって管理する? provider fileは以下の通り、json形式で書きます 🤔 KEPでは認証プラグインの配布・管理等 についてはまだ言及してない 😞 2. ClusterProfileをBuildConfigFromCPに渡すと rest.Configが返ってくる provider fileどうやって管理する? 🤔 3. k8sClientを使って自由にK8s を操作できる
ClusterProfile API Consumerを 起動するサンプルYAML 1.認証プラグインをImage Volumeで指定 2.provider fileをConfigMapで管理 参照 ①認証プラグイン ②Provider file コントローラーの定義
ClusterProfile API Consumerを 起動するサンプルYAML コントローラーの定義 1.認証プラグインをImage Volumeで指定 2.provider fileをConfigMapで管理 こうやって管理する方法もある! 参照 ①認証プラグイン ②Provider file
余談 multicluster-runtime は今年から開発が開始された、Kubernetesクラスターの 動的なフリート全体に渡ってレプリケーションを実行するKubernetesコントローラー を記述するためのGoライブラリです。
余談 multicluster-runtime は今年から開発が開始された、Kubernetesクラスターの 動的なフリート全体に渡ってレプリケーションを実行するKubernetesコントローラー を記述するためのGoライブラリです。 マルチクラスター関連のコミュニティの 勢いを感じます 🔥
Cluster Inventory APIと関係ある概念・仕様 Placement Decision API (WIP) ClusterProfile API Consumer Cluster Profile API Cluster Manager Namespace Sameness Cluster Inventory ClusterSet About API(ClusterProperty) Multicluster Services API Gateway API
6.About API About APIを使用すると、applyされたクラス ターはそれをメタデータとして扱います。 ClusterProperty CRD は、クラスタを識別す るための機能として提案されていますが、実 際にはクラスタに関するあらゆるメタデータ を保存するために使用できます。 以下の2つのWell-Known Propertyが提案 されています。 1. cluster.clusterset.k8s.io クラスターの 一意のIDまたは名称 2. clusterset.k8s.io クラスターが所属する クラスターセット https://multicluster.sigs.k8s.io/concepts/about-api/
Cluster Inventory APIと関係ある概念・仕様 Placement Decision API (WIP) ClusterProfile API Consumer Cluster Profile API Cluster Manager Namespace Sameness Cluster Inventory ClusterSet About API(ClusterProperty) Multicluster Services API Gateway API
7.Multicluster Service API MCS APIは、ClusterProfile APIとは直接は関係ないのですが、About APIと関係があり、お隣さんなので、 少し紹介します。MCS APIはざっくり説明すると、ClusterSet全体に対してサービスを公開できるAPIです。 公開する際に、先程のAbout APIで定義されているCluster Propertyが活用されます。 mcs controller 参照 作成 参照 パケット http://rebel-base.default.svc.clusterset.local 公開するという宣言
Cluster Inventory APIと関係ある概念・仕様 Placement Decision API (WIP) ClusterProfile API Consumer Cluster Profile API Cluster Manager Namespace Sameness Cluster Inventory ClusterSet About API(ClusterProperty) Multicluster Services API Gateway API
8.ClusterProfileをもう1度見る ここまでの内容を聞いた上で、ClusterProfileをもう1度見てみると、 より解像度高く見える物があるかもしれません。
Cluster Inventory APIと関係ある概念・仕様 Placement Decision API (WIP) ClusterProfile API Consumer Cluster Profile API Cluster Manager Namespace Sameness Cluster Inventory ClusterSet About API(ClusterProperty) Multicluster Services API Gateway API
9.Placement Decision API (WIP) どのクラスタ群へ配置するかの結果をCRDで表明し、 他ツール(例:Argo CD ApplicationSet)へ読み取って頂くアイディアです
9.Placement Decision API (WIP) どのクラスタ群へ配置するかの結果をCRDで表明し、他ツール(例:Argo CD ApplicationSet)へ読み取って頂くアイディアです この様に、ClusterProfile APIと連携する 発展仕様の策定も進んでいます 🎉
アジェンダ 1 なぜ標準の「クラスタの表現とアクセス方法」の仕様が必要? 2 Cluster Inventory API / ClusterProfile とは? 3 クラスタへの「アクセス」方法 4 各エコシステムでの採用状況 5 Cluster Inventory APIと関係ある概念・仕様 6 まとめ
まとめ 1.現在各種エコシステムのClusterProfile等へのネイティブ統合には 少し時間が必要そうです。 2.Cluster Inventory APIのライブラリを使うことで、ClusterProfile APIを 活用したマルチクラスターコントローラーは既に開発開始できる状況です。 3.現状すぐ取れる第一歩としては、Cluster Inventory APIのライブラリを使った マルチクラスターコントローラーの開発に参加していくのが良いかと思われます。
まとめ 1.現在各種エコシステムのClusterProfile等へのネイティブ統合には 少し時間が必要そうです。 これで皆さんも今日からCluster Inventory APIマスターです! 2.Cluster Inventory APIのライブラリを使うことで、ClusterProfile APIを 活用したマルチクラスターコントローラーは既に開発開始できる状況です。 3.現状すぐ取れる第一歩としては、Cluster Inventory APIのライブラリを使った マルチクラスターコントローラーの開発に参加していくのが良いかと思われます。
本日のゴール ツール毎に形式がばらつく「クラスタの表現とアクセス方法」を、 "共通の形" で揃えるイメージをつかむ。 また、それを利用した発展的な仕様が存在する事を認知する。
Q & Aコーナー
We are hiring! https://craftsman-software.com/recruit
Thank you