このエントリーをはてなブックマークに追加

1.1. 独自イメージを作成するには?

OpenStackで利用する仮想マシンを作成するためのイメージを自分で作成する方法について記述します。

1.1.1. 作成方法について

様々な方法があるとは思いますがここでは以下の方法について述べます。
  1. ozによる作成
  2. yumによる作成
  3. ベンダー作成イメージを利用
  4. ozで作成されたイメージをダウンロードして利用

1.1.2. ozによるOSイメージ作成

oz-installは、Aeolusプロジェクトで利用されている仮想マシンで利用する為のOSイメージを自動的に作成するツールです。
Aeolusプロジェクトはプライベートクラウド(Eucalyptus,OpenStackなど)とパブリッククラウド(AWS,Rackspace)などを連携して利用するソフトウェアです。
oz install にoz-installのコマンドの利用方法が記述されています。
また、インストール方法及びOSの作成方法は以下のリンクを参照してください。
  1. ozの利用方法 Ubuntu13.04(oz)
  2. ozの利用方法 Ubuntu12.04(oz)
  3. ozの利用方法 CentOS6.2(oz)

1.1.3. yumによるOSのイメージ作成

yumを利用したOSイメージはAWSで利用するための独自OSイメージを作成する方法と同じです。
また、yumはUbuntuでも利用できるためスクリプトを作成した場合でも、どちらのディストリビューションでもほとんど変更を加えず利用可能です。
あと、Githubにも作成用スクリプトは、 hagistack に置いてますので作成する場合の参考にしてもらえればと思います。スクリプトはUbuntuでもCentOSでもどちらでも動くように作っています。
  1. yumによるOSイメージ作成(yumによるOSイメージ作成)

1.1.4. ベンダー作成イメージを利用

UbuntuとFedoraはOpenStackで利用できるイメージを配布してくれています。
OpenStack専用という訳ではありませんが感謝して利用させて頂きます。
ダウンロードして登録すればいいだけなので非常に楽です。
  1. ベンダー作成イメージを利用(ベンダー作成イメージの利用)

1.1.5. ozで作成されたイメージをダウンロードして利用

Githubにozで作成されたイメージへのダウンロード先が記述してありますので独自イメージを作成するのが面倒であれば利用しましょう。
セキュリティなどが気になる場合は利用せず自分で作成しましょう。
但し、RackSpace社によって作成されているイメージなので特に気にする必要はないと思います。
登録方法はファイル名が違うだけなのでUbuntu11.10だけ記述しています。
あと、ダウンロードは結構時間がかかります。
  1. ozで作成されたイメージをダウンロードして利用(ozで作成されたイメージをダウンロードして利用)

1.2. ブロックマイグレーションをするには?

いきなり注意点なのですが、libvirtdの設定とnova.confの設定が必須ですのでもしおこなっていない場合はGrizzlyのインストールの項目を参考に設定してください。
移行元から移行先へのvirshを叩ければ大体大丈夫でしょう。
sudo virsh -c qemu+tcp://stack02/system list な感じで表示されたら問題ないでしょう。
ブロックマイグレーションはKVMの機能でライブマイレーションの場合は共有ディスクが必要ですがこちらは必要ありません。
またそういったものを用意しなくてもいいのでお手軽です。
そのかわりネットワーク帯域を必要とします。
OpenStackでも利用できますのでインスタンスを別のサーバへ移動してみましょう。
ライブマイグレーションよりは時間がかかりますがもちろんインスタンスは停止されません。
あと、基盤はKVMで行いましたのでLXCなど他の場合ではどうなるかわかりません。

1.2.1. 事前の状態確認

コンピュートノードは二台で、片方でインスタンスが稼働している状態です。

