Hypernetesは,フルスペックOSを実行することによるオーバーヘッドを回避するために,仮想マシン(VM)でコンテナをホストするゲストオペレーティングシステムを最小機能(minimalist)のLinuxカーネルに切り替える。
HyperHQが10月にHypernetesをリリースした。InfoQでは,同社の開発エバンジェリストだったThibault Bronchain氏と,VisualOpsの創設者として同分野に投資しているPeng Zhao氏に,その機能について詳しく聞くことにした。
HypernetesはKubernetesのフォークである。コンテナのホストとしてHyperプロジェクトを,Linuxコンテナのクラスタ管理フレームワークとしてOpenStack – IaaS(Infrastructure-as-a-Service)ソフトウェア – のコンポーネントとKubernetesを利用している。
Hypernetes – Hyperプロジェクト – のコンポーネントのひとつに,ベアメタル上のコンテナのランタイムを提供するものがある。コンテナは通常,VM内のゲストオペレーティングシステム上にローンチされるが,HyperはHyperカーネルと呼ばれる小さなLinuxカーネルを使ってVMをローンチすることで,このゲストOS/VM層を“平坦化”している。ここがHyperと他のコンテナランタイムと大きく違う部分だ。この点についてBronchain氏は,
Hyperは“ゲストOS”を,単一のLinuxカーネルで完全に置き換えています。こうすることで,プロビジョニングされたVMが超軽量になると同時に,プロビジョン自体も非常に速くなります。1秒以下で起動し,Linuxコンテナよりもはるかに軽量です。
Hyperがカーネルを起動した後,HyperStartと呼ばれる初期化サービスがPodを生成する。Podは,同じ論理グループに属するコンテナイメージのコレクションである。この概念はGoogleから借用したものだ。例えば,マイクロサービスアーキテクチャのPodならば,ロギングやモニタリングといったヘルパプログラムで構成されることも考えられる。Bronchain氏は,MesosやSwarmといったツールではなくKubernetesを選択した理由について,次のように説明している。
Kubernetesが最も信頼性が高く,最も使いやすいスケジューラだと思うからです。ただし,他のスケジューラにHyperを実装することも否定はしません。現在はまだ,ロードマップを計画している段階です。
Bronchain氏によると,カスタマイズされたHyperカーネルを他のLinuxカーネルに置き換えることは可能だが,現時点ではドキュメントが整備されていないため,簡単な作業ではない。
OpenStackはクラウドの構築と管理を行うためのIaaSフレームワークである。Hypermetesでは,そのコンポーネントのいくつかを利用している。例えば,認証と承認にOpenStackのIDでサービスカタログを提供するKeystoneが使われている他,ストレージとしてCinderやCeph,ネットワーク管理にはNeutronが使用されている。OpenStackのコンポーネントは通常,OpenStackデプロイメント外では使用されないものなので,これはユニークなユースケースだ。
コンテナランタイムでは,Dockerの完成度が高まり,広く採用が始められたばかりだ。いまだ黎明期にあるこの分野で,いったい誰が代替手段を必要とするというのだろう?Zhao氏は次のように言う。
世界はパブリッククラウドに向かっています。Linuxコンテナのパフォーマンスがどれだけ高くても,結局はVMで実行されるのですから,インフラスタックを簡略化して新たなサービスを可能にするためには,VMをコンテナのように動作させる方が理にかなっています。それに,コンテナベースのパブリッククラウドを利用するすべてのユーザが同じバージョンのカーネルを使用するように強要される,という状況は,想像できるようなものではありません。
エコシステムには他にも, “Linuxコンテナハイパーバイザ”をうたうUbuntuのLXDなどのプレイヤが存在する。Hypermetesとの比較に関するInfoQの質問に対して,Zhao氏は次のように答えている。
コンテナベースながらセキュリティ面では完全なVMのエミュレートが可能なLXDに対して,Hyperはアプリ中心のDockerエクスペリエンスを提供しようとしています。Hyperはハイパーバイザを使用しますが,フルVMのようには動作しません。
同じような製品としては,他にCoreOSがある。Dockerやrktのようなランタイムを使用するホストコンテナ用に特別に設計された,Linuxベースの軽量オペレーティングシステムだ。しかしながら,Hyperがホストコンテナにミニカーネルのみをローンチするのに対して,CoreOSは,その上で動作するコンテナに対してサービスディスカバリや構成共有を組込みでサポートするオペレーティングシステムである,という違いがある。