Share
Embed
Crossplaneで築くプラットフォームエンジニアリング 基盤を支えるリソース抽象化のアプローチ
YAPC::Fukuoka 2025
有働開
hacomono Inc. PRO
November 13, 2025
Transcript
60 slides
-
2 目次 1. 自己紹介 2. Crossplane概要 3. Crossplaneで築くプラットフォームエンジニアリング a. プラットフォームエンジニアリング概要
b. Kubernetes概要 c. Crossplaneによるプラットフォームエンジニアリング 4. Crossplaneの利用手順とその裏側 5. Crossplane 利用の懸念点 6. hacomonoでの事例 7. まとめ -
4 自己紹介 有働 開(Kai Udo) • 社歴 ◦ 2020/4 ~
2024/6 某製造業 ◦ 2024/7 ~ 株式会社hacomono プラットフォーム部所属 • X, GitHub: u-kai • YPAC初参加です! よろしくお願いいたします! -
6 Crossplane概要 • CNCFのプロジェクトで先週Graduated Stageに🎉 • Upbound社が提供している商用版も(本日はOSS版の話) • 名前の通り横断的(Cross)なControl planeが実現可能
出典: https://www.crossplane.io/ -
10 昨今のソフトウェア開発について CloudNative ManagedService Containerization Microservices IaC CI/CD Observability 高速かつ柔軟にプロダクトを開発
/提供できるようになった!!!! (うまく扱えれば ) MultiCloud -
11 昨今の開発環境における課題 • プロダクトに関係のない複雑性や認知負荷の増大 • セキュリティリスクやコスト増大の可能性 • プロダクト数に比例した運用負荷 • 人材確保
• etc… プラットフォームエンジニアリングによる解決 -
14 Kubernetesとは • コンテナオーケストレーションツールとして広く利用されている OSS • CNCF の Graduated stage
に属する成熟したプロジェクト • プラットフォームエンジニアリング基盤のスタンダード的な存在 -
15 Kubernetes がプラットフォームエンジニアリングを実現する基盤として適している理由 多種なリソースを一貫した抽象で管理可能 • コンテナスケジューリング/サービスディスカバリ/ネットワーキング/ストレージ管理/権 限分離/機密情報管理/設定情報管理 etc • 宣言的
API とそれを実現する回復力 Kubernetes の抽象を利用して (ほぼ)全てのリソースを提供 /管理可能 拡張性が高い • Custom Resource Definition(CRD)による独自リソースを定義可能 • Mutating/Validating Admission Webhook によるリクエスト制御 拡張性の高さによるエコシステムの豊富さ などなど... -
16 Kubernetes を使ってプラットフォームエンジニアリングを実現する際の考慮ポイント Kubernetes 自体の運用負荷 • 専門チームが頑張るしかない!? イケてる仕組みでも開発者の負荷が高いと意味がない ... 開発者にmanifest
を書いてもらう場合... • 開発者に生じる manifest の認知負荷 • ガバナンス担保が難しい • 基盤変更の適用が難しい 他のマネージドサービスと連携する場合... • Kubernetesとの連携が必要 • マネージドサービスの設定/管理が大変 などなど... -
17 Kubernetes を使ってプラットフォームエンジニアリングを実現する際の考慮ポイント • Kubernetes 自体の運用負荷 ◦ 専門チームが頑張るしかない!? • manifest
を開発者に書いてもらう場合... ◦ 開発者に生じる manifest の認知負荷 ◦ ガバナンス担保が難しい ◦ 基盤変更の適用が難しい • 他のマネージドサービスと連携する場合... ◦ Kubernetesとの連携が難しい ◦ マネージドサービスの設定/管理が大変 イケてる仕組みでも開発者の負荷が高いと意味がない... Crossplane による解決! -
21 Crossplane によるプラットフォームエンジニアリングの実現 ロジックの実装なしに独自プラットフォームを構築可能 • Crossplaneのインストール/設定でSelf-Service基盤を実現 • 本来であれば多くの独自ロジックを開発/運用するなどが必要 Crossplane によって
プラットフォームエンジニアリングがさらに加速 Kubernetesの抽象であらゆるリソースを一括管理可能 複雑な構成を独自の抽象 (manifest)で提供可能 -
23 Crossplaneの主要コンポーネント その他:Crossplane RBAC,CompositionRevision,FunctionRevision,DeploymentRuntimeConfig etc… XRの構成リソース生成の定義 Functionを呼び出すような設定 が可能 Composition 外部リソース用のCRDをインストール
外部リソースを管理 AWS/GCP/Azureなど複数存在 Provider 複数コントローラーを稼働 CrossplaneのCRDインストール などなど... Crossplane Core XRの構成リソース等を Coreに responseするgRPCサーバー 複数種類あり Function XRのスキーマ定義 Composite Resource Definition (XRD) -
28 XRD の定義 apiVersion: apiextensions.crossplane.io/v2 kind: CompositeResourceDefinition metadata: name: accessibledeployments.platform.example.org
spec: group: platform.example.org names: kind: AccessibleDeployment plural: accessibledeployments scope: Namespaced versions: - name: v1alpha1 schema: openAPIV3Schema: # OpenAPI形式による定義 type: object properties: spec: type: object … XRDを定義してComposite Resource(XR)のスキーマを指定 -
30 Composition の定義と適用 Composition を定義して XR がどのように構築されるのかを指定 - step: deployment-go-templating
functionRef: name: function-go-templating input: # Function固有のinputを定義 apiVersion: gotemplating.fn.crossplane.io/v1beta1 kind: GoTemplate source: Inline inline: template: | apiVersion: v1 kind: ServiceAccount metadata: name: {{ $serviceAccountName }} namespace: {{ $namespace }} --- apiVersion: apps/v1 kind: Deployment metadata: name: {{ $appName }} ... apiVersion: apiextensions.crossplane.io/v1 kind: Composition metadata: name: accessibledeployment.platform.example.com spec: compositeTypeRef: apiVersion: platform.example.com/v1alpha1 kind: AccessibleDeployment mode: Pipeline pipeline: ... -
33 Crossplane の懸念点 • 実装の裏側が複雑で学習コストが高い • Kubernetes が前提かつ、Kubernetes の知識が必要 •
Crossplane コンポーネントの運用管理が必要 • 他の IaC ツールと比べてエコシステムが発展途上 • 一度導入すると抜け出しづらい -
35 Kubernetes が前提かつ、 Kubernetes の知識が必要 Crossplane は Kubernetes 上で動作し、Kubernetes の拡張を行う
• Kubernetes Clusterの構築/運用が必要 • Crossplaneに加えてKubernetesの知識も必要 ◦ CRD,Controller,Reconciliation Loop etc… Terraform などのIaC ツールは CLIベースによる実行がメイン • 実行環境構築/運用の手間が小さい • IaCツールの知識がメイン 組織全体が他のツールに成熟している場合やKubernetesを利用しない場合 オーバースペックかも... -
36 Crossplane コンポーネントの運用管理が必要 他IaC ツールはCLIベースのoneshot実行なので楽。。。 複数コンポーネントの運用管理が必要 適切な権限 設定 API RateLimitの考慮
インフラコストの発生 💸 インフラモニタリング バージョン管理 インフラ起因のエラー -
37 他の IaC ツールと比べてエコシステムが発展途上 • Terraformのplanのような機能がない • Testツールがない ◦ 商用版には存在する模様(今後OSS版に追加されるかも!?※)
• XRの構成リソースをレンダリングする機能はあるが... ◦ 現在の構成との差分がわからない ◦ それが正しいか、稼働するかどうかはわからない 運用管理には独自ツールの作成やマインドチェンジが必要 ※: https://github.com/crossplane/crossplane/issues/6810 -
42 マルチプロダクト基盤に求められる要件と技術選定 1. 多くの機能をSelf-Service 化して開発者/運用者の負担軽減 2. プロダクト数に比例しない運用負荷 3. 少人数チームによる基盤構築/運用 4.
適切な AWS サービス利用 5. 環境毎/プロダクト毎の分離 6. ガバナンスの担保 プラットフォームエンジニアリング ✖ Kubernetes ✖ Crossplaneを選択 -
45 抽象の裏側でガバナンスを担保 開発者が触る「数行の抽象(XR)」 の裏側では… • コスト・セキュリティ・冗長性などのベストプラクティスや 組織固有のポリシーなどをComposition内で定義 • タグ付け・命名の自動適用によるプロダクト/環境毎の分離 ◦
条件付きポリシーの強制適用でプロダクト分離を達成 ◦ プロダクト名や環境名をリソース名に自動付与しバッティングを阻止 プロダクト 開発者は余計なことを考えずに安心して 開発可能 -
46 GitOps を組み合わせた Self-Service 化 Crossplane✖GitOps • manifest を記述して merge/revert
するだけで あらゆるリソースが適用 • Git リポジトリを見れば全リソースの適用状況や変更履歴が把握可能 • 開発者には Git リポジトリへの書き込み権限のみを付与すれば OK 開発者体験 /セキュリティ /監査などが最高 !! -
47 AI を活用した XR 開発支援 AIが参照するファイルに指示を与え、自然言語で manifestを生成可能に • XRD の
ディレクトリパスを指示 • XRD のプロパティ毎に description を整備 • バリデーションツールを用意し、AI に実行するように指示 manifest記述の負担を大幅に軽減 できる(はず) S3を操作できる コンテナがほしい -
48 運用の工夫について 対策を実施し、一部懸念を払拭 学習コストの高さ Kubernetes前提 発展途上な エコシステム コンポーネントの運 用管理 抜け出しづらさ
Crossplaneの 理解/ナレッジ共有 ✅ ✅ 独自ツールの作成 ✅ AIを使った XRD/Composition の自動生成 ✅ -
49 Crossplane/Kubernetes の理解とナレッジ共有 運用にはチーム内で共通認識を持つことが必須 • Crossplane のドキュメント/コードリーディングによる理解 ◦ https://docs.crossplane.io/latest/whats-crossplane/ ◦
internal/controller/apiextensions/definition/reconciler.go ◦ internal/controller/apiextensions/composite/reconciler.go ◦ internal/controller/apiextensions/composite/composition_functions.go • Kubernetes の Controller,CRD,Reconcilation Loop などの基礎理解 • チームで運用できるようにナレッジや決定を共有 ◦ 勉強会 ◦ ADRによるコンテキストや決定の保存 -
50 独自ツールの作成 Crossplane CLI を利用して独自ツールを作成 • Makefile を使ってXR のレンダリングとバリデーションを実施 ◦
XRD/Composition 開発時に高速にフィードバックを得られる ◦ AI の曖昧さを補完するのにも有効 • XR レンダリングの diff を確認するツールを作成 ◦ terraform plan のように manifest の差分を確認できる ◦ XR の変更やリファクタリング時に適切にレビュー可能 高速かつ正確に XRD/Composition を開発・運用可能に -
51 AI による XRD/Composition 自動生成 AI によってそこそこの精度で XRD/Composition が生成可能 →
複雑なXRD/Compositionを楽に開発できる Tips • 最新のドキュメントや GitHub リポジトリの URL を参照させる • 独自ツールと組み合わせて簡単な誤りを検出させる • 仕組みの理解無しに AI を利用するとハマる可能性アリ • CrossplaneやFunctionの仕組みを理解して利用するのがおすすめ -
52 今後の展望 • Crossplane 適用範囲の拡大 ◦ GitHub リポジトリ ◦ Monitoring
設定 ◦ ニーズの多いリソースの抽象化 • 抽象化 アプローチの改善 ◦ 開発者からのフィードバックを元に抽象を改善 ◦ 同じ抽象で local 開発環境やマルチクラウド対応も検討 • マルチプロダクト基盤の効果測定 ◦ 開発者体験/開発速度 ◦ 運用体験/工数 • Kubernetesクラスターの最適化検討 -
54 まとめ • CrossplaneはKubernetesの抽象からあらゆるリソースを管理できる ようになるOSSのツール • Crossplaneを利用することで、Kubernetesを利用した プラットフォームエンジニアリングをさらに推進できる ようになる •
Crossplaneは強力な抽象化を実現するために複雑な仕組みが裏で動いている • Crossplaneは強力な分、考慮するべきポイント もある • hacomonoでは、マルチプロダクト展開に向けて Crossplaneを用いた基盤を構築し、開発者への価値提供と運用を進行中 -
57 Crossplaneの今後の展望 • 今年の8月からv2がGA,11月6日からCNCF Graduated stageへ🎉 ◦ v2からNamespace ScopeなXRも定義可能に •
Upbound版で提供しているツールがOSS版に移植されるかも ◦ コントリビュートしていきます! -
60 kroの責務や挙動について • kroはResourceGraphDefinitionというカスタムリソースを提供 • RGDにカスタムリソースの定義+作成されるリソース+どのように作成す るかを記述 • kroの責務はRGDに沿ってCRDを適用し、カスタムリソースのコントロー ラーを作成すること
• カスタムリソースのコントローラーはRGDに沿ってmanifestを展開して Apply • 「ApplyされたmanifestがK8sで利用可能かどうか」は別の手段 (CrossplaneではProvider)で担保する必要がある • Crossplaneは手段(Provider)の管理も責務の一つ