stack01$ sudo nova-manage service list
Binary           Host                                 Zone             Status     State Updated_At
nova-cert        stack01                              internal         enabled    :-)   2013-03-23 10:41:06
nova-console     stack01                              internal         enabled    :-)   2013-03-23 10:41:06
nova-consoleauth stack01                              internal         enabled    :-)   2013-03-23 10:41:06
nova-scheduler   stack01                              internal         enabled    :-)   2013-03-23 10:41:06
nova-conductor   stack01                              internal         enabled    :-)   2013-03-23 10:41:06
nova-network     stack01                              internal         enabled    :-)   2013-03-23 10:41:06
nova-compute     stack01                              nova             enabled    :-)   2013-03-23 10:41:06
nova-compute     stack02                              nova             enabled    :-)   2013-03-23 10:41:04
nova-network     stack02                              internal         enabled    :-)   2013-03-23 10:41:06
stack01$ nova list
+--------------------------------------+---------+--------+----------------------------------------+
| ID                                   | Name    | Status | Networks                               |
+--------------------------------------+---------+--------+----------------------------------------+
| 9a1627a5-d66e-4ca1-9105-5c707b307e43 | tty_002 | ACTIVE | nova_network1=10.0.0.6, 192.168.10.113 |
+--------------------------------------+---------+--------+----------------------------------------+
stack01$ sudo virsh list
 Id    Name                           State
----------------------------------------------------
 3     instance-0000000d              running
stack02$ sudo virsh list
 Id    Name                           State
----------------------------------------------------
本来は、 sudo nova-manage vm list などでも確認出来るはずです。
なんかまだベータ(とはいえRC-1なのに)バグってましたので直ったらまた検証してみます。

1号機側ではインスタンスのカーネルやラムディスクが確認できます。

stack01$ sudo ls -l /var/lib/nova/instances/9a1627a5-d66e-4ca1-9105-5c707b307e43
total 14848
-rw------- 1 libvirt-qemu kvm         0 Mar 23 19:39 console.log
-rw-r--r-- 1 libvirt-qemu kvm  10813440 Mar 23 19:43 disk
-rw-r--r-- 1 libvirt-qemu kvm   4404752 Mar 23 19:39 kernel
-rw-r--r-- 1 nova         nova     1776 Mar 23 19:39 libvirt.xml
-rw-r--r-- 1 libvirt-qemu kvm     96629 Mar 23 19:39 ramdisk

2号機側にはなんにもありません。

stack@stack02:~$ sudo ls -l /var/lib/nova/instances/
total 4
drwxr-xr-x 2 nova nova 4096 Mar 23 17:58 _base

ブロックマイグレーションする前に2号機側のリソースを確認しておきます。

stack01$ sudo nova-manage service describe_resource stack02
2013-03-23 18:30:46.577 INFO nova.openstack.common.rpc.common [req-e11ae625-9d82-4d6a-a87c-950e9f0182da None None] Connected to AMQP server on stack01:5672
HOST                              PROJECT     cpu mem(mb)     hdd
stack02         (total)                         1    2003      69
stack02         (used_now)                      0     512       0
stack02         (used_max)                      0       0       0

リソースの空きが大丈夫なことを確認できたらブロックマイグレーションを実行します。

$ nova live-migration --block_migrate 9a1627a5-d66e-4ca1-9105-5c707b307e43 stack02

1号機側からインスタンスがなくなったことがわかります。

stack01$ sudo virsh list
 Id    Name                           State
----------------------------------------------------
そして2号機側に移動したことがわかります。
1号機側からでも確認できますのでちょっとやってみます。
stack01$ sudo virsh -c qemu+tcp://stack02/system list
 Id    Name                           State
----------------------------------------------------
 5     instance-0000000d              running

IDはvirtd側での管理ですので番号が変わってもOpenStackからは関係ありません。

1号機側からインスタンスのカーネルやラムディスクがなくなりました。

stack01$ sudo ls -l /var/lib/nova/instances/9a1627a5-d66e-4ca1-9105-5c707b307e43
ls: cannot access /var/lib/nova/instances/9a1627a5-d66e-4ca1-9105-5c707b307e43: No such file or directory

2号機側にカーネルやラムディスクが移動したことがわかります。

