Nattyの開発
前回に引き続き、今回も「Nattyの新機能」の概要を見ていきましょう。今回はクラウド関連技術を中心にお届けします。
Linuxには「コンテナ」と呼ばれる仮想化技術が存在します。KVMなどのハイパーバイザー型仮想マシンでは仮想マシン上で複数のカーネルを動作させるのに対して、コンテナ型は「既存のカーネルをそのまま利用し、カプセルに閉じ込めた環境として動かす」ものです。現在もっとも有名なコンテナ型仮想マシンは、おそらくOpenVZです。
コンテナ型仮想マシンの場合も、VMwareやKVMなどと同じく、「既存のOS環境のプロセスとして」仮想OSを生成して動作させることができます。ユーザーから見ると、基本的にはハイパーバイザー型であってもコンテナ型であっても、同じように扱えます。OpenVZを利用したVPS環境などを利用されている方もいるでしょう。
ただし、コンテナ型は「通常のオペレーションで使われる空間」と「仮想OSが利用する空間」に論理的に分割しているだけで、「仮想マシン」といったレベルの仮想化は行っていません。コンテナ型は同じホストOS・ゲストOSで同じカーネルのインスタンスを利用し、Unix namespaceやデバイス制御などを「隔離」して用いているだけです[1]。カーネル(特にメモリページ)が共用されているため、マシン一台あたりのリソース消費が少なくなる=多くのマシンを収容できる、ということです[2]。ただしカーネルが共有されることで、仮想マシン(子)側からカーネルの脆弱性を突かれると、「親」側まで乗っ取られてしまうおそれがある、という問題があります。
要するに、「既存の環境から隔離されたプロセス環境が作れる」もしくは「非常に軽い仮想マシン環境(ただし少し制限がある)」ものだと思っておけば、それほど間違ってはいません。
このコンテナ型仮想マシンの実装のひとつに「lxc」(Linux Container)があります。lxcは「一応」Linuxカーネルにすでに基本機能が取り込まれており、比較的容易に利用できる状態になっています。
Nattyで利用可能になる新機能のひとつは、この「lxc」を簡単に利用できるようにする、というものです。すでに現状で「lxc上でmavericやnattyを動かし、仮想マシンインスタンスとして扱う」ことが簡単に行える状態になっています(lxc-debianやlxc-fedora等もありますが、これはlxcの配布物そのもの)。Debian環境で比較用にUbuntuを利用する、あるいはUbuntu環境の中で開発用にDebian sidを稼働させる、といった開発者的な用途にも使え、これ単体でも非常に便利な状態になっています
今回のlxc関連の機能強化は、これだけではありません。Eucalyptusを利用したAmazon EC2互換のクラウド基盤環境、Ubuntu Enterprise Cloud(UEC)への適用も行われようとしています。UECは基本的にKVMを前提としているため、HVM(Intel VT-xやAMD-V)をサポートするハードウェアでなければ動作が行えませんでした。これにより、「古いマシンをUECに組み入れて使う」といったことはできません。また、ARMやPPCなど、そもそもHVMをサポートしたCPUが入手でいないアーキテクチャもあり、こうした環境ではUECを利用してなにかを作る、ということは不可能でした。
UECで利用可能な仮想化方式としてlxcが追加されることで、こうした環境でもUECを利用することが可能になります。また、lxcはメモリ効率やストレージの利用効率といった面でKVMに比べて有利なため、ハードウェア性能に不安がある環境で、「軽量な仮想マシン環境」として利用できます。これはそのままUEC環境にも適用されるため、ARMベースの高電力効率マシンを用いたUECファーム、といった応用も可能になる、と言えます。
UEC(Eucalyptus)では、「実際に仮想マシンを動作させるマシン」を「NC」と呼びます。他のマシン群(CLC・CC・SC・Warlus)はストレージを担当したり、「司令塔」や「窓口」としての役割を果たし、最終的に「NC」でKVMかlxc仮想マシンが動作する、というモデルです。
UECは必要に応じて構成マシンを追加していくことができるのですが、大量のマシンでUECを構築した場合、そのほとんどは「実際に仮想マシンを動かす」役割を果たすNCとなります。UEC環境のセットアップは非常に簡単で、Ubuntu ServerのCDを用いて起動し、UECのセットアップモードを指定、NCとして設定、といった単純な手順でNCを増やしていけるのですが、CDからわざわざ起動して手動で設定、というのは非常に面倒なものです。
そこで、Nattyからは「PXEブートで起動することで、自動的にNCとしてセットアップされる」という新機能が企画されています。もともとはcobblerとpuppetを組み合わせ、PXEブートで任意の機能を持ったサーバーを導入できるようにする、というものだったのですが、コンセプト実証のためにNCの自動インストール機能が提供されるようになりました。今後、さらに機能が充実し、他の種別のサーバーも容易にインストールできるようになりそうです。
OpenStack[3]は、Eucalyptusなどと同じクラウド基盤で、多くの企業が参加して開発が行われているオープンソースプロジェクトです(Canonicalも参加しています)。Natty以降、UbuntuではOpenStackもパッケージ環境に含まれ、容易に利用できるようになります。
Nattyに含まれるOpenStackは、「Bexar」です[4]。
cloud-initは、Ubuntuのリリース形態のひとつである「EC2向け」イメージ[5]で利用される、「クラウド環境特有の初期化処理を行うためのユーティリティ」です。起動時に自動的に呼び出され、「設定ファイルを指定されたサーバーからダウンロードし、IPアドレスの設定を行う」(EC2環境では基本)、「SSH公開鍵を任意に登録する」(これもEC2環境では自動的に行われるのが前提)といった処理を行います。
Nattyのcloud-initでは設定ファイルとしてyamlも利用できるようになる・RightScaleで利用するソフトウェアを事前設定できるようになる等、細かな部分のチューニングが行われます。特にyamlで設定できるようになる点は非常に大きいと言えるでしょう[6]。
その他のニュース
今週のセキュリティアップデート
- usn-1087-1:libvpxのセキュリティアップデート
- https://lists.ubuntu.com/archives/ubuntu-security-announce/2011-March/001276.html
- Ubuntu 10.10用のアップデータがリリースされています。CVE-2010-4489を修正します。
- CVE-2010-4489は、WebMメディアファイルの処理における問題で、悪意ある細工の施されたWebMファイルを開いた際にクラッシュが発生するものです。
- 対処方法:通常の場合、アップデータを適用することで問題を解決できます。
- 備考:このアップデートはセキュリティ修正だけでなく、それ以外の修正点も含んでいます。
- usn-1085-2:tiffの再アップデート
- https://lists.ubuntu.com/archives/ubuntu-security-announce/2011-March/001277.html
- 現在サポートされている全てのUbuntu(6.06 LTS・8.04 LTS・9.10・10.04 LTS・10.10)用のアップデータがリリースされています。usn-1085-1の再アップデートです。LP#731540を修正します。
- usn-1085-1として提供されたアップデータに問題があり、CCITTFAX4ファイルの扱いによる脆弱性を修正しきれていませんでした。
- 対処方法:アップデータを適用の上、セッションを再起動(一度ログアウトして再ログイン)してください。
- usn-1079-2:OpenJDK 6のセキュリティアップデート
- https://lists.ubuntu.com/archives/ubuntu-security-announce/2011-March/001278.html
- usn-1079-1のARM環境向けリリースです。
- usn-1088-1:Kerberosのセキュリティアップデート
- https://lists.ubuntu.com/archives/ubuntu-security-announce/2011-March/001279.html
- Ubuntu 9.10・10.04 LTS・10.10用のアップデータがリリースされています。CVE-2011-0284を修正します。
- CVE-2011-0284は、KerberosのKDCにおいて、PKINIT機能を有効にしている場合に限り、ネットワーク越しに悪意あるパケットを送出することで、メモリの二重解放によるクラッシュを引き起こせる問題です。理論的には任意のコードの実行も可能ですが、現実的な環境を仮定した場合は機能する攻撃コードの作成は困難と考えられます。
- 対処方法:通常の場合、アップデータを適用することで問題を解決できます。