物理ノード1台+IPアドレス1個でCloudStack
本記事はCloudStack Advent Calendar 2014のために書いたものです.「CloudStackをサスペンドしてみる」という内容で書く予定でしたが,そちらの内容はろまのふさん(@kamiya344)にお願いすることになりました.本記事では1台構成のCloudStackをIPアドレス1個で実現する方法について紹介します.
概要
サーバ1台でCloudStackを構築します.通常,CloudStackでクラウドを構築する際は,(1)クラウド管理サーバ,(2)VMを動作させるコンピューティングホスト,(3)VMのHDDを格納するNFSサーバの3つが必要になります.しかし,(1)〜(3)を1台に集約することで,物理サーバ1台でCloudStackを構築することもできます.
CloudStackを使って物理サーバ1台構成のクラウドを構築する方法(http://bit.ly/AutoInstallCloudStack)が既にあります.しかし,この方法では(作成するVM数にもよりますが)IPアドレスが10-30個程度必要になります.既存のネットワークで利用できるIPアドレスが少ない場合や,利用申請が必要など手続きが煩雑な環境において,IPアドレス1個でCloudStackを構成する方法を考えてみました.この記事では,基本ネットワーク構成のCloudStackを構築する方法を紹介します.
ネットワーク構成の概要
通常,1台構成のCloudStackのネットワーク(基本ネットワーク構成)は下図のようになっています.物理サーバで稼働しているVMのNIC(vnet0, vnet1, …)は,cloudbr0という名前のブリッジに追加されています.eth0は外部ネットワークと接続されていて,各VMには外部ネットワークと同じネットワークセグメントのIPアドレスが割り当てられます.その結果,外部ネットワークのIPアドレスがVMで使用するだけ必要になるので,十分な数のIPアドレスが用意できない場合,クラウドを構築できません.
外部ネットワークのIPアドレスが1個しか利用できない場合,物理サーバ内部でVM用のネットワークを用意することで,クラウドを構成できます.先ほどと同じようにcloudbr0にVMのNICが追加されますが,このブリッジにはeth0を追加しません.eth0とcloudbr0を別系統で用意してNATすることで,VMと外部のネットワークを分離します.
1台構成クラウドの構築手順
ここからは,上で示した構成のクラウドの構築手順を説明します.ネットワークの設定方法を変更するだけなので,CloudStack自体のインストール方法は公式のインストール手順とほぼ同じです.なお,ネットワーク情報は以下の内容で設定します.
外部ネットワークのCIDR | 192.168.0.0/24 |
VMのIPアドレスのCIDR | 10.100.0.0/24 |
物理サーバのIPアドレス(eth0) | 192.168.0.101 |
物理サーバのIPアドレス(cloudbr0) | 10.100.0.1 |
今回対象とする物理サーバのスペックは以下のとおりです.
CPU | Intel Core i7-3770 |
RAM | 32GB |
HDD | 2TB |
NIC | 1GbE x 1 |
CentOSのインストール
構築対象とするサーバは,CentOS 6.5 のディスクでminimal構成でインストールしました.インストール後,外部からSSHできるようにネットワーク設定を済ませておきます.なお,OSインストール後にパッケージの更新を行ったため,CentOS 6.6になっています.
ネットワークの設定
この記事で最も重要となるネットワークの設定を行います.
bridge-utilsのインストール
yum install bridge-utils tunctl -y
NICの設定
/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0" BOOTPROTO="static" UUID=“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" HWADDR=“XX:XX:XX:XX:XX:XX" IPADDR="192.168.0.101" NETMASK="255.255.255.0" BROADCAST="192.168.0.255" GATEWAY="192.168.0.1" DNS1="192.168.0.254" IPV6INIT="yes" IPV6_AUTOCONF="yes" NM_CONTROLLED="no" ONBOOT="yes" TYPE="Ethernet"
/etc/sysconfig/network-scripts/ifcfg-cloudbr0
DEVICE="cloudbr0" BOOTPROTO="static" BROADCAST="10.100.0.255" IPADDR="10.100.0.1" IPV6INIT="yes" IPV6_AUTOCONF="yes" NETMASK="255.255.255.0" NM_CONTROLLED="no" ONBOOT="yes" TYPE="Bridge"
ネットワークを再起動して適用
service network restart
NATとFORWARDの設定を行います.
iptables -I FORWARD -o eth0 -j ACCEPT iptables -I FORWARD -o cloudbr0 -j ACCEPT iptables -t nat -A POSTROUTING -s 10.100.0.0/24 -d 192.168.0.0/24 -j MASQUERADE iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 10.100.0.0/24 -j MASQUERADE iptables-save > /etc/sysconfig/iptables
CloudStackでは,VMが起動するタイミングでNIC間の転送がOFFになってしまうため,/proc/sys/net/ipv4/ip_forwardに1を書き続けるように設定します./etc/rc.localに以下を追記してくことで,1秒毎にNIC間転送をONにするようにします.
while true; do echo 1 > /proc/sys/net/ipv4/ip_forward; sleep 1; done &
CloudStackのインストール
既存の1台構成CloudStackのインストールスクリプト(http://bit.ly/AutoInstallCloudStack)と公式マニュアルを参考に,CloudStackのインストールを行います.インストール対象ホストが1台に集約されるだけで,手順および設定内容は通常と変わりません.
SystemVM,仮想ルータ,CentOSテンプレートのダウンロード,テンプレート/ISOイメージからのインスタンスの作成,各VMからのネットワーク接続について確認済みです.1台構成のためライブマイグレーションはできませんが,CloudStackの基本的な機能は問題なく使用できると思います.