OpenStack Magnumとコンテナ

2015年10月27日(火)
西島 直
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などを用いて隔離された空間を作ります。

仮想マシンとコンテナ(引用元:https://www.docker.com/whatisdocker)

仮想マシンとコンテナ(引用元:https://www.docker.com/whatisdocker)

コンテナは仮想マシンと異なり、カーネルを共有しているため、コンテナの上に別の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で、青文字が既存の機能を表しています。

図2:Magnumの構成図(引用元:https://wiki.openstack.org/wiki/File:Magnum_architecture.png)

図2:Magnumの構成図(引用元:https://wiki.openstack.org/wiki/File:Magnum_architecture.png)

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)。

図3:Magnumが管理するオブジェクト(引用元:http://www.slideshare.net/adrianjotto/magnum-firstclassresource)

図3:Magnumが管理するオブジェクト(引用元:http://www.slideshare.net/adrianjotto/magnum-firstclassresource)

今回は、OpenStackにおけるコンテナの取り組みについてご説明しました。次回は、実際にFedora21とDevStackを用いて、実機1台でMagnum環境を構築する手順を説明します。

  • Linuxは、Linus Torvalds氏の日本およびその他の国における登録商標または商標です。
  • OpenStack®の文字表記とOpenStackのロゴは、米国とその他の国におけるOpenStack Foundationの登録商標/サービスマークまたは商標/サービスマークのいずれかであり,OpenStack Foundationの許諾を得て使用しています。日立製作所は,OpenStack FoundationやOpenStackコミュニティの関連企業ではなく、また支援や出資を受けていません。
  • その他、記載の商標やロゴは、各社の商標または登録商標です。

【参考文献】

LXC

https://linuxcontainers.org/ja/

Docker

https://www.docker.com/

Kubernetes

http://kubernetes.io/

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

https://kismatic.com/company/qa-with-malte-schwarzkopf-on-distributed-systems-orchestration-in-the-modern-data-center/

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

http://googlecloudplatform.blogspot.jp/2014/08/mesosphere-collaborates-with-kubernetes-and-google-cloud-platform.html

Google bringing container expertise to OpenStack

http://www.openstack.org/blog/2015/07/google-bringing-container-expertise-to-openstack/

株式会社日立製作所

研究開発グループ デジタルテクノロジーイノベーションセンタ OSSテクノロジーラボラトリ員
OSSの評価・検証・機能開発、upstream活動、社内外へのOSS普及に従事。
Linux KernelやKVM、OpenStackでOSSコミュニティの参加した経験を持つ。
現在はHyperledgerコミュニティに参加しブロックチェーンの普及に勤めている。

連載バックナンバー

業務アプリ技術解説

KubernetesのマニフェストをMagnumで実行する

2016/2/12
今回はKubernetesの「マニフェスト」を作成し、Magnumから実行してみます。
OSS技術解説

Openstack Magnumの環境を構築する

2015/11/30
Fedora 21とDevstackを用いて、Openstack Magnum環境を構築する手順をご紹介します。
OSS技術解説

OpenStack Magnumとコンテナ

2015/10/27
OpenStackがコンテナを取り扱うための課題と、Magnumの概要についてご紹介します。

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

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

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

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