2013/10/24:より簡単に構築したい方は、こちらの記事も参照ください。
最短手順でRDO(Grizzly)のデモ環境を構築
こちらにRDOのデモ環境を構築した際の手順メモがありますが、なかなか一筋縄ではいきません。そこで、できるだけ手順をシンプルするためのツール「demostack」を用意しました。
2013/07/03 セキュリティグループにルールを追加する際、ICMPのType/Code指定でのルールが追加できないバグがあります。
一時的な回避策としては、次の手順でパッチを適用して、サーバを再起動してください。
# yum install -y patch # wget https://bugzilla.redhat.com/attachment.cgi?id=765551 -O /tmp/securitygroups_db.py.patch # cd /usr/lib/python2.*/site-packages/ # patch -p0 -b < /tmp/securitygroups_db.py.patch
構築するデモ環境の全体像
物理NICを2個持つサーバーを用意して、両方のNICを同一のパブリックネットワークに接続します。ここでは、「eth0」「eth1」とします。サーバーの種類によっては「em0」「em1」になりますので、適当に読み替えて下さい。
------------------------------- パブリックネットワーク | | |eth0 |eth1 --------------------------- | | | | [br-ex] | | | | | ---------------------------
eth0には、IPアドレスを割り当てて、外部から管理接続する際に使用します。SSHでログインしたり、WebブラウザでHorizonを使用する際のIPアドレスです。
eth1には、IPアドレスを割り当てません。これは、Open vSwitch(br-ex)に接続して、VMインスタンスがパブリックネットワークと通信する際のNICとして使用します。
パブリックネットワークについて、下記の情報を事前に決定してください。
項目 | 値の例 |
---|---|
サブネット | 10.0.1.0/24 |
ゲートウェイ | 10.0.1.254 |
サーバのIPアドレス | 10.0.1.99 |
DNSサーバ | 8.8.8.8 |
IPアドレスプール | 10.0.1.100〜10.0.1.199 |
「IPアドレスプール」というのは、Floating IPや仮想ルータの外部IPアドレスなど、OpenStackが自由に利用できるIPアドレスの範囲です。パブリックネットワーク上で未使用のIPアドレスの範囲を指定してください。
仮想ネットワークについては、ほぼ決め打ちで、次のような構成になります。
---------------- パブリックネットワーク | | [demo_router] : 仮想ルータ | | | ---------------------- : プライベートネットワーク (2) | private02 192.168.102.0/24 | -------------------- : プライベートネットワーク (1) private01 192.168.101.0/24
プロジェクト(テナント)「demo」に対して、上記の2つのプライベートネットワークが用意されます。VMインスタンスは、どちらかのプライベートネットワークに接続します。プライベートネットワークの数やサブネットは、オプションで変更することは可能です。
Fedora18のインストール
はじめにサーバにFedora18をインストールします。
LVM構成のLinuxが導入された環境に対して、Fedora18を上書きインストールしようとすると、Fedora18のインストーラがエラーで停止する場合があります。そのような際は、インストーラの画面で[Ctrl]+[Alt]+[F2]を押すとコマンド画面に切り替わるので、次のコマンドなどで、LVMの構成情報を削除した上で、再度、インストールを試みてください。
# dd if=/dev/zero of=/dev/sda count=2 # reboot
ソフトウェアの選択では、「最小限のインストール」+ 「標準アドオン」を選びます。
ネットワークの設定では、「eth0」にIPアドレスを設定して、「eth1」は「オフ」の状態にします。この画面でホスト名を設定するのも忘れないでください。
ディスクパーティションの構成はややトリッキーです。結論としては、下記のような構成にしたいのですが、インストーラーからは次のような手順になります。
パーティション | サイズ | 用途 |
---|---|---|
/dev/sda1 | 500MB | /boot |
/dev/sda2 | 適宜 | Swap |
/dev/sda3 | 50GB | / |
/dev/sda4 | 余り全部 | Cinder Volume |
インストール先のディスクを選択して続行すると「インストールオプション」のポップアップがでるので、「パーティションスキーマの設定」→「パーティションタイプ」→「標準パーティション」を選んで、「代わりにディスクの・・・・」にチェックを入れます。
パーティション設定の画面で「ここをクリックすると自動的・・・」を押します。
下図のようなパーティションが構成されますが、「/home」が余分なので削除します。(画面下の「-」ボタンで削除します。)
これで、「/dev/sda1〜/dev/sda3」からなるパーティションが構成できました。「/dev/sda4」は、インストール完了後に手動で作成します。
起動したら、ネットワークの構成状況を確認します。eth0はIPアドレスがアサインされており、eth1は「UP」だけどIPアドレスは振られていない状態になっています。
# ip addr show eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000 link/ether 84:2b:2b:67:87:85 brd ff:ff:ff:ff:ff:ff inet 10.0.1.99/24 brd 10.64.201.255 scope global em1 inet6 fe80::862b:2bff:fe67:8785/64 scope link valid_lft forever preferred_lft forever # ip addr show eth1 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000 link/ether 84:2b:2b:67:87:86 brd ff:ff:ff:ff:ff:ff inet6 fe80::862b:2bff:fe67:8786/64 scope link valid_lft forever preferred_lft forever
eth1に対して、DHCPなどでIPアドレスが振られてしまっている場合は、「/etc/sysconfig/network-scripts/ifcfg-eth1」に「ONBOOT=no」を指定してみてください。
ディスクパーティションは、次のようにsda3まで構成されているので、fdiskでsda4を追加します。
# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 149G 0 disk ├─sda1 8:1 0 500M 0 part /boot ├─sda2 8:2 0 7.9G 0 part [SWAP] └─sda3 8:3 0 50G 0 part /
# fdisk /dev/sda コマンド (m でヘルプ): n Partition type: p primary (3 primary, 0 extended, 1 free) e extended Select (default e): p 選択したパーティション 4 最初 sector (122316800-312499999, 初期値 122316800): 初期値 122316800 を使います Last sector, +sectors or +size{K,M,G} (122316800-312499999, 初期値 312499999): 初期値 312499999 を使います Partition 4 of type Linux and of size 90.7 GiB is set コマンド (m でヘルプ): wq
この後で、Cinder Volume用のVGを作るので、lvm2パッケージを追加します。ついでに全パッケージをアップデートして、再起動します。
# yum install -y lvm2 # yum -y update # reboot
再起動したら、sda4を使って、VG「cinder-volumes」を用意します。
# pvcreate /dev/sda4 # vgcreate cinder-volumes /dev/sda4
RDOのインストール
いよいよRDOをインストールします。得意のpackstackで一発です。
※途中のqpidに関するコマンドは、下記のバグに対するワークアラウンドです。
- https://bugzilla.redhat.com/show_bug.cgi?id=977786
- https://bugzilla.redhat.com/show_bug.cgi?id=1012001
# yum install -y http://rdo.fedorapeople.org/openstack/openstack-grizzly/rdo-release-grizzly.rpm # yum install -y openstack-packstack # yum install -y qpid-cpp-server-ha # sed -i.bak 's/cluster-mechanism/ha-mechanism/' /usr/lib/python2.*/site-packages/packstack/puppet/modules/qpid/templates/qpidd.conf.erb # setenforce 0 # packstack --allinone Welcome to Installer setup utility Packstack changed given value to required value /root/.ssh/id_rsa.pub Installing: Clean Up... [ DONE ] Setting up ssh keys...root@10.0.1.99's password: <--- rootパスワードを入力します。 (以下省略) # cp /etc/qpidd.conf /etc/qpid/qpidd.conf
仮想ネットワークとプロジェクトの構成
ここで、demostackを利用して、プロジェクトの作成や仮想ネットワークの構成を行います。まず、githubからdemostackを入手します。サンプルのインスタンスイメージが含まれるので、少しダウンロードサイズは大きくなります。
# yum install -y git # git clone https://github.com/enakai00/demostack.git # cd demostack # git checkout f18-grizzly
スクリプト「setup.sh」の先頭部分にあるパラメータを編集します。
#### extnic="eth1" # パブリックネットワーク接続用NIC public="10.0.1.0/24" # パブリックネットワークのサブネット gateway="10.0.1.254" # パブリックネットワークのゲートウェイ pool=("10.0.1.100" "10.0.1.199") # IPアドレスプール nameserver="8.8.8.8" # DNSサーバ private=("192.168.101.0/24" "192.168.102.0/24") # プライベートネットワークのサブネット ####
これらは、冒頭の表にまとめた情報に対応します。特にパブリックネットワークの構成は環境によって異なると思いますので、適宜修正してください。プライベートネットワークについては、下記のように3個以上に増やすことも可能です。
private=("192.168.101.0/24" "192.168.102.0/24" "192.168.103.0/24")
このスクリプトは、サーバ再起動を挟んで、2回実行する必要があります。まずは、「prereboot」オプションで実行します。途中でいろいろWarningが出ますが、成功メッセージが出たら、サーバを再起動してください。
# ./setup.sh prereboot (中略) Done. Now you need to reboot the server. # reboot
サーバーが起動したら、今度は「postreboot」オプションで実行します。
# cd demostack # ./setup.sh postreboot (中略) Done.
これで仮想ネットワークが構成されました。その他には、プロジェクト「demo」とそのユーザもできています。
ユーザ | ロール | パスワード |
---|---|---|
demo_admin | 管理者 | passw0rd |
demo_user | 一般ユーザ | passw0rd |
WebブラウザからサーバのIPアドレスを指定して接続すると、Horizonのダッシュボードが表示されるので「demo_user」でログインしてみましょう。
はじめにVMインスタンスのイメージを用意します。「イメージとスナップショット」の画面で「イメージの作成」のボタンを押して、ポップアップがでたら、下記のように入力します。「イメージの場所」に「http://localhost/images/Fedora18-cloud-init.qcow2」を入力すると、demostackが事前に用意したイメージがインポートされて使用可能になります。
この後は、「アクセスとセキュリティ」の画面から、セキュリティグループの構成(デフォルトでは外部からSSHログインできませんので・・・)、キーペアの作成、FloatingIPの確保などを行なってください。
なお、setup.shは、再実行しても構わないように作ってあります。デモ環境を綺麗に再初期化したくなったら、「postreboot」オプションで再実行してください。
VMインスタンスの起動
VMインスタンス起動時は次の点に注意してください。
仮想ネットワークへの接続は、「private01」「private02」のどちらかを選択してください。先ほど用意したイメージは、eth0のみにDHCPの設定がなされているので、両方に接続した場合、eth1にはIPアドレスがアサインされません。インスタンス起動後に手動でDHCPを構成することはできると思います。
プライベートネットワーク上のインスタンスにパブリックネットワークから接続する際は、Floating IPを割り当てる必要があります。「アクセスとセキュリティ」の画面で「Floating IP」のタブから「Floating IPの確保」ボタンを押します。下記のポップアップで、「ext-network」のプールから、余っているパブリックIPの1つをFloating IPとして確保することができます。通常、複数のFloating IPが必要になりますので、この作業を繰り返して、何個かまとめて確保しておくとよいでしょう。
この後、さらに「Floating IPの割り当て」ボタンを押して、下記のポップアップで、確保したFloating IPの1つを希望するインスタンスに割り当てます。
ここで割り当てたFloating IPを指定して、パブリックネットワークから接続すると、仮想ルータによってNAT処理が行われて、インスタンスに接続ができるようになります。
また、先ほど用意したイメージは、cloud-initが仕込まれているので、起動時にカスタマイズ・スクリプトが利用できます。下記は、「/etc/motd」にメッセージを仕込むサンプルです。