Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Crossplaneで築くプラットフォームエンジニアリング 基盤を支えるリソース抽象化のアプローチ

 Crossplaneで築くプラットフォームエンジニアリング 基盤を支えるリソース抽象化のアプローチ

YAPC::Fukuoka 2025
有働開

Avatar for hacomono Inc.

hacomono Inc. PRO

November 13, 2025

More Decks by hacomono Inc.

Other Decks in Technology

Transcript

  1. 2 目次 1. 自己紹介 2. Crossplane概要 3. Crossplaneで築くプラットフォームエンジニアリング a. プラットフォームエンジニアリング概要

    b. Kubernetes概要 c. Crossplaneによるプラットフォームエンジニアリング 4. Crossplaneの利用手順とその裏側 5. Crossplane 利用の懸念点 6. hacomonoでの事例 7. まとめ
  2. 4 自己紹介 有働 開(Kai Udo) • 社歴 ◦ 2020/4 ~

    2024/6 某製造業 ◦ 2024/7 ~ 株式会社hacomono プラットフォーム部所属 • X, GitHub: u-kai • YPAC初参加です! よろしくお願いいたします!
  3. 14 Kubernetesとは • コンテナオーケストレーションツールとして広く利用されている OSS • CNCF の Graduated stage

    に属する成熟したプロジェクト • プラットフォームエンジニアリング基盤のスタンダード的な存在
  4. 15 Kubernetes がプラットフォームエンジニアリングを実現する基盤として適している理由 多種なリソースを一貫した抽象で管理可能 • コンテナスケジューリング/サービスディスカバリ/ネットワーキング/ストレージ管理/権 限分離/機密情報管理/設定情報管理 etc • 宣言的

    API とそれを実現する回復力 Kubernetes の抽象を利用して (ほぼ)全てのリソースを提供 /管理可能 拡張性が高い • Custom Resource Definition(CRD)による独自リソースを定義可能 • Mutating/Validating Admission Webhook によるリクエスト制御 拡張性の高さによるエコシステムの豊富さ などなど...
  5. 16 Kubernetes を使ってプラットフォームエンジニアリングを実現する際の考慮ポイント Kubernetes 自体の運用負荷 • 専門チームが頑張るしかない!? イケてる仕組みでも開発者の負荷が高いと意味がない ... 開発者にmanifest

    を書いてもらう場合... • 開発者に生じる manifest の認知負荷 • ガバナンス担保が難しい • 基盤変更の適用が難しい 他のマネージドサービスと連携する場合... • Kubernetesとの連携が必要 • マネージドサービスの設定/管理が大変 などなど...
  6. 17 Kubernetes を使ってプラットフォームエンジニアリングを実現する際の考慮ポイント • Kubernetes 自体の運用負荷 ◦ 専門チームが頑張るしかない!? • manifest

    を開発者に書いてもらう場合... ◦ 開発者に生じる manifest の認知負荷 ◦ ガバナンス担保が難しい ◦ 基盤変更の適用が難しい • 他のマネージドサービスと連携する場合... ◦ Kubernetesとの連携が難しい ◦ マネージドサービスの設定/管理が大変 イケてる仕組みでも開発者の負荷が高いと意味がない... Crossplane による解決!
  7. 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)
  8. 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)のスキーマを指定
  9. 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: ...
  10. 33 Crossplane の懸念点 • 実装の裏側が複雑で学習コストが高い • Kubernetes が前提かつ、Kubernetes の知識が必要 •

    Crossplane コンポーネントの運用管理が必要 • 他の IaC ツールと比べてエコシステムが発展途上 • 一度導入すると抜け出しづらい
  11. 35 Kubernetes が前提かつ、 Kubernetes の知識が必要 Crossplane は Kubernetes 上で動作し、Kubernetes の拡張を行う

    • Kubernetes Clusterの構築/運用が必要 • Crossplaneに加えてKubernetesの知識も必要 ◦ CRD,Controller,Reconciliation Loop etc… Terraform などのIaC ツールは CLIベースによる実行がメイン • 実行環境構築/運用の手間が小さい • IaCツールの知識がメイン 組織全体が他のツールに成熟している場合やKubernetesを利用しない場合 オーバースペックかも...
  12. 37 他の IaC ツールと比べてエコシステムが発展途上 • Terraformのplanのような機能がない • Testツールがない ◦ 商用版には存在する模様(今後OSS版に追加されるかも!?※)

    • XRの構成リソースをレンダリングする機能はあるが... ◦ 現在の構成との差分がわからない ◦ それが正しいか、稼働するかどうかはわからない 運用管理には独自ツールの作成やマインドチェンジが必要 ※: https://github.com/crossplane/crossplane/issues/6810
  13. 42 マルチプロダクト基盤に求められる要件と技術選定 1. 多くの機能をSelf-Service 化して開発者/運用者の負担軽減 2. プロダクト数に比例しない運用負荷 3. 少人数チームによる基盤構築/運用 4.

    適切な AWS サービス利用 5. 環境毎/プロダクト毎の分離 6. ガバナンスの担保 プラットフォームエンジニアリング ✖ Kubernetes ✖ Crossplaneを選択
  14. 45 抽象の裏側でガバナンスを担保 開発者が触る「数行の抽象(XR)」 の裏側では… • コスト・セキュリティ・冗長性などのベストプラクティスや 組織固有のポリシーなどをComposition内で定義 • タグ付け・命名の自動適用によるプロダクト/環境毎の分離 ◦

    条件付きポリシーの強制適用でプロダクト分離を達成 ◦ プロダクト名や環境名をリソース名に自動付与しバッティングを阻止 プロダクト 開発者は余計なことを考えずに安心して 開発可能
  15. 46 GitOps を組み合わせた Self-Service 化 Crossplane✖GitOps • manifest を記述して merge/revert

    するだけで あらゆるリソースが適用 • Git リポジトリを見れば全リソースの適用状況や変更履歴が把握可能 • 開発者には Git リポジトリへの書き込み権限のみを付与すれば OK 開発者体験 /セキュリティ /監査などが最高 !!
  16. 47 AI を活用した XR 開発支援 AIが参照するファイルに指示を与え、自然言語で manifestを生成可能に • XRD の

    ディレクトリパスを指示 • XRD のプロパティ毎に description を整備 • バリデーションツールを用意し、AI に実行するように指示 manifest記述の負担を大幅に軽減 できる(はず) S3を操作できる コンテナがほしい
  17. 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によるコンテキストや決定の保存
  18. 50 独自ツールの作成 Crossplane CLI を利用して独自ツールを作成 • Makefile を使ってXR のレンダリングとバリデーションを実施 ◦

    XRD/Composition 開発時に高速にフィードバックを得られる ◦ AI の曖昧さを補完するのにも有効 • XR レンダリングの diff を確認するツールを作成 ◦ terraform plan のように manifest の差分を確認できる ◦ XR の変更やリファクタリング時に適切にレビュー可能 高速かつ正確に XRD/Composition を開発・運用可能に
  19. 51 AI による XRD/Composition 自動生成 AI によってそこそこの精度で XRD/Composition が生成可能 →

    複雑なXRD/Compositionを楽に開発できる Tips • 最新のドキュメントや GitHub リポジトリの URL を参照させる • 独自ツールと組み合わせて簡単な誤りを検出させる • 仕組みの理解無しに AI を利用するとハマる可能性アリ • CrossplaneやFunctionの仕組みを理解して利用するのがおすすめ
  20. 52 今後の展望 • Crossplane 適用範囲の拡大 ◦ GitHub リポジトリ ◦ Monitoring

    設定 ◦ ニーズの多いリソースの抽象化 • 抽象化 アプローチの改善 ◦ 開発者からのフィードバックを元に抽象を改善 ◦ 同じ抽象で local 開発環境やマルチクラウド対応も検討 • マルチプロダクト基盤の効果測定 ◦ 開発者体験/開発速度 ◦ 運用体験/工数 • Kubernetesクラスターの最適化検討
  21. 54 まとめ • CrossplaneはKubernetesの抽象からあらゆるリソースを管理できる ようになるOSSのツール • Crossplaneを利用することで、Kubernetesを利用した プラットフォームエンジニアリングをさらに推進できる ようになる •

    Crossplaneは強力な抽象化を実現するために複雑な仕組みが裏で動いている • Crossplaneは強力な分、考慮するべきポイント もある • hacomonoでは、マルチプロダクト展開に向けて Crossplaneを用いた基盤を構築し、開発者への価値提供と運用を進行中
  22. 57 Crossplaneの今後の展望 • 今年の8月からv2がGA,11月6日からCNCF Graduated stageへ🎉 ◦ v2からNamespace ScopeなXRも定義可能に •

    Upbound版で提供しているツールがOSS版に移植されるかも ◦ コントリビュートしていきます!
  23. 60 kroの責務や挙動について • kroはResourceGraphDefinitionというカスタムリソースを提供 • RGDにカスタムリソースの定義+作成されるリソース+どのように作成す るかを記述 • kroの責務はRGDに沿ってCRDを適用し、カスタムリソースのコントロー ラーを作成すること

    • カスタムリソースのコントローラーはRGDに沿ってmanifestを展開して Apply • 「ApplyされたmanifestがK8sで利用可能かどうか」は別の手段 (CrossplaneではProvider)で担保する必要がある • Crossplaneは手段(Provider)の管理も責務の一つ