$ sudo ls -l /var/lib/nova/instances/9a1627a5-d66e-4ca1-9105-5c707b307e43
total 14848
-rw------- 1 libvirt-qemu kvm         0 Mar 23 19:50 console.log
-rw-r--r-- 1 libvirt-qemu kvm  10813440 Mar 23 19:56 disk
-rw-r--r-- 1 libvirt-qemu kvm   4404752 Mar 23 19:50 kernel
-rw-r--r-- 1 nova         nova     1776 Mar 23 19:50 libvirt.xml
-rw-r--r-- 1 libvirt-qemu kvm     96629 Mar 23 19:50 ramdisk
1号機のメンテナンスが終わったとして戻す場合はまた同じようにコマンドを実行します。
コマンドは最後のサーバが変わっただけです。
$ nova live-migration --block_migrate 9a1627a5-d66e-4ca1-9105-5c707b307e43 stack01

以上でブロックマイグレーションの説明は終わりです。

1.3. インスタンスを複数作成するには?

Horizonで勿論作成できます。
ただし複数インスタンスを作成すると名前に各インスタンス名-IDが付与された名前になります。
名前が鬱陶しい場合に使ったので備忘録として。
覚えれないレベルのスクリプトでもないですけど。
num=2
for i in $(seq 1 ${num:-1})
do
   nova boot --flavor 1 --image ttylinux tty_00$i --key_name mykey
done

1.4. インスタンスを一度に削除するには?

Horizonでもコマンドでも一つ一つ削除するしかありません。
必要のないインスタンスがいっぱいできた時に面倒だったのでこちらも備忘録。
for i in $(nova list | awk -F"|" '{print$2}' | \
           egrep -v "^$|ID" | sed "s/^ //"   | \
           sed 's/\r/ /' | perl -pe 's/\n/ /g')
do
  nova delete $i
done

1.5. KVMの代わりにLXCを利用するには?

Ubuntuで確認しています。
またLXCの場合の独自イメージの作成方法がわかってません。
なのでCanonicalで配布してくれているイメージを利用しています。
わかる方はぜひ教えてください。
ここではもともとKVMで利用していた場合を想定しています。

1.5.1. 必要なパッケージをインストール

nova-compute-kvmを利用していたものをnova-compute-lxcに変更します。
あとは、LXCをOS側で利用するためのパッケージが必要になりますのでインストールします。
$ sudo apt-get install nova-compute-lxc pm-is-supported lxctl

1.5.2. 設定

Cgroupの設定を行います。
設定後再起動が必要なります。
$ sudo mkdir /cgroup
$ echo "none /cgroup cgroup cpuacct,memory,devices,cpu,freezer,blkio   0 0" | sudo tee -a /etc/fstab
$ sudo reboot

1.5.3. Ubuntu13.04のイメージを登録

自分で作成したいところですがまだわかってませんのでCanonicalで配布しているUbuntu13.04を利用します。
他のバージョンも勿論ありますのでそちらが必要の場合は確認してみてください。
$ sudo mkdir -p /opt/virt/ubuntu13.04 ; cd /opt/virt/ubuntu13.04
$ sudo wget http://cloud-images.ubuntu.com/releases/13.04/beta-1/ubuntu-13.04-beta1-server-cloudimg-amd64.tar.gz
$ sudo tar zxvf ubuntu-13.04-beta1-server-cloudimg-amd64.tar.gz
$ glance image-create --name "Ubuntu13.04_LXC" --disk-format raw --container-format bare --is-public True --file raring-server-cloudimg-amd64.img

登録されたイメージを確認します。glance image-listでも問題ありません。

$ nova image-list
+--------------------------------------+-----------------+--------+--------+
| ID                                   | Name            | Status | Server |
+--------------------------------------+-----------------+--------+--------+
| de9e3f67-0645-4152-bcb8-21eb7763fa3f | Ubuntu13.04_LXC | ACTIVE |        |
+--------------------------------------+-----------------+--------+--------+

インスタンスを起動します。

$ nova boot --flavor 1 --image Ubuntu13.04_LXC ubuntu13.04_lxc --key_name mykey

稼働したインスタンスを確認します。

$ sudo virsh -c lxc:// list
 Id    Name                           State
----------------------------------------------------
 2538  instance-00000002              running

Novaのコマンドでも確認します。

$ nova list
+--------------------------------------+---------+--------+------------------------+
| ID                                   | Name    | Status | Networks               |
+--------------------------------------+---------+--------+------------------------+
| 9f3b1c18-64f6-47d3-9083-69f4897a3021 | lxc_001 | ACTIVE | nova_network1=10.0.0.2 |
+--------------------------------------+---------+--------+------------------------+

