めもめも

このブログに記載の内容は個人の見解であり、必ずしも所属組織の立場、戦略、意見を代表するものではありません。

RDOデモ環境を確実に構築する手順

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に関するコマンドは、下記のバグに対するワークアラウンドです。

# 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」にメッセージを仕込むサンプルです。