OpenStack Magnumとコンテナ
はじめに
2015年1月20日、コンテナサービスMagnumの最初のバージョンがリリースされました。Magnumは、Docker swarmやKubernetesなどのコンテナクラスタを提供するOpenStackのAPIサービスであり、これらの環境をコマンドで構築し、操作することができます。本連載では、Fedora21とDevStackを用いてMagnum環境を構築し、Kubernetesの操作手順についてご紹介します。
第1回では、OpenStackがコンテナを取り扱うための課題と、Magnumの概要についてご紹介します。
コンテナの歴史
コンテナと仮想マシンの違い
今や「クラウド」という言葉が一般的になり、仮想マシンでシステムを構築することも当たり前になりました。最近では仮想マシンとともに、軽量な仮想化を実現する「コンテナ」に注目が集まっています。コンテナは、1つのホストマシンに複数の隔離されたシステムを走らせることができるOSレベルの仮想化の技術です。古くからFree BSDのJailやSolarisのZonesがあり、LinuxではLXC(Linux Containers)があります。
LXCは、カーネルを共有し、kernel namespace(ipc, uts, mount, pid, network and user)やchroot、cgroupsなどを用いて隔離された空間を作ります。
コンテナは仮想マシンと異なり、カーネルを共有しているため、コンテナの上に別のOSの環境を構築(例:Linux上にWindows環境を構築)することはできません。またハードウェアは仮想化されていないため、各コンテナのリソース(CPUの数やメモリ量など)は、ホストマシンと同じになります。
LXCは、PaaS(Platform as a Service)を提供している企業などが利用していました。Dockerを開発したdotCloud社も、最初はPaaSを提供している企業でした。
Dockerの紹介
Dockerは、アプリケーションとそれらを実行する環境をパッケージングする技術です。コンテナで隔離された空間に、Dockerで作られた環境を展開します。そのためDockerが実行できる環境であれば、OpenStackやAWSなどの仮想マシンでもベアメタルでも、パブリッククラウドでもプライベートクラウドでも、まったく同じアプリケーションを動かすことができるため、ポータビリティ性に優れています。
Dockerでコンテナを作るために、以前はLXCやsystemd-nspawnを利用していましたが、現在はlibcontainerを用いてコンテナ環境を作っています。
Dockerのイメージは、Dockerfileというテキストファイルに元となるイメージやインストールするパッケージ、ストレージの設定などを記述して、それを元に構築されます。インフラをコードで管理できることも、Dockerの利点の1つと言えます。
コンテナクラスタの紹介
単体のシステムを構築する際にはDockerは非常に便利ですが、APサーバやDBサーバ、ロードバランサなど複数台からなるシステムを構成する際には、Dockerコンテナを組み合せる機能がないため、構築するのが大変です。そこで、複数のDockerコンテナを組み合わせてコンテナクラスタを構築するDocker SwarmやKubernetesが開発されました。
Docker SwarmはDocker社が開発したDockerのクラスタリングを構築するツールです。条件にあるホスト(例えば2GBのメモリが利用できるホストや、SSDのホスト等)にDockerコンテナを配置したり、Dockerホストのリソースを管理したりします。2015年5月に発表されたばかりのツールなので、現状では機能はまだ少なめですが、将来はサードパーティのツール(Mesos等)もプラグインできる予定なので、今後に期待ができます。
一方Kubernetes(ギリシャ語で船の操縦手を意味する。発音はkoo-ber-nay'-tace)は、Googleが開発したコンテナクラスタを管理するツールです。Googleは、以前から社内のサービスをコンテナで運用していました。検索やGmailなどLinuxコンテナでパッケージングし動かしており、毎週20億以上のコンテナを立ち上げられているそうです。Googleは、その経験からコンテナのスケジューリングの重要性を知っていました。そこで、内部で使われているOmegaやBorgというツールをもう少し使いやすい形で公開したのがKubernetesです。
Kubernetesは2014年に公開され、今ではバージョン1.0.1となり、ホームページには「Kubernetes is ready for Production!」と記載されています。コンテナのスケジューリングやコンテナ同士のネットワークの接続、生死監視をすることができます。
Googleは、AzureやMesosphereでKubernetesが使えるようにパートナーシップを結んだり、後述するMagnumを通じてOpenStackでも利用できるようにOpenStack Foundationに参加したりしています。
OpenStackのコンテナの取り組み
OpenStackでもコンテナを利用するための取り組みは行われており、NovaのLXCドライバやDockerドライバが開発されています。しかしながら問題もありました。これらのドライバはNovaの配下にあるため、コンテナを仮想マシンと同様のライフサイクルで管理しようとしました。しかし仮想マシンとは異なり、コンテナはシャットダウンやスナップショットなどを行うことができません。これは、Novaのベアメタルドライバと同じ問題です。仮想マシンと異なるライフサイクルの管理は難しく、実際、ベアメタルについてはIronicという別プロジェクトが生まれました。
Novaのハイパーバイザマトリックスを見ると、ベアメタルドライバ、Dockerドライバ、LXCドライバはGroup Cに所属しています。Group Cは、Icehouse移行の際に「Deprecate(非推奨)」になる予定と書かれています。
そこで代替アプローチとして、Heatを使用してDockerを操作するHeatのDocker Pluginが開発されました。仮想マシン上にDockerの環境をHeatで構築して、Docker Remote APIをHeat Pluginに実装しました。
Magnumの登場
Heat Pluginは単体のコンテナを操作できますが、コンテナクラスタを構築することができません。そこで登場したのが「Magnum」プロジェクトです。前述の通り、コンテナクラスタのAPIを提供するプロジェクトで、2015年1月に登場しました。HeatのDocker Pluginと同様に、仮想マシン上にDockerコンテナクラスタを構築します。ベースとなる仮想マシンには、Fedora/CentOS Atomic HostやCoreOS、DockerやZookeeper、Mesos、MarathonなどのミドルウェアがインストールされたUbuntuのイメージを利用します。
Magnumのアーキテクチャ(図2)を見てわかるように、MagnumはHeatのテンプレートを用いてコンテナクラスタを構築しています。図2の緑文字の部分がMagnumで、青文字が既存の機能を表しています。
Magnumは以下の7つのオブジェクトを管理します。
- Container:Dockerコンテナ
- Pod:コンテナの集合(同じNodeにデプロイされる単位)
- Node:コンテナを実行する場所(仮想マシン、将来はベアも視野にいれている)
- Service:Podの論理集合とどのPodにアクセスするかのポリシーを決める
- Replication Controller:Podのレプリカ数を維持
- Bay:Nodeの集合(OpenStackのInstanceに相当するもの)
- BayModel:Bayのテンプレート(OpenStackのFlavorに相当するもの)
これらのオブジェクトはKubernetes専用のものもあり、Docker SwamのクラスタではServiceやPod、Replication Controllerは利用しません(図3)。
今回は、OpenStackにおけるコンテナの取り組みについてご説明しました。次回は、実際にFedora21とDevStackを用いて、実機1台でMagnum環境を構築する手順を説明します。
- Linuxは、Linus Torvalds氏の日本およびその他の国における登録商標または商標です。
- OpenStack®の文字表記とOpenStackのロゴは、米国とその他の国におけるOpenStack Foundationの登録商標/サービスマークまたは商標/サービスマークのいずれかであり,OpenStack Foundationの許諾を得て使用しています。日立製作所は,OpenStack FoundationやOpenStackコミュニティの関連企業ではなく、また支援や出資を受けていません。
- その他、記載の商標やロゴは、各社の商標または登録商標です。
【参考文献】
LXC
https://linuxcontainers.org/ja/
Docker
Kubernetes
Containers At Scale
https://speakerdeck.com/jbeda/containers-at-scale
Google Container Engine is Generally Available
http://googlecloudplatform.blogspot.jp/2015/08/Google-Container-Engine-is-Generally-Available.html
Omega
http://static.googleusercontent.com/media/research.google.com/en/us/pubs/archive/41684.pdf
Omega, and what it means for kubernetes: A Q&A about cluster scheduling
Announcing Collaboration with Google and Docker to Support New Open Source Projects on Microsoft Azure
https://azure.microsoft.com/ja-jp/blog/azure-collaboration-with-google-and-docker/
Mesosphere collaborates with Kubernetes and Google Cloud Platform
Google bringing container expertise to OpenStack
http://www.openstack.org/blog/2015/07/google-bringing-container-expertise-to-openstack/
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- Dockerコンテナのオーケストレーション機能を実現するOpenStack Magnumを触ってみた
- KubernetesのマニフェストをMagnumで実行する
- Openstack Magnumの環境を構築する
- コンテナ連携が進むOpenStack
- 「OpenStack Summit May 2015 Vancouver」レポート #3(2日目)
- OpenStackとコンテナの技術動向
- Kubernetes環境の選択肢
- OpenStackのアーキテクチャを理解しよう
- Intelが中国のベンチャーHyperと共同で開発を進める新しいコンテナランタイムKataを公開
- runC vs. cc-runtime vs. kata-runtime?コンテナランタイムの内部構造と性能比較