DockerCon EU 2015でVMwareは,Photon Contorollerをオープンソースとして,同社のGitHubアカウントを通じて公開した。Photon Controllerは,‘コンテナアンドクラウド’ワークロードに最適化されたインフラストラクチャスタックとして設計された,VMwareのPhotonプラットフォームのコンポーネントだ。仮想プラットフォームでは,‘APIファースト’のユーザエクスペリエンス,スケーラブルなコントロールプレーン,KubernetesやDocker Swarm, Mesosといったフレームワークを通じたコンテナのネイティブサポートを提供する。
VMwareのブログでの説明によると,Photonプラットフォームは,‘クラウドネイティブなアプリケーション’用に最適化された新しいインフラストラクチャスタックである。VMware ESXiハイパーバイザをベースとしているが,“vSphereが提リッチな管理機能を供するのに対して,スケールとスピードを重視している”点が特徴だ。プラットフォームは,ESXのベースにPhoton OSを組み込んだ軽量な'マイクロバイザ(microvisor)’のPhoton Machineと,Project Lightwaveコンテナセキュリティプロジェクトを組み込んだ分散型,API駆動,マルチテナントなコントロールプレーンであるPhoton Controllerとで構成され,‘極めて大規模かつ大容量’の処理を前提に設計されている。
Photonプラットフォームは今年8月のVMworldでリリースされたが,それと同時に,“開発者やユーザ,パートナに直接関与して頂けるよう,Photon Controllerをオープンソース化”することが約束されていた。Photon ControllerのWebサイトには,プロジェクトの提供するものとして,次のような説明がある。
- APIファーストモデル: RESTfulなAPIとSDK,CLIツールを使用した,インフラストラクチャの利用と運用の自動化に焦点を置いたユーザエクスペリエンス。
- 高速かつスケーラブルなコントロールプレーン: スケーラビリティと速度の面で最適化された,新たなインフラストラクチャコントロールプレーンによって,1分間で1,000個のVM分離されたワークロード生成を実現するとともに,総数100,000個の同時実行をサポートする。
- ネイティブコンテナのサポート: Photon Controllerは,“クラウドネイティブな(分散)アプリケーション用に設計されたワークロードを実行する,大規模な運用環境”を前提に開発されている。KubernetesやDocker Swarm, Pivotal CF / Lattice, Mesosといった,さまざまなコンテナオーケストレーションフレームワークを使ってコンテナベースのアプリケーションをデプロイすることが可能だ。
Photon Controllerのアーキテクチャは,‘分散コーディネーション’を通じて管理される,多数の組結合コンポーネントあるいはサービスで構成されている。エンドポイントはApache Zookeeperに登録される。サービスは‘スケールアウト(アクティブ/アクティブ)’としての運用も,あるいは明確に区分けされたワーク(スケジューラなど)を持つことも可能だ。Photon Controllerの技術的なアーキテクチャは,下図に示すようなものだ。
図1. Photon Controllerの技術的アーキテクチャ
Photon Controllerの外部APIは,JavaベースのDropwizardフレームワークを使って実装された,REST (JSON over HTTP)インターフェースとして提供される。API資料はSwaggerを通じて公開されている。外部REST APIは,永続的なデータベース(‘CloudStore’)を共有するAPIサーバの水平スケールによって公開されるように設計されている。この共有データベースは,コンテナやクラスタ,VM,ディスク,ネットワーク,物理的ホストなどに関して,信頼できる唯一の情報源(Single Source of Truth)の役割を果たすものだ。またAPIサーバの前には,通常はロードバランサ(haproxyのような)が設置される。
Photon Controller管理プレーンは大部分がJavaで記述されている。また,サービスのいくつかは,現時点ではテクノロジプレビューとして提供されている,‘非集中型システム開発フレームワーク’の,VWware Xeonフレームワーク上に実装されている。製品全体として統合テストを行うためのESXエージェントはPythonで,Photon Controller CLIはRubyで,それぞれ実装されている。
Photon Controllerによって管理される各物理ホストでは,Apache Thriftで実装されたRPCインターフェースを提供するエージェントが動作する。ホスト上の他のコンポーネントはすべて,このインターフェースを使って通信を行う。その他にも,コンポーネントの状態監視やハウスキーピング処理を行う,特殊なコンポーネントがいくつかある。スケジューラの状態とツリーのトポロジを担当するコンポーネントの‘Chairman’もそのひとつだ。
VMwareのWebサイトには,Photon Controllerが画期的な分散スケジューラを実装している,という説明もある。
スケジューラサービスのノードは階層構造になっていて,ツリーの各ノードは,直接の子ノードのみを認識します。スケジューラはノードの負荷および利用に関する基本的な統計情報を,その親に対して持ち上げます。親ノードは配置上の要件を解決するために,スケジューラツリーを通じて要求をルーティングします。スケジューラはこの方法で,単一のメトリックあるいは構成データベースへの負荷の集中を回避しています。
Photon PlatformとPhoton Controllerに関する詳しい情報はプロジェクトのWebサイトで,オープンソースのコードはVMwareのGitHubリポジトリで,それぞれ入手可能だ。テストが目的であれば,スタンドアロンの小さなPhoton Controllerデプロイメントをダウンロードして,プロジェクトの“Devbox”内で使用することができる。プロダクトに関する疑問はPhoton Controller Google Groupか,あるいはStack Overflowで“photon-controller”タグを使って質問するとよいだろう。