ログイン出来るか確認します。

$ ssh -i /home/stack/mykey ubuntu@10.0.0.2

1.5.4. Ubuntu12.04のイメージを登録

12.04の場合も同じですが一応記述しておきます。

$ sudo mkdir -p /opt/virt/ubuntu12.04 ; cd /opt/virt/ubuntu12.04
$ sudo wget http://cloud-images.ubuntu.com/releases/precise/release/ubuntu-12.04-server-cloudimg-amd64.tar.gz
$ sudo tar zxvf ubuntu-12.04-server-cloudimg-amd64.tar.gz
$ glance image-create --name "Ubuntu12.04_LXC" --disk-format raw --container-format bare --is-public True --file precise-server-cloudimg-amd64.img
$ nova boot --flavor 1 --image Ubuntu12.04_LXC ubuntu12.04_lxc --key_name mykey

1.6. ログを確認するには?

エラーログ及びシスログはnova-manageコマンドで確認することができます。

1.6.1. エラーログを確認する

nova.confのlog_dirからgrepしてどのコンポーネントから出力されたログかと行数が表示されます。
$ sudo nova-manage logs errros
Line 5 : 2013-03-26 00:41:08.861 22676 ERROR nova.manager [-] Error during FlatDHCPManager._disassociate_stale_fixed_ips: (OperationalError) (2006, 'MySQL server has gone away') 'SELECT fixed_ips.id AS fixed_ips_id \nFROM fixed_ips INNER JOIN networks ON networks. id = fixed_ips.network_id INNER JOIN instances ON instances.uuid = fixed_ips.instance_uuid \nWHERE fixed_ips.deleted = %s AND fixed_ips.allocated = %s AND fixed_ips.updated_at < %s AND (instances.host = %s AND networks.multi_host = %s OR networks.host = %s)' (0, 0, datetime.datetime(2013, 3, 25, 15, 31, 8, 858985), 'stack01', 1, 'stack01') /var/log/nova/nova-compute.log:-
Line 104 : 2013-03-26 00:42:22.197 22596 ERROR nova.openstack.common.rpc.common [-] AMQP server on stack01:5672 is unreachable: [Errno 101] ENETUNREACH. Trying again in 1 seconds.
Line 78 : 2013-03-26 00:41:21.808 22596 ERROR nova.servicegroup.drivers.db [-] Recovered model server connection!
Line 57 : 2013-03-26 00:41:11.757 22596 ERROR nova.servicegroup.drivers.db [-] model server went away
/var/log/nova/nova-conductor.log:-
Line 110 : 2013-03-26 00:41:11.753 ERROR nova.openstack.common.rpc.common [req-cbb1d47c-1e23-4f1a-a637-2a7764fe05ab None None] ['Traceback (most recent call last):\n', '  File "/usr/local/lib/python2.7/dist-packages/nova-2013.1.rc1-py2.7.egg/nova/openstack/common/rpc/amqp.py", line 430, in _process_data\n    rval = self.proxy.dispatch(ctxt, version,method, **args)\n', '  File "/usr/local/lib/python2.7/dist-packages/nova-2013.1.rc1-py2.

1.6.2. シスログを確認する

シスログをnovaでgrepして表示しています。

$ sudo nova-manage logs syslog
Mar 26 17:10:23 stack01 dnsmasq-dhcp[23760]: read /var/lib/nova/networks/nova-br100.conf
Mar 26 15:55:02 stack01 dnsmasq-dhcp[23760]: read /var/lib/nova/networks/nova-br100.conf
Mar 26 15:54:46 stack01 dnsmasq-dhcp[23760]: read /var/lib/nova/networks/nova-br100.conf
Mar 26 00:42:25 stack01 dnsmasq-dhcp[23760]: read /var/lib/nova/networks/nova-br100.conf
Mar 26 00:42:24 stack01 dnsmasq-dhcp[23760]: read /var/lib/nova/networks/nova-br100.conf

1.7. プロジェクトに関するサービス状態を確認するには?

1.7.1. プロジェクト全体のサービスを確認する

$ sudo nova-manage service list
Binary           Host                                 Zone             Status     State Updated_At
nova-conductor   stack01                              internal         enabled    :-)   2013-03-26 13:02:05
nova-consoleauth stack01                              internal         enabled    :-)   2013-03-26 13:02:05
nova-cert        stack01                              internal         enabled    :-)   2013-03-26 13:02:05
nova-console     stack01                              internal         enabled    :-)   2013-03-26 13:02:05
nova-scheduler   stack01                              internal         enabled    :-)   2013-03-26 13:02:05
nova-network     stack01                              internal         enabled    :-)   2013-03-26 13:02:05
nova-compute     stack01                              nova             enabled    :-)   2013-03-26 13:01:59
nova-compute     stack02                              nova             enabled    :-)   2013-03-26 13:01:59
nova-network     stack02                              internal         enabled    :-)   2013-03-26 13:02:05

