さくらの専用サーバとOpenStackで作るプライベートクラウド

 専用サーバーサービスが共用サーバーやVPSサービスと大きく異なる点として、サーバー上で仮想マシンを動かせる点がある。これは最近増えている利用形態であり、オープンソースのツール群も整ってきている。そこで本記事では「さくらの専用サーバ エクスプレスG2シリーズ」に「OpenStack」という仮想化環境管理ツールを導入し、専用サーバーをいわゆるプライベートクラウドのように利用するための手順を紹介する。

プライベートクラウドとは

 数年前から、「クラウド」と呼ばれる技術がブームとなっている。クラウドの定義はさまざまだが、一般的には「自分が所有していないサーバーにインターネット経由で接続して何らかのサービスを利用する」ものがクラウドとされている。クラウドで提供されるサービスはアプリケーションだけでなく、アプリケーションを実行するためのプラットフォームやOSを実行できる仮想環境インフラなどもあり、それぞれ「Software as a Service(SaaS)」、「Platform as a Service(PaaS)」、「Infrastracture as a Service(IaaS)」などと呼ばれている。たとえばGoogleのGmailはSaaS型のクラウドサービスで、同じくGoogleのGoogle AppEngineはPaaS型、AmazonのEC2はIaaS型のサービスだ。

 クラウドサービスでは使用した時間やリソース単位で「使った分だけの課金」が行われることが多く、また利用状況に応じて柔軟に構成を変更できるのが特徴だ。運用・管理を自動化するためのAPIも提供されており、使い方によって管理・運用コストを下げられる点が人気の理由である。しかし、サーバーが物理的にどこにあるのか利用者からは分からず、またその管理はサービスを提供する事業者が行うため、サービスを安心して利用できるかどうかは事業者次第になる。企業によってはコンプライアンスの観点からサーバーの設置場所やその管理方法に対して一定の条件を満たすことが求められる場合もあり、これらがクラウド導入の足かせとなることがある。

 そこで最近注目されているのが「プライベートクラウド」と呼ばれる、自分で管理しているサーバー群を使って自前のクラウド環境を実現してしまう技術だ。クラウドのメリットの1つである「サーバーの管理を事業者に任せられる」点はなくなってしまうものの、柔軟にサーバーの構成を変更できる点や運用・管理をAPIを使って自動化できるというメリットはプライベートクラウドでも享受できる。

 近年ではプライベートクラウドを実現するための技術開発が非常に盛んである。その中でも、注目されておりよく比較されるものとして以下の3つがある。

  • OpenStack
  • CloudStack
  • Eucalyptus

 OpenStackは、米国のホスティング事業者であるRackSpaceと米航空宇宙局(NASA)が2010年にスタートした、オープンソースのクラウドインフラプラットフォーム開発プロジェクトだ。元々NASAが開発していたクラウド環境管理システム「Nebula」やRackSpaceのストレージシステム「Cloud Files」をベースにしており、2012年には非営利団体「OpenStack Foundation」が発足、現在ではこの団体が開発を主導している。OpenStackのコミュニティにはCitrixやDell、NTTデータ、AMD、Intel、Canonicalなど192の企業が参加しており、Canonicalなどの企業がOpenStackベースのクラウドサービスを提供している。ライセンスはApache License 2で、Pythonで実装されている。

 CloudStackは米国のベンチャー企業であるCloud.comが開発していたクラウドインフラプラットフォームだ。オープンソース版と有料のエンタープライズ版がリリースされていたが、XenSouceを買収するなどして仮想化技術に力を入れている米Citrix Systemsが2011年にCloud.comを買収、その後オープンソース版とエンタープライズ版を統合してGPLv3で提供するようになった。2012年にはCitrixがCloudStackを非営利のオープンソース団体Apache Software Foundation(ASF)に寄贈、同時にライセンスがApache License 2に変更され名称も「Apache CloudStack」となった。現在は「インキュベーション(独立支援)段階というステータスでASFの正式プロジェクト化に向けた整理が進められている。

 Eucalyptusはカリフォルニア大学サンタバーバラ校(UCSB)によって開発が始められたクラウドインフラプラットフォームである。Eucalyptusは「Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems」の略で、Amazon EC2とAPI互換がある点が特徴だ。2009年にエンタープライズ向けのサービスを提供するベンチャー企業Eucalyptus Systemsが設立され、現在は同社によって開発が進められている。プロプライエタリのエンタープライズ版とGPLv3で提供されるオープンソース版の2つがリリースされていたが、最新版であるEucalyptus 3.1では両者が1本化され、GPLv3でリリースされた。実装はCおよびJavaで行われている。歴史が長いこともあり、多くの採用実績がある。かつてはUbuntu Enterprise Cloudのコア技術として採用されていた。

 OpenStackおよびCloudStack、Eucalyptusはどれも基本的な構成レベルでは大きな違いはないものの、コンポーネント構成や細かい機能などにおいて違いがあるため、どれを選択すべきかは悩むところである。利用実績としてはEucalyptusが多いと言われているが、近年ではCanonicalがUbuntu CloudでOpenStackを正式採用したり、Red HatもOpenStackのサポートを表明するなど、ややOpenStackが盛り上がっているようだ。そこで今回はクラウドインフラとしてOpenStackを選択し、さくらの専用サーバを使い小規模なプライベートクラウド環境を構築していく例を紹介していく。

