パブリック・クラウドにおけるAmazonやプライベート・クラウドにおけるVMwareの成功により、あらゆるタイプの企業がクラウド時代への一歩を踏み出し、コストを比較的低く抑えながら強力な機能を得るためにコンピューティング・リソースを仮想化しようとしています。これがIaaSプロバイダーの原動力です。
IaaSはリソースの管理を自動化する機能を提供します。IaaSは大規模でスケーラブルなクラウド環境に対応しており、限られた数のリソースを手動で管理するのとは全く異なるシステムです。
CloudStackはかつてcloud.comの商用製品でしたが、2011年にCtrixに2億ドル以上で買収され、今年Apache Foundationに寄付されました。同製品をオープンソース化したことで、市場ではIaaSの発展の道筋について、同じくオープンソース製品であるOpenStackとの競合や提携など、賛否両論が巻き起こっています。
表1 CloudStackとOpenStackの比較
追伸:比較データは2012年中頃のもので、ソフトウェアのバージョンはCloudStack 3とOpenStack Essexに対応しています。
市場にある2つのIaaSプラットフォーム、CloudStackとOpenStackは、機能、顧客、市場へのルートが異なっており、前者は本番システムで使用するための信頼性が証明されている商用ソフトウェアであり、後者は、現時点では実世界の幅広いユーザーに欠けているものの、より多くの大企業に支えられていると言えます。これは大きな違いです。
にもかかわらず、両者を支えるソースコードの貢献者は、技術的に言えば必ずしも異なるわけではなく、同じ会社の開発者が両方のオープンソースプロジェクトにコードを提出することもよくあります。その意味では、この2つのプラットフォームがいずれ合併しても不思議ではありません。
CloudStackアーキテクチャ図
CloudStackは、クライアント層、コアエンジン層、リソース層という典型的なレイヤー構造を持っています。Webコンソール、コマンドシェル、WebサービスAPIなど、さまざまなタイプのクライアントに対応したアクセス方法が用意されており、ユーザはこれらを通じて、ホストへのVMの割り当て、仮想ディスクのプロビジョニングなどの機能を実行するために使用される基礎となるコンピュートリソースを管理することができます。図 1 を参照
図1.
XenおよびKVMを使用する仮想マシンは、管理サーバとの対話をサポートするためにCloudStack Agentをインストールする必要があります。管理サーバは、Xen Serverとのやり取りにはXAPIを使用し、vCenterおよびESXとのやり取りにはHTTPを使用します。
CloudStackをデプロイする際には、その階層とストレージ管理を理解する必要があります(図2を参照)。
図2.
ゾーン:ゾーンは現実のデータセンターに相当し、CloudStackの最大の単位です。
ポッド:ポッドはラックに対応します。同じポッド内のマシンは同じサブネットにあります。
クラスタ:クラスタは複数のホストのグループです。同じクラスタ内のホストは同じハードウェア、同じハイパーバイザを持ち、同じストレージを共有します。同じクラスタ内の仮想マシンは、サービスを中断することなくホスト間で移行できます。
ホスト: ホストは、仮想マシンが実行されているホストです。
つまり、包含関係で言えば、ゾーンは複数のポッドを含み、ポッドは複数のクラスタを 含み、クラスタは複数のホストを含みます。
CloudStackには2種類のストレージがあります:
プライマリストレージ: プライマリストレージはクラスタに関連付けられ、そのクラスタ内のホストのすべての仮想マシンにディスクボリュームを提供します。クラスタには少なくとも1つのプライマリストレージがあり、高いパフォーマンスを提供するためにホストの近くに配置されます。
セカンダリストレージ:セカンダリストレージはゾーンに関連付けられ、テンプレートファイル、ISOイメージ、ディスクボリュームのスナップショットを保存します。
テンプレート:仮想マシンを起動できるオペレーティング・システム・イメージで、インストールされているアプリケーションなどのその他の構成情報も含まれます。
ISOイメージ:オペレーティング・システム・データまたはブート・メディアを含むディスクのイメージ。
ディスクボリュームスナップショット:仮想マシンのデータの保存されたコピーで、データ復旧や新しいテンプレートの作成に使用できます。#p#
CloudStackのインストール
- 完全なCloudStack環境は2つの部分で構成されます:
- サーバーの管理
- 仮想マシン・マネージャー
追伸:CloudStackのハイパーバイザーは、ホスト、エージェントなど他の名前でも一般的に呼ばれています。この記事ではハイパーバイザーと呼びます。
この記事のインストール手順では、構成は単純なネットワーク、つまり、すべての管理対象VMが1つのネットワークセグメントに配置されています。対応するハードウェアは次のとおりです:
表2 ハードウェアとソフトウェアの環境
KVM用ハイパーバイザー。
管理サーバーは、NFSもそのマシン上に構築されるため、より多くのストレージ容量が必要です。より詳細なインストール要件はCloudStackウェブサイトのガイドを参照してください。ここで注目すべき点は
Q1:CloudStackのインストールに失敗する原因となる、正式なインストール要件に含まれるハードウェアやソフトウェアの要因を教えてください。
ハイパーバイザーが常駐するホストでは、CPUとマザーボードがハードウェア仮想化をサポートしている必要があります。
オペレーティングシステムは64ビットである必要があり、centos 6.2を推奨します。 バージョン5.5または6.0を使用している場合は、必ず一致するCloudStackインストールパッケージを選択してください。また、多くの回り道を避けるため、OSは公式リリースでサポートされていると主張する必要があります。例えば、Ubuntu 12.04やcentos 6.3でCloudStackのデプロイに成功している人がいるのは事実です。
ハイパーバイザーのホストに実行中の仮想マシンがない場合、その後のホストの追加操作で障害が発生します。ハイパーバイザーのホストにオペレーティング システムを新規にインストールし、残りの仮想マシンをデプロイしないことをお勧めします。
CloudStackのインストールには、管理サーバーとハイパーバイザーのあるホストの両方でrootとしてログインする必要があります。
管理サーバーとハイパーバイザーのホストは、独立した静的 IP を持つホストでなければなりません。そうでない場合、その後のインストールで IP アドレスの変更に起因するサービスステータスの例外が発生する可能性があります。
CentOSインストール後のデフォルトのネットワーク設定はDHCPなので、手動でIPを割り当てるように変更する必要があります:
デスクトップ右上のネットワークアイコンをクリックして、ネットワークを編集します:
図3
方法は「DHCP」で、「手動」に設定し、固定IPアドレス、マスク、ゲートウェイ、DNSサーバー情報を入力します。
図4
管理サーバーのインストール
rootとしてcloud-server.squirrel.orgにログインします。
hostname - fqdn "を実行し、返されたフォーマットにドメイン名のフルネームが含まれていることを確認してください。hostnameは、できればcentosのインストール時に設定する必要があります。そうでない場合は、/etc/hostsと/etc/sysconfig/networkの両方で変更し、恒久的なものにする必要があります。ネットワークの両方で変更する必要があります。
ダウンロードして解凍したCloudStackのインストールディレクトリに移動し、コマンド"./install.sh "を実行し、"M "を選択して管理サーバーソフトウェアをインストールします。
以下のコマンドを実行して、NFSサービスとrpcbindサービスを起動し、ブート時に実行するように設定します:
# service rpcbind start
# service nfs start
# chkconfig nfs on
# chkconfig rpcbind on
コマンドを実行します。/install.sh "を実行し、データベースmysqlをインストールするために "D "を選択します。
innodb_rollback_on_timeout=1
innodb_lock_wait_timeout=600
max_connections=350
log-bin=mysql-bin
binlog-format = 'ROW'
データベースを再起動した後、rootユーザーのパスワードを設定します。
# service mysqld restart
# mysql -u root
mysql> SET PASSWORDPASSWORD = PASSWORD('<password>');
mysql> exit
CloudStackスクリプトを実行して、データベースを自動的に設定します:
#cloud-setup-databases cloud:<dbpassword>@localhost \
--deploy-as=root:<password>
これは、あなたがrootとしてデータベースを生成し、データベースが新しいクラウドユーザーに属していることを意味します。
最後に、以下のコマンドでオペレーティングシステムのiptables、sudoersのセットアップを完了し、管理サーバーを起動します:
#cloud-setup-management
ステータスを表示するには、"service cloud-management status "を使用します。
Q2:手順2で "hostname - fqdn "コマンドを実行する場合、正しいホスト名を返すために、マシンがインターネットに接続されていることを確認してください。
また、ハイパーバイザーがKVMの場合は、/etc/sudoersに以下の行を追加する必要があります:
Defaults:cloud !requiretty
NFSの設定
前述したように、CloudStackはクラスタとホストをサポートするために2種類のストレージを必要としますが、このセクションではNFSによって提供されるので、前のステップでNFSサービスを開始します。便宜上、NFSサーバもcloud-server.squirrel.orgが提供しています。
rootとしてcloud-server.squirrel.orgにログインします。
プライマリストレージとセカンダリストレージ用に2つのディレクトリを作成します:
# mkdir -p /export/primary
# mkdir -p /export/secondary
etc/exportsファイルを編集し、以下を追加してください:
/export *(rw,async,no_root_squash)
次に、/export ディレクトリをエクスポートします:
# exportfs -a
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
RQUOTAD_PORT=875
STATD_PORT=662
STATD_OUTGOING_PORT=2020
ファイアウォール設定ファイル/etc/sysconfig/iptablesを編集し、inputセクションの先頭に以下のルールを追加します:
-A INPUT -m state --state NEW -p udp --dport 111 -j ACCEPT
-A INPUT -m state --state NEW -p tcp --dport 111 -j ACCEPT
-A INPUT -m state --state NEW -p tcp --dport 2049 -j ACCEPT
-A INPUT -m state --state NEW -p tcp --dport 32803 -j ACCEPT
-A INPUT -m state --state NEW -p udp --dport 32769 -j ACCEPT
-A INPUT -m state --state NEW -p tcp --dport 892 -j ACCEPT
-A INPUT -m state --state NEW -p udp --dport 892 -j ACCEPT
-A INPUT -m state --state NEW -p tcp --dport 875 -j ACCEPT
-A INPUT -m state --state NEW -p udp --dport 875 -j ACCEPT
-A INPUT -m state --state NEW -p tcp --dport 662 -j ACCEPT
-A INPUT -m state --state NEW -p udp --dport 662 -j ACCEPT
ファイアウォールを再起動し、変更を保存します:
# service iptables restart
# service iptables save
管理サーバーとハイパーバイザーホストで、/etc/idmapd.conf ファイルを以下のように変更します:
Domain = squirrel.org
管理サーバのホストを再起動し、NFSのテストとマウントを行います。cloud-agent.squirrel.orgマシン上に/primarymountディレクトリを作成し、以下のコマンドを実行して成功することを確認します:
mount -t nfs 192.:/export/primary /primarymount
192. cloud-server.squirrel.org
Q5:ステップ5でファイアウォールの設定ファイルに新しく追加するルールの順番は、NFS共有を成功させるために非常に重要です。
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 error.
tail -200 /var/log/messages
refused mount request from 192. for /export/primary (/export): illegal port 1024
そして、次のことを試してみてください:
vi /etc/exports
元の行を次のように修正します:
/export *(rw,async,insecure,no_root_squash)
では
exportfs -rv
service nfs restart
cloud-agent.squirrel.orgのコマンドを再実行します:
mount -t nfs 192.:/export/primary /primarymount
プロンプトは表示されません:
mount |grep primary
OK
システムVMテンプレートの準備
システムVMテンプレートはセカンダリストレージに保存され、クラウドプラットフォーム上でシステムVMを作成するために使用されます。
rootとしてcloud-server.squirrel.orgにログインします。
ここにダウンロードしたKVMテンプレートがありますので、以下のコマンドを実行してインストールしてください:
# /usr/lib64/cloud/agent/scripts/storage/secondary/cloud-install-sys-tmplt
-m /export/secondary
-u http://..com/templates/acton/acton-systemvm-..bz2
-h kvm -F
インターネットの速度にもよりますが、数分から数時間かかります。
Q7:ここで注意すべき点が2つあります:
- ディスクのパーティションは十分な大きさが必要です。
- VMテンプレートをダウンロードしてインストールするステップは省略しないでください。そうしないと、後でコンソールでセカンダリストレージを追加するときに失敗します。
システムVMは通常のハイパーバイザーホスト上のVMとは異なり、自身のシステムに関連するタスクを実行するためにCloudStackに付属するVMです:
- セカンダリストレージVM:テンプレートのダウンロードとアップロード、イメージのダウンロード、初めてVMを作成する際のセカンダリストレージからプライマリストレージへのテンプレートのコピー、スナップショットの自動作成など。
- コンソール・エージェントVM:ウェブ・インターフェイス上でコンソールを表示するために使用します。
システム仮想マシンはDebian 32ビットオペレーティングシステムであり、CloudStack管理者はSSHを使用してログインできることに注意してください。また、図5に示すように、これらはホスト上の/var/lib/libvirt/imagesで見ることができます:
図5 インストールされたVMの表示
#p#
KVMハイパーバイザーのインストール
ハイパーバイザーホストcloud-agent.squirrel.orgにrootとしてログインします。
サーバーの管理」のステップ1と同様に、ホスト名がドメイン名で完全であることを確認します。
yum erase qemu-kvm」を実行して、OSからqemu-kvmを削除します。
ダウンロードして解凍したCloudStackのインストールディレクトリに移動し、コマンド"./install.sh "を実行し、"A "を選択してエージェントをインストールします。
インストール後、以下のコマンドを実行してnfsサービスとrpcbindサービスを起動し、ブート時に実行するように設定します:
# service rpcbind start
# service nfs start
# chkconfig nfs on
# chkconfig rpcbind on
Q8:VT を有効にしていないために CloudStack Agent が起動しない場合の対処方法を教えてください。
注意 ログを確認してください:/var/log/cloud/agent/.BIOSでVTがオンになっていないためにブートが失敗する場合は、VTサポートをオンにしてからエージェントを再インストールする必要があります:
# service cloud-agent status
表示されている場合
cloud-agent (pid 4188) is running...
これは、正常に実行されたことを意味します。
NTPのインストール、時刻同期
yum install ntp」を実行して、NTPサービスをインストールします。
設定ファイル/etc/ntp.confを編集して、以下のサーバーを含めます:
server 0.xenserver.pool.ntp.org
server 1.xenserver.pool.ntp.org
server 2.xenserver.pool.ntp.org
server 3.xenserver.pool.ntp.org
NTPを再起動し、起動時に自動的に実行するように設定します:
# service ntpd restart
# chkconfig ntpd on
管理コンソールでの仮想化リソースの設定
管理サーバーとハイパーバイザーがインストールされたら、CloudStack UIコンソールにログインしてリソースの設定とデプロイを行うことができます。
Eucalyptusが最初からAWSと互換性を持っていたり、OpenStackがコンポーネントを疎結合にするシステムアーキテクチャを設計していたりと、いくつかの競合と比較して、CloudStackの特徴の1つは、コンソールというユーザーインターフェイスが最も使いやすいことです。ユーザーインターフェイスであるコンソールを持っていることです。
まず、ブラウザを開き、URLにログインします:
"http://...4:8080"/client
用户名 / 密码:admin/password
図6.
図7.
図8.
図9.
図10.
図11.
図12.
最後に "Launch "をクリックしてCloudStackクラウドプラットフォームを起動し、初期化を開始します。
図13 初期化中
成功メッセージが表示されるまでシンプルなクラウド環境がセットアップされ、このコンソールからコンピューティングリソース管理タスクを実行できます。次の2つのイメージは、コンソールの表示です。
図14.
図15.
Q9:コンソールの設定ミスなど、様々な理由でCloudStackのデータベースを再初期化する際に、データベースを削除することがあります:
コマンドラインで
mysql –u root <password>
mysql> drop database cloud; drop database cloud_usage;
#cloud-setup-databases cloud:<dbpassword>@localhost --deploy-as=root:<password>
#cloud-setup-management
そしてこのセクションを繰り返します。
追伸:CloudStackのWeb Consoleインターフェースはカスタマイズ可能です。
#p#
CloudStack APIの使用
AWS APIと同様に、CloudStack APIはWebサービスに基づいており、HTTPコールをサポートする任意の言語でコーディングできます。
最初にコードを呼び出すには、管理サーバーでの認証が必要です。CloudStackは現在2つの認証方法を使用しています:
- API Key
この記事のコード例では、認証に API Key を使用しています。手順は以下の通りです:
管理者はAPI KeyとSecurity Keyを呼び出し元に割り当てます。
最終的なAPI Request = Base URL + API Path + Command String + Signature。
以下は、adminユーザー専用の2つのキーを生成します:
まずは管理デスクにログインしてください:http://...:/nt.
accountsをクリックし、adminを選択し、usersタブをクリックし、adminを見つけます。
APIキーとセキュリティ・キーが表示されます。2つのボックスに値がない場合は、図16のように、ツールバーの小さな鍵アイコンをクリックし、「Generate Keys」をクリックします。
図16.
2つのキーの結果は以下の通り:
表3 管理者ユーザのAPIキーとセキュリティキー
次に、CloudStackのRestful APIを使って仮想マシンを生成します。呼び出しURLは以下の通りです:
"http://...4:8080"/client/api?command=deployVirtualMachine&\
serviceofferingid=1&templateid=4&zoneid=1
commandパラメータの内容はAPI Reference: CloudStackに記載されているので、ここでは繰り返しません。URLの各パラメータはアルファベット順であることに注意してください。
以下は、署名を生成し、完全なURLを組み立てる方法を示しています。
まず、署名の生成に使用するperlスクリプトをこちらからダウンロードしてください。これを適切なディレクトリに置き、コマンドラインに入力してください:
$ ./generate-url.pl –f 1 -u
"command=deployvirtualmachine&serviceofferingid=1&templateid=4\
&zoneid=1" -a TEBBqfXkV-9blsxpkjFLAxNUmnvMsFEq7WKwPOMT_nuce69bmcElXz1\
izsN1qJFK58ye5U5hWWN2ckscsysodg – s 7VJx0QfxvJQZBYZbLdct2QFck8lV6hwLMvo9\
YCJ97pVou8f_aDSHdhEqBaY2CtFI6_MULP0eYqr_Z7D2Jon8nQ
fの後の数字の1はurlの生成、-aはAPIキー、-sはセキュリティキー、-uの後のコマンドパラメータは小文字に変更されています。コマンドは文字列を生成します:
http://*.*.*.*/client/api?command=deployvirtualmachine&serviceofferingid=1\&zoneid=1&templateid=4&apikey=Kn7rrPjdXDWTrcjCTLs7hZM22o0X6aKSZ4Cy4\
GDUHD1TmoVw3e-oNxjRTCBXchffju5OFTqW4zPIik-HKxH7-w&signature=%2BQMXTBOoicZJG\
6EosCcRGvO7OWU%3D
次に、IPを上記のurlに置き換え、コマンドの小文字を元の正しいAPI名に戻すと、結果は以下のようになります:
"http://...4:8080"/client/api?command=listVirtualMachines&account=\admin&domainId=1&apikey=Kn7rrPjdXDWTrcjCTLs7hZM22o0X6aKSZ4Cy4GDUHD1TmoVw3e-o\
NxjRTCBXchffju5OFTqW4zPIik-HKxH7-w&signature=i5%2FQxBf7FIGc6GvAfNcpFnVKpEw%3D
URLをブラウザに入力すると、XMLレスポンスが返され、正常に実行されます:
<deployvirtualmachineresponse cloud-stack-version="3.0.2.20120506223416">
<id>d29a98f2-610c-4e4e-9331-18c133c5bdb3</id>
<jobid>a5c9f26d-98be-4a81-9883-da9dd8dfda47</jobid>
</deployvirtualmachineresponse>
コンソール・インターフェースのインスタンス・タブに戻ると、新しいvmインスタンスが作成されていることがわかります。
同様に、以下のコマンドを使用して、Adminユーザー配下のすべての仮想マシンを一覧表示します。
"http://...4:8080"/client/api?command=listVirtualMachines&account=
admin&domainId=1&apikey=Kn7rrPjdXDWTrcjCTLs7hZM22o0X6aKSZ4Cy4GDUHD1TmoVw3e-\
oNxjRTCBXchffju5OFTqW4zPIik-HKxH7-w&signature=%2BQMXTBOoicZJG6EosCcRGvO7OWU%3D
Q10:上記のスクリプトを実行するには、CentOSにperl開発環境がインストールされている必要があります。コマンド実行中にWWW/Mechanizeクラスが見つからないなどのエラーが出る場合は、先にcpanをインストールする必要があります:
yum install cpan
そして、cpanを使って、足りないモジュールをインストールします:
cpan install WWW::Mechanize
モジュールが足りない場合は、すべてのパッケージがロードされるまで、cpanでインストールしてください。
全体として、CloudStackのAPIは優れた柔軟性とパワーを提供し、CloudBridgeを通じてAmazonのEC2 APIとの互換性もあります。
現状と展望
CloudStackは現在Apacheのサイトで急速にアップデートされており、最新の4.0がリリースされ、VLAN間ルーティング機能、管理リソースのメタデータ、新しいタイプのストレージ、Ubuntu 12.04とREHL 6.3のサポートなどの新機能が提供されています。
CloudStackはライバルの後発優位性よりも成熟した製品アプリケーションを重視しており、OpenStackとの競合は今後数年間CloudStackにとって避けられない問題となるでしょう。しかし、独自のオープンソースを持つことで、将来のIaaS市場は共通の基盤を求めてより遠くへ行くかもしれません。