1.7.2. ホストを指定してサービスを確認する

Binary           Host                                 Zone             Status     State Updated_At
nova-compute     stack02                              nova             enabled    :-)   2013-03-26 13:04:50
nova-network     stack02                              internal         enabled    :-)   2013-03-26 13:04:46

1.8. プロジェクト全体のホストを確認するには?

nova-manageコマンドで確認できます。

$ sudo nova-manage host list

host                            zone
stack01                         internal
stack02                         nova

1.9. コンピュートノードを確認するには?

コンピュートノードをすべて表示する場合はnovaコマンドを利用します。

$ nova hypervisor-list
+----+---------------------+
| ID | Hypervisor hostname |
+----+---------------------+
| 1  | stack01             |
| 2  | stack02             |
+----+---------------------+

1.10. コンピュートノードで稼働しているインスタンスを確認するには?

コンピュートノードで稼働しているインスタンスを確認することもできます。

$ nova hypervisor-servers stack01

+--------------------------------------+-------------------+---------------+---------------------+
| ID                                   | Name              | Hypervisor ID | Hypervisor Hostname |
+--------------------------------------+-------------------+---------------+---------------------+
| 6ecf7a01-a04a-4529-83a3-378c4250923c | instance-00000009 | 1             | stack01             |
+--------------------------------------+-------------------+---------------+---------------------+

1.11. インスタンスのログを確認するには?

インスタンスIDを確認してログを確認します。

+--------------------------------------+------+--------+------------------------+
| ID                                   | Name | Status | Networks               |
+--------------------------------------+------+--------+------------------------+
| 6ecf7a01-a04a-4529-83a3-378c4250923c | ddd  | ACTIVE | nova_network1=10.0.0.4 |
| 9b429edc-bb8e-444f-a31f-950308131bfb | ddd  | ACTIVE | nova_network1=10.0.0.3 |
+--------------------------------------+------+--------+------------------------+

確認したいインスタンスIDを指定してログを表示します。

$ nova console-log 6ecf7a01-a04a-4529-83a3-378c4250923c
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Linux version 2.6.3522virtual (buildd@yellow) (gcc version 4.4.5 (Ubuntu/Linaro 4.4.414ubuntu5) ) #35Ubuntu SMP Sat Oct 16 23:19:29 UTC 2010 (Ubuntu 2.6.3522.35virtual 2.6.35.4)

1.12. プロジェクト全体のコンピュートノードリソースを確認するには?

プロジェクト全体でどのくらいのリソースがあるか確認するには以下のコマンドを実行します。

$ nova hypervisor-stats
+----------------------+-------+
| Property             | Value |
+----------------------+-------+
| count                | 2     |
| vcpus_used           | 2     |
| local_gb_used        | 0     |
| memory_mb            | 4006  |
| current_workload     | 0     |
| vcpus                | 2     |
| running_vms          | 2     |
| free_disk_gb         | 138   |
| disk_available_least | 113   |
| local_gb             | 138   |
| free_ram_mb          | 1958  |
| memory_mb_used       | 2048  |
+----------------------+-------+

目次

前のトピックへ

1. OpenStackFAQ(Grizzly)

次のトピックへ

1. Openstackインストール手順(Diablo)

このページ