OpenStackのバージョンとコードネーム

 OpenStackの現在の最新バージョンは2012年4月にリリースされた2012.1(コード名「Essex」だ。本記事ではこのEssexを使用して解説を行っている。バージョンによっては提供されているパッケージや構成が異なる場合があるので注意してほしい。なお、過去にリリースされたバージョンとそのコードネームは表1のようになっている。

表1 OpenStackのバージョンとコードネーム
コードネーム リリース日 バージョン
Essex 2012年4月 2012.1
Diablo 2011年10月 2011.3
Cactus 2011年4月 2011.2
Bexar 2011年3月 2011.1
Austin 2010年10月 0.9.0

OpenStackのアーキテクチャ

 OpenStackを利用するには、まずOpenStackのアーキテクチャについて理解しておく必要がある。パブリッククラウド環境の管理・運用には、仮想環境で使用するカーネルイメージやディスクイメージの管理やストレージの管理、APIの提供、クラウド環境の作成や設定、削除といった操作を行うユーザーの管理といった機能が必要だ。OpenStackではそれぞれ異なるコンポーネント(サーバー)でこれらを提供し、各コンポーネント間はHTTPベースのプロトコルで通信を行う、というアーキテクチャが取られている。OpenStackの主要なコンポーネントとその名称(コード名)は表2のとおりだ。

表2 OpenStackの主要なコンポーネント
提供するサービス コード名 説明
Identity Service keystone ユーザー認証および管理とサービスの管理を行う
Computing Service nova 仮想マシンやそのネットワーク、ストレージなどの操作・管理を行う
Image Service glance カーネルイメージやディスクイメージを管理する
Dashboard horizon Webブラウザ経由で操作できる管理UIを提供する
Object Storage swift オブジェクトストレージを提供する

 「keystone」はOpenStackの管理や設定に使用するユーザーの認証や管理を行うコンポーネントだ。また、どのコンポーネントがどのサーバーで動作しているのか、そのエンドポイント(そのコンポーネントにアクセスするためのURL)に関する情報もkeystoneが管理している。keystoneで管理されるリソースはグループ化することができ、このグループは「テナント(Tenant)」と呼ばれる。また、それぞれのユーザーには「ロール(Role)」と呼ばれる情報が与えられる。Roleにはそのユーザーがどのような操作を行えるかといった情報が格納されており、ユーザーごとに異なるロールを割り当てることで、それぞれのユーザーが実行できる操作を制限できる。

 「nova」は仮想マシンの作成や起動といった操作およびネットワークやストレージといった仮想マシンが利用するリソースの管理を行うコンポーネントだ。novaはOpenStackの中核をなすコンポーネントで、それぞれの機能はさらにサブコンポーネントに分割されて実装されている(表3)。

表3 novaの主なサブコンポーネント
コンポーネント名 説明
nova-compute 仮想マシンの作成・管理を行う
nova-network 仮想マシンが使用するネットワークの作成・管理を行う
nova-volume 仮想マシンが使用するストレージの作成・管理を行う
nova-api novaを操作するためのAPIを提供する
nova-scheduler 仮想マシンに割り当てるリソースのスケジューリングを行う
nova-cert 認証関連の操作を行う
nova-console 仮想マシンのコンソールを管理する
nova-consoleauth 仮想マシンのコンソールに対する接続を管理する
nova-objectstore 各種イメージファイルのやり取りを仲介する
nova-novncproxy 仮想マシンのコンソールにWebブラウザベースのクライアントで接続するためのインターフェイスを提供する
nova-xvpvncproxy 仮想マシンのコンソールにJavaベースのクライアントで接続するためのインターフェイスを提供する

 「glance」は仮想マシンが使用するカーネルイメージやディスクイメージを管理するコンポーネントだ。仮想マシンの作成時、novaはglanceにアクセスして使用するイメージを取得する。

 OpenStackでプライベートクラウドを構築する際、最低限必要なのはkeystoneとnova、glanceの3コンポーネントで、残りの「swift」および「horizon」はオプションのコンポーネントとなる。swiftはクラウドストレージを構築するためのコンポーネントで、データを複数のサーバー/ストレージに分散させて保存し冗長性を保つ仕組みが備えられている。データは「オブジェクト」という単位で格納され、データの読み書きはREST API経由で実行される。

 また、horizonはOpenStackの各コンポーネントを操作できる管理用ダッシュボードを提供するコンポーネントだ。ダッシュボードにはWebブラウザ経由でアクセスできる。

OpenStackの最小構成

 OpenStackは前述のようにその機能が複数のコンポーネントに分割されている。それぞれのコンポーネントは同じサーバーで実行させることもできるし、異なるサーバーで実行させることもできる。ただし、通常は仮想マシンを実行させる計算用ノードと、OpenStackの管理を行う制御用ノードは分けるのが一般的である。なお、ドキュメントによるとそれぞれの推奨要件は表4のようになっている。

表4 OpenStackを実行させるサーバーの推奨要件
ノード 制御用ノード 計算用ノード
CPU 64ビットのx86 CPU
メモリ 12GB 32GB
ディスクスペース 30GB
ネットワーク 1Gbps×1 1Gbps×2

 制御用ノードについては、CPUはクアッドコアCPUを搭載したサーバーであれば十分とのこと。また、32ビットCPUでも動作するだろうとのことだが、i386版のパッケージは公式には提供されていない。計算用ノードについては、64ビット環境の仮想マシンを実行させるために64ビットCPUを搭載したマシンが推奨されている。メモリについては、テスト環境としては2GBが最小構成とのこと。ドキュメントではメモリは32GBとされているが、作成する仮想マシンインスタンスの構成によっても変わってくるため、これより少ないメモリ容量でも問題ない。

OpenStackの各コンポーネントが使用するサービス

 keystoneおよびglance、novaはその管理情報を格納するためにデータベースを使用する。また、novaはノード間でメッセージをやり取りするためにメッセージキューを使用している。そのほか、仮想マシンを実行するための仮想化機能や、セッションキャッシュを行うためのキャッシュサービスといったサービスも必要とする(表5)。OpenStackの利用時にはこれらのコンポーネントが利用できるようインストールや設定を行っておく必要がある。

表5 OpenStackの各コンポーネントが使用するサービス
種別 必要とするソフトウェア 使用するOpenStackコンポーネント
データベース MySQLもしくはPostgreSQL、SQLite keystone、glance、nova
メッセージキュー RabbitMQもしくはQpid nova
仮想化技術 libvirt(KVMもしくはQEMU、LXC、VMware)もしくはxapi(XCPもしくはXenServer) nova-compute
ストレージ LVMもしくはXen Storage Manager、SAN、NexentaStor、NetApp、Ceph、Sheepdog nova-volume
Webサーバー Apache HTTP Serverもしくはnginx horizon
Webフレームワーク Django horizon
キャッシュサーバー memcached horizon