Ubuntu Weekly Topics

2011年3月18日号 Linux ContainerとOpenStackサポート・PXEによるノード展開・cloud-initの強化

この記事を読むのに必要な時間:およそ 3 分

Nattyの開発

前回に引き続き,今回も「Nattyの新機能」の概要を見ていきましょう。今回はクラウド関連技術を中心にお届けします。

cloud-server-n-containers-finetune / cloud-server-n-containers-in-uec

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ファーム,といった応用も可能になる,と言えます。

注1
SolarisのZoneやFreeBSDのJailを思い浮かべてください。
注2
逆に,iptablesのルール数に上限がある,仮想マシン側からスワップを利用できない等,様々な制限があります。

cloud-server-n-install-service

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の自動インストール機能が提供されるようになりました。今後,さらに機能が充実し,他の種別のサーバーも容易にインストールできるようになりそうです。

cloud-server-n-openstack-integration

OpenStack注3は,Eucalyptusなどと同じクラウド基盤で,多くの企業が参加して開発が行われているオープンソースプロジェクトです(Canonicalも参加しています)⁠Natty以降,UbuntuではOpenStackもパッケージ環境に含まれ,容易に利用できるようになります。

Nattyに含まれるOpenStackは,⁠Bexar」です注4)⁠

注3
OpenStackの一部は,もともとはNASAで開発されていたNebulaプロジェクトをベースにしています。⁠NASAで開発された」という語句は世間的には「うさんくさいもの」の代名詞ですが,幸いにして大規模コンピューティング業界では「NASAで開発された」⁠NASAで利用されていた」ソフトウェアが相当数存在しています。
注4
OpenStackのリリース名は「Austin」⁠Bexar」⁠Cactus」……と,⁠テキサスの地名をアルファベット順に使う」というネーミング法則になっています。さらに,開発についても六ヶ月おきのリリース(⁠D」以降)⁠Design Summitで決まった内容を次のリリースで実現する,と,どこかで見たことのある開発パターンを取っています。

cloud-server-n-cloud-init

cloud-initは,Ubuntuのリリース形態のひとつである「EC2向け」イメージ注5で利用される,⁠クラウド環境特有の初期化処理を行うためのユーティリティ」です。起動時に自動的に呼び出され,⁠設定ファイルを指定されたサーバーからダウンロードし,IPアドレスの設定を行う」⁠EC2環境では基本)⁠⁠SSH公開鍵を任意に登録する」⁠これもEC2環境では自動的に行われるのが前提)といった処理を行います。

Nattyのcloud-initでは設定ファイルとしてyamlも利用できるようになる・RightScaleで利用するソフトウェアを事前設定できるようになる等,細かな部分のチューニングが行われます。特にyamlで設定できるようになる点は非常に大きいと言えるでしょう注6)⁠

注5
その名の通り,Amazon EC2やUEC環境などに向けた,⁠仮想化OSに特化した,必要最低限の」中身を持つイメージです。
注6
これまでは「MIMEファイルを頑張って作る」という方式でした……。

その他のニュース

今週のセキュリティアップデート

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機能を有効にしている場合に限り,ネットワーク越しに悪意あるパケットを送出することで,メモリの二重解放によるクラッシュを引き起こせる問題です。理論的には任意のコードの実行も可能ですが,現実的な環境を仮定した場合は機能する攻撃コードの作成は困難と考えられます。
  • 対処方法:通常の場合,アップデータを適用することで問題を解決できます。

著者プロフィール

吉田史(よしだふみひと)

Ubuntu Japanese Team Member株式会社創夢所属。システム管理を中心にWindows/PC Unixを併用している。Ubuntu Japanese Teamではパッケージサーバの管理や翻訳などの作業を担当。

コメント

コメントの記入