半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
長井 佑太
株式会社サイバーエージェント
AKEチーム
Cybearagent に 2024 年新卒入社、マネージド Kubernetes サービス「AKE」の開発・運用に携わっています。また、Rust 製コンテナランタイム「youki」の Committer として、OSS コミュニティにも積極的に貢献しています。
セッション概要
CIU(CyberAgent group Infrastructure Unit)では、サイバーエージェントグループ向けのプライベートクラウド「Cycloud」を開発・運用しています。プライベートクラウドのVM基盤では、ハードウェアの世代交代を繰り返しながら基盤を維持していく必要があります。これまでは世代交代のたびにプライベートクラウドのシステムを作り直してきましたが、そのたびに利用者がVMやボリュームデータ、マネージドサービスの設定等を移設しなければならず、CIU・利用者の双方にとって大きな負担となっていました。さらに、新しいシステムでは提供されるサービスの構成やAPIの仕様も置き換わるため、利用者は移設のたびに大きな学習コストを強いられてきました。ハードウェアの寿命が、そのまま利用者の移行負担として現れていたのです。 そこで、Cycloudの新リージョンでは、「半永久的に提供し続けられるプライベートクラウド」を目標として掲げました。鍵になるのはAPIの抽象化です。VM基盤の本体であるOpenStackのAPIを、利用者へは直接見せずに独自のgRPC APIでラップして提供し、KubernetesのCRD(Custom Resource Definition)とカスタムコントローラーによってOpenStack へ反映するという方式をとりました。これにより、利用者から見えるインターフェースを固定したまま、裏側のOpenStackだけを新しいものに入れ替えることが可能になります。ハードウェアの世代交代はOpenStackの置き換えとして処理され、利用者はVMのインスタンスタイプを変更して再起動するだけで、透過的に新しい世代のマシンを利用できます。 本セッションでは、そのような抽象化の仕組みを実現した基盤設計を深掘りします。まず、利用者の要求をそのまま表す「Interface CRD」と、OpenStackなどのプロバイダーへの反映を担う「Provider CRD」による二層アーキテクチャ、それらを制御し、インフラの状態を利用者が要求する状態へ収束させるKubernetesカスタムコントローラーの設計について紹介します。さらに、インスタンスタイプの変更を契機として、世代の異なるクラスター間でVMやボリュームを移行する仕組みについてもお話しします。