#これはなに
「OpenStackクラウドインテグレーション オープンソースクラウドによるサービス構築入門」の実習をSoftLayerの無料ベアメタルで行う記録である。
サーバー環境の確認
前回はSoftLayerにベアメタルのオーダーをした。今回は、オーダー後、2時間ちょっとで「Your SoftLayer Bare Metal Server (test.os.local) has been provisioned」というメールが来た。「test.os.local」が今回サーバーにつけた名前。ポータルから確認して、サーバー名の右側に時計のアイコンが消えていれば、プロビジョニングは完了している。
アニバーサリーデート(月締め日)を越えてサーバーを維持すると、2ヶ月目以降は1日使うだけでも1ヶ月分の料金がかかる。私のような小心者はここでActionからCancelしてしまう。月額の仮想サーバーは、即時キャンセルとアニバーサリーデート・キャンセルが選べるが、月額ベアメタルはアニバーサリーデート・キャンセルの予約のみ。これで、アニバーサリーデートに自動キャンセルされ、来月は料金がかからない。もし、予算がつくとか、来月も使いたいという場合は、キャンセルのキャンセルができる。
デバイス名をクリックして詳細を確認すると、HWの詳細やrootのパスワードが確認できる。root?ubuntuなのに? はい。SoftLayerのubuntuは、rootでのログインが可能になっている。
sshで入って、中身を確認する。
CPUはXeon 1270 3.40GHzをオーダーしたけれど、ひとつ上の3.50GHz($10高い)になっている。
root@test:~# cat /proc/cpuinfo
~~~
model name : Intel(R) Xeon(R) CPU E3-1270 v3 @ 3.50GHz
~~~
メモリーはオーダーどおり32GB。
root@test:~# cat /proc/meminfo
MemTotal: 32908248 kB
~~~
DISKは500GBのオーダーに対して1TBのものがついている。SoftLayerでは、在庫がない場合、無料でグレードアップしてくれることが多いらしい。
root@test:~# fdisk -l /dev/sda
Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
~~~
環境に問題なさそうなので、作業を始めよう。
第1章 OpenStackの概要
読むだけの章で、作業なし。
第2章 クイックスタート
作業環境を構築する章。「2.1 HP Helion Public Cloud」「2.2 SUSE Cloud」「2.3 RDOによる環境構築」に続き「2.4 DecStackによる環境構築」。今回は、DevStackでやるので、2.4へ移動。
2.4 DecStackによる環境構築
2.4.1は環境全体像の説明、2.4.2はubuntuの導入。今回は済んでいる。
2.4.3 ホストLinuxの環境設定
書籍は、ubuntu DesktopなのでGUIからTerminalを開いているけれど、今回はサーバーなので操作は基本的にsshで行う。79ページで「sudo apt-get」をしているけれど、もともとrootでログインしいるので、sudoはつけなくて「apt-get」でOK。つけてももちろん問題ない。open-sshサーバーは導入・起動済みなので作業は不要。
2.4.4 ホストLinuxの環境設定
この本では、GitHub上のサポートサイト https://github.com/josug-book1-materials/に設定ファイルや構築スクリプトを用意していて、入力が面倒な人(私)や入力ミスが多い人(私)に備えている。そのため「git clone」して、設定されているスクリプトを流せば、基本的に問題なく作業ができるようになっている。
当項のGitHubのディレクトリーはこちら。
https://github.com/josug-book1-materials/ubuntu-virtinst
まず、openstack.xmlを元にKVMの仮想ネットワークを設定する。192.168.100.0/24が設定される。
次に、KVMのVMを3台立てる。用意されている作成スクリプトと自動導入用のpreseed設定ファイルは下記のとおり。
仮想マシン | ホスト名 | IPアドレス | 作成スクリプト | preseed.cfg |
---|---|---|---|---|
コントローラーノード | stack01 | 192.168.100.10 | virtinst-stack01.sh | preseed.cfg |
コンピュートノード#1 | stack02 | 192.168.100.11 | virtinst-stack02.sh | preseed.cfg |
コンピュートノード#2 | stack03 | 192.168.100.12 | virtinst-stack03.sh | preseed.cfg |
VMの作成スクリプトを確認すると、ftp.riken.go.jpからhttpでubuntuを取得している。時間がかかりそうなのと、依存関係はないはずなので、本では順番に作成しているが、sshを3セッションはって平行して3台立ててしまう。
IPアドレスの設定は、preseed.cfgに指定されている。
メモリーやDISKのサイズを変更するなら、作成スクリプトのパラメーターを変更するが、今回はメモリー32GB、DISK 1TBなので、そのまま実行する。
stack01のみ「--network」が2回指定され、仮想NICが2枚ついている。preseedで構成されなかったeth1の設定を/etc/network/interfacesに追加しrebootする。
stack02/stack03には「--disk」の指定が2回ある。追加ディスクはCinder用である。
2.4.5 DevStackのインストールと設定
ubuntuを導入したVMにDevStackを導入する。当項のGitHubのディレクトリーはこちら。
https://github.com/josug-book1-materials/quick-devstack
まず、コントローラーノード stack01の導入をする。
./stack01/setup.sh を流す。下記があるので、今回の環境はjunoということらしい。
git clone -b stable/juno git://git.openstack.org/openstack-dev/devstack.git $DEVSTACK_DIR
./stack01/setup.sh は構成情報の local.conf、extras.d/99-demo.sh を用意する。
local.conf を見ると、起動させるサービスとかauth_urlとかの情報が入っている。
git://git.openstack.org/openstack-dev/devstack.git から持ってきたstack.shを実行して、DevStackをstack01に導入する。
次にコンピュートノード stack02/03の導入をする。
コンピュートノードの導入は、コントローラーノードの導入に依存するので、stack01の導入完了を待つのが安全である(エラーになっても、再実行すれば適当なところからやってくれるはずだから、という考え方もある)。
./stack02/setup.sh も同様に、構成情報の local.conf、extras.d/99-demo.sh を用意する。local.conf を見ると、起動させるサービスが、stack01用よりかなり少ないなど、中身がずいぶん違う。stack02はアベイラビリティゾーンaz1用なので、az1の情報しかない。
./stack03/setup.sh も同様に local.confとextras.d/99-demo.sh を用意する。local.conf を見ると、stack02用とほぼ同じだが、stack03はアベイラビリティゾーンaz2用なので、az2の情報しかない。
各々で、git://git.openstack.org/openstack-dev/devstack.git から持ってきた、stack.shを実行して、DevStackを導入する。stack02/03は互いに独立なので、同時に導入しても問題ない(と思う)。
3台へのDevStackの導入が終わったら、stack01で post-stack を実行して、環境を整える。
実行しすると、25行目の「neutron net-create Ext-Net --router:external=True」でエラーになった。
ubuntu@stack01:~/quick-devstack$ neutron net-create Ext-Net --router:external=True
usage: neutron net-create [-h] [-f {html,json,shell,table,value,yaml}]
[-c COLUMN] [--max-width <integer>]
[--prefix PREFIX] [--request-format {json,xml}]
[--tenant-id TENANT_ID] [--admin-state-down]
[--shared] [--router:external]
[--provider:network_type <network_type>]
[--provider:physical_network <physical_network_name>]
[--provider:segmentation_id <segmentation_id>]
NAME
neutron net-create: error: argument --router:external: ignored explicit argument u'True'
「--router:external」に明示的に「=True」がついているのが嫌らしい。junoのinstall-guideのneutronのところを見ると「--router:external True」と「=」が無い。
$ neutron net-create ext-net --router:external True \
--provider:physical_network external --provider:network_type flat
これで実行すると「Invalid values_specs True」とエラー。
ubuntu@stack01:~/quick-devstack$ neutron net-create Ext-Net --router:external True
Invalid values_specs True
havanaのガイドに「--」を指定する方法が書いてあったので、
# neutron net-create ext-net -- --router:external=True SPECIAL_OPTIONS
「--」をつけたところ成功。「router:external」も「True」になっている。
ubuntu@stack01:~/quick-devstack$ neutron net-create Ext-Net -- --router:external=True
Created a new network:
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | True |
| id | 339243b9-a885-4cf2-9652-b5ebdc5f33a9 |
| name | Ext-Net |
| provider:network_type | vxlan |
| provider:physical_network | |
| provider:segmentation_id | 1002 |
| router:external | True |
| shared | False |
| status | ACTIVE |
| subnets | |
| tenant_id | 66c635f0be9646e6856bfa8319a1bf1d |
+---------------------------+--------------------------------------+
それ以外は問題なし。gitしたスクリプトを単純に流すのもいいけれと、設定ファイルもあるので、gitはしておいて、スクリプトは1行づつコピペでコマンド、パラメーター、出力を確認しながら、実行するのがいいと思う。何をやっているか、少しは想像できるようになる。
2.4.6 DevStackのインストールと設定
この項は、ここまで作った環境の確認。「コマンド XXXX-list」を、nova、cinder、neutron に対して発行して、問題ないか確認する。
2.4.7 作業用端末とCentOS6イメージの準備
この本では「新人エンジニアがOpenStack上のクラウドにアプリケーション環境を構築する」というストーリー仕立てになっている。ホストLinuxは、このエンジニアのデスクトップ環境用に設定する。
当項のGitHubのディレクトリーは引き続きこちら。
https://github.com/josug-book1-materials/quick-devstack
install_cli.shでクライアントツールを導入し、再ログオンする。これでnovaとかに対するサブコマンドにTAB補完が利くようになる。
記載どおり、環境設定ファイルopenrcを用意し、sourceコマンドで読ませる。内容はこちらのサブセット。
今回は、novaのゲストOSにはCentOS6が使われる。ガイドに従い、CentOS6のイメージを作成し、Glanceにアップロードする。
KVMゲストのディスクを操作するlibguestfs-toolsとapache2を導入する。apache2は、CentOS6のイメージをGlanceにアップロードするときに、イメージを提供するhttpサーバーの役割を果たす。
sudo apt-get -y install libguestfs-tools apache2
CentOS6の導入とイメージ化はbuild_image.shを使う。使われるks設定はこちら。
「System halted.」が表示されたら[Ctrl]+[]]を押す。qcow2形式への変換が自動的に行われ、apache2で公開される。
「glance image-create」でインポートして「glance image-list」で「active」になっていることを確認する。
今回のサーバーは公開されているので、速やかにapache2を停止する。
root@test:~# service apache2 stop
* Stopping web server apache2
*
2.5 OpenStack用仮想マシンイメージの作成
ここは「2.4.7 作業用端末とCentOS6イメージの準備」とかでやった、イメージ作成の解説。特に、作業はない。
今回は、ベアメタルの環境を確認して、DevStackの環境を構築した。