マルチクラウドを制御するユニバーサルなコントロールプレーンCrossplane

2021年4月27日(火)
松下 康之 - Yasuyuki Matsushita
ユニバーサルコントロールプレーンCrossplaneの概要を、コミュニティデイのセッションから紹介する。

今回は、CNCFのサンドボックスプロジェクトとして2020年7月にホストされたCrossplaneを紹介する。CrossplaneはUpboundが2018年に公開したオープンソースソフトウェアだ。UpboundはCrossplane以外にも、Kubernetes向けのストレージオーケストレーターRookの開発も行っており、こちらもCNCFにホストされている。

UpboundのCEOであるBassam Tabbara氏が2018年12月4日に公開したブログでは、Crossplaneが、アプリケーションが必要とするコンポーネントを宣言的に記述する例(ここではWordPressとMySQL)を挙げて、アプリケーションデベロッパーはデータベースが実装されるインフラストラクチャーを意識せずに運用できることを紹介した。ここではアプリケーションデベロッパーにとって必要な記述だけを行い、それ以降の実装内容はアプリケーションオペレーター、インフラオペレーターに任せるという発想である。この発想はMicrosoftが強力にプッシュするOpen Application Model(以下OAM)に沿った考え方で、実際にCrossplaneはOAMの実装例としても挙げられている。

Crossplaneを紹介するブログ記事:Introducing Crossplane: Open Source Multicloud Control Plane

このブログでは、Crossplaneの詳細は解説されず「こんな形でアプリケーションとインフラストラクチャーを分離できる」という部分だけが語られている。2020年12月に開催されたCrossplane community dayでは、UpboundやGoogle、MicrosoftなどのエンジニアがCrossplaneやパブリッククラウドとの連携に関するセッションを行って解説を行った。今回はこのバーチャルイベントのセッションを素材にCrossplaneの詳細を紹介する。

Crossplane Community Day

UpboundのCEO、Tabbara氏のキーノートは「Modernizing with Control Planes」と題されたもので、Kubernetesのコントロールプレーンを進化させる役割をCrossplaneが担っているという意識を感じることができる。

CEOのキーノート:Modernize with API driven Control Planes featuring Bassam Tabbara, Upbound

自宅からセッションを行うTabbara氏

自宅からセッションを行うTabbara氏

Tabbara氏によれば、ITの進化は「いかにデベロッパーの生産性を上げることができるか?」に掛かっているという。そのためセルフサービス化、マルチベンダー、移行性の高さなどが必要であり、結果としてオープンソースソフトウェアによるクラウドネイティブなシステムに向かっているとして、その背景を解説した。

ITの進化に必要なのはデベロッパーがより高い生産性を得ることから始まる

ITの進化に必要なのはデベロッパーがより高い生産性を得ることから始まる

しかし実際に起こっていることは、その理想にはほど遠いということをAWSを例に挙げて解説。ここではAPIを使ってパブリッククラウドの各種サービスが集中的にコントロールされていることが示されている。しかし、ユーザーが必要とするシステムは必ずしも一つのパブリッククラウドで終わることはなく、マルチクラウド、オンプレミスとも連携するハイブリッドクラウドに向かっており、複雑さは増していると語った。

クラウドのユートピアと現実はほど遠いと解説

クラウドのユートピアと現実はほど遠いと解説

そしてその問題を解決するためにはプラットフォームに特化したエンジニアが必要だというのが次のスライドだ。そのためにはスクリプトやInfrastructure as Code(IaC)、バグや障害を管理するチケッティングシステム、CI/CDパイプラインに加えて、Kubernetesが必要な要素として挙げられていることに注目したい。

プラットフォームの中核としてKubernetesが必要

プラットフォームの中核としてKubernetesが必要

そしてハイパースケールなクラウドをコントロールするためにはコントロールプレーンが必要であり、そのコントロールプレーンを通じて巨大なクラウドインフラストラクチャーも制御できるようになっていると解説した。

コントロールプレーンを通じて巨大なパブリッククラウドを制御

コントロールプレーンを通じて巨大なパブリッククラウドを制御

そのコントロールプレーンは、APIを通じてクラウドをコントロールしていることを解説したのが次のスライドだ。ここではAPIをクラウドにおける通貨にたとえて説明が行われた。

Crossplaneは複数のインフラストラクチャーをカバーするコントロールプレーン

Crossplaneは複数のインフラストラクチャーをカバーするコントロールプレーン

ここまででコントロールプレーンの必要性、APIを通じて利用できることの重要性を背景として解説し、Crossplaneが複数のパブリッククラウドからオンプレミスまでをカバーするコントロールプレーンであることを主張した。

ユニバーサルなAPIを提供し、構成から自動化、抽象化を実装するのがCrossplaneだ。

Crossplane登場

Crossplane登場

ではその実装は何を参考にしているのか? という問いに対する答えがKubernetesのモデルであることを解説したのが次のスライドとなる。

Kubernetesのスタイルを踏襲したCrossplane

Kubernetesのスタイルを踏襲したCrossplane

ここでは宣言的と言われるKubernetesのモデル、Kubernetes Resource Model(KRM)を解説した。ここで「Document Store」と称されているのはKubernetesのデータストアであるetcdだ。そしてAPI Serverが常に各ノードの状態を監視して「宣言された状態にPodを配備する」ことを繰り返す仕組みを備えていることを下敷きにして、コントロールプレーンを実装するためにCustom Resourceとそれを実行するコントローラーがKubernetesの核であることを解説した。

そして、そのスタイルをそのまま複数のクラウドに拡張したのがCrossplaneであるというのが次のスライドだ。ここではKubernetesのAPIと同じスタイルを使うことで、ユニバーサルなクラウドコントローラーの実装を目指しているということが語られた。

ユニバーサルなAPIを実装したCrossplane

ユニバーサルなAPIを実装したCrossplane

ここではKubernetesのKRMに対してXRM(Crossplane Resource Model)が提唱されているが、同じ頭文字「C」で始まることを避けるために「X(クロス)」を使っていることに注目したい。CrossplaneのドキュメントでもCrossplane Resource DefinitionがXRDと称されているのもこのためだろう。

ここからCrossplaneの宣言と実装がどのように行われるのかを解説するフェーズになった。重要なコンセプトは、CompositionとConsumption、そしてConfigurationだ。

Compositionの概念を解説

Compositionの概念を解説

次の図はCrossplaneのドキュメントサイトからの引用だが、MySQLを構成するためのワークフローが記述されている。これがわかりづらいのはApp Dev、App Ops、Infra Opsの3つの役割が登場していることや、処理の順番が明確ではないからだろうが、要約するとApp DevがMySQLのインスタンスに必要な要件を定義、それをApp Opsが読み取ってApp Configurationを書いてMySQLインスタンスを生成、Infra Opsがこの場合はAzure上のリソースを定義してアプリケーションとインフラストラクチャーを接続する、という流れになる。

参照:Crossplane Docs

ここでもアプリケーションとインフラストラクチャーを繋ぐために、デベロッパーとインフラオペレーターの間にApp Opsという役目を置いていることに注目したい。これはMicrosoftが2019年に行ったカンファレンスで紹介された考え方で、そのままOAMにも繋がる発想である。

インフラの実装とアプリケーションの要件を分離するというのは、Kubernetesのモデルで言えば、PV(Persistent Volume)とPVC(Persistent Volume Claim)の関係に似ていると言っても良いだろう。

参考:分散型アプリの開発と運用を分離するOAMとDapr、そしてKubernetes上の実装であるRudrとは?

スライドに戻って解説を続けると、XRDはKubernetesのCRDと同様に宣言と実装を分けるための仕組みで、XRDが宣言、それを実装するのがCompositionということになるだろう。そしてYAMLだけではなく、TypescriptやPythonなどもサポートの予定であるという。

ブループリントは再利用可能なインフラ構成用のコード

ブループリントは再利用可能なインフラ構成用のコード

XRDとCompositionがセットとなって再利用可能なリソースとして提供されるという発想は、Red Hatが推進するOperator Frameworkとも通じる発想だろう。Operator FrameworkがKubernetesの上での実装を考えているとすれば、Crossplaneは複数のインフラにまたがったKubernetes上のリソースを実装するための仕組みだ。

RegistryはOperator Hubのようなものか

RegistryはOperator Hubのようなものか

ブループリントを共有するための仕組みとしてのRegistryを構築するというのも、エコシステム拡大のためには必要な動きだろう。CNCFとも協力しているということで、今後の動きにも注目だ。

このスライドではコミュニティのサポートという観点でAWS、Azure、Red Hat、Alibaba、IBM Cloudなどのベンダーだけではなく、メルセデスベンツ、マスターカードなどのエンドユーザーの名前が挙げられていることがポイントだ。

コミュニティの活動を紹介

コミュニティの活動を紹介

最後にCrossplaneの将来計画を紹介して、キーノートセッションを終えた。

Crossplaneの将来計画

Crossplaneの将来計画

ここではCrossplaneがカバーする領域を拡げること、複数の言語をサポートすることなどに加えて、HashiCorpが開発し、インフラストラクチャーの構成管理では大きなユーザーを持つTerraformのサポートが挙げられていることに注目するべきだろう。すでに利用されているツールからの移行をポイントに挙げることで、移行のためのコストを下げる意図があることがわかる。また2020年5月に行われたCrossplane Community Dayに登壇したGoogleのKelsey Hightower氏は、Terraformで使われているHCLをCrossplaneのYAMLに変換するデモを行っている。

参考:Keynote: Kelsey Hightower, Crossplane Community Day, May 2020

ここではCrossplaneをTerraformに対抗するという発想ではなく、Terraformを包含する新しいコントロールプレーンとして位置付けていることが理解できる。

CrossplaneはCNCFのサンドボックスプロジェクトということで今後の進展に注目するべきだが、Alibabaがベンダーとしてコミュニティに参加していることも注目したい。AlibabaはOAMを推進するメンバーとしても活動しており、CrossplaneだけではなくOAM、そしてマルチクラウドインフラストラクチャーを推進する大きな力となっていくと予想できる。

著者
松下 康之 - Yasuyuki Matsushita
フリーランスライター&マーケティングスペシャリスト。DEC、マイクロソフト、アドビ、レノボなどでのマーケティング、ビジネス誌の編集委員などを経てICT関連のトピックを追うライターに。オープンソースとセキュリティが最近の興味の中心。

連載バックナンバー

サーバー技術解説

Tigeraのアドボケイトが、x86とARMのマルチアーキテクチャークラスターを解説

2022/4/7
ARMの優位性を解説しながら、ARMをx86クラスターに追加するマルチアーキテクチャークラスターを、デモを用いて解説。
システム開発イベント

KubeCon NA 2021からサービスメッシュの2セッションを紹介

2022/3/18
KubeCon NA 2021からサービスメッシュのLinkerdの最新情報とIstioを使ったユースケースのセッションを紹介する。
セキュリティイベント

KubeCon NA 2021、ソフトウェア開発工程のタンパリングを防ぐSLSAを解説

2022/3/9
KubeCon NA 2021のプレカンファレンスから、ソフトウェアサプライチェーンを実装するフレームワークSLSAを取り上げたセッションを紹介する。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています