裏ではいったいなにが起こってるのかいまいち分からないOpenstack。うまく動かないことも多々あります。いまだに突然エラーになってずっとメーターが回ってたりもしてます(笑) とりあえず困ったことを何点か書いておこうかなあと。
cinderでボリューム作成ができない。
一番つまったとこだけど、内容は基本的なことでした。まずはファイルシステムはlvmで作っていて、cinderのインストールじたいはできているものとして話を進めますと、エラーになっていた原因はmountされている物理ボリュームしかなかったことでした。論理ボリュームがあればいいと勘違いしてたのが原因。
解決策としては、イメージディスクからLinuxを起動してシェルに入って空き容量を作って、lvmの物理ボリュームを1個作る方法と、OSをインストールするときに空の物理ボリュームを作っておく方法。後者の方が断然簡単です。
後者の方をさらっと説明すると、空の物理ボリュームを作っておいて、起動後にvgcreateでcinder-volumesっていう物理ボリュームを作ればそれでOKです。
うちの環境がどんな感じかというと
[root@take ~]# vgdisplay
--- Volume group ---
VG Name cinder-volumes
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size 232.63 GiB
PE Size 4.00 MiB
Total PE 59554
Alloc PE / Size 256 / 1.00 GiB
Free PE / Size 59298 / 231.63 GiB
VG UUID EGcDro-fsZC-xUpm-CGts-Acel-Pvoy-smgIz1
--- Volume group ---
VG Name vg_take
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 232.63 GiB
PE Size 4.00 MiB
Total PE 59554
Alloc PE / Size 59554 / 232.63 GiB
Free PE / Size 0 / 0
VG UUID l8MuDs-rME0-QlPn-AU04-FmRc-wZdv-H5i3k6
こんな感じになってます。
ボリュームの削除ができなくなた。
インスタンスからボリュームの削除をしたら、ずーーっとDeleteになっていて困ったことがありました。端末上でcinder listでIDを調べて、cinder deleteでも消せないなあと確認してから
[root@take ~]# cinder force-delete e0c7a730-b638-48cb-94f5-eb6975deb7f0
でOKです。強制削除なので注意。
ボリュームの削除だけでなく、たまーに、Horizonのメーターが回りっぱなしになったりしますが、そん時はもうコマンドラインから何かとやらないといけない感じですな。
まえは作成済みのインスタンスが動かなくなって、virshのコマンドの結果はshutdownで、novaのコマンド結果はrebootと一致していなくて、horizon上ではずーっとreboot中のメーターが動いてることがあったけど、そん時はスケジューラーのエラーがずっと出ている状態だったので、仕方ないのでインスタンスごと削除しちゃいました。
解決できなかったのが残念。次はやっつける!
インストールにつかうqcow2システムを作りたい。
参考サイトでCentOSとFedoraのダウンロードができますが、やっぱり自分でも作りたいですよね。
まずはWgetでイメージをダウンロードする。
[root@take ~]# wget ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/i386/ISO-IMAGES/9.2/FreeBSD-9.2-RELEASE-i386-dvd1.iso
仮想の領域を作成します。
qemu-img create -f qcow2 freebsd9.qcow2 8G
CentOSの場合はコマンドにパスが通ってないのでフルパスで指定する必要がありました。
/usr/libexec/qemu-kvm -hda freebsd9.qcow2 -cdrom FreeBSD-9.2-RELEASE-i386-dvd1.iso -boot d -m 512 -vnc :1
VNC番号は0で5900がデフォルトだったと思います。複数作るときは5900以降のポートはいくつか開けときましょう。Openstackで何が便利って一気に複数のインスタンスが作れるってとこかな。
んで、このインストール作業のプロセスをデーモンとして動かすオプションもありますが、上の場合はつけてないので実行するとプロンプトは帰ってこないので注意。逆にデーモンで動かしててインストールがおかしくなってしまったらKILLしかないのでそっちも注意。
話を戻すと、上のコマンドを実行してからVNCソフトを使ってアクセスしたらインストール画面が出てきます。あとはいつもと同じようにインストールをやります。完了したらイメージを管理しているglanceでインストール用のイメージとして取り込みします。
でふぉだと/opt/virtだと思うのでそっちにコピー。
mkdir -p /opt/virt/freebsd ; cd /opt/virt/freebsd
cp -a /root/freebsd9.qcow2 /opt/virt/freebsd/
glanceで取り込む。
glance image-create --name="freebsd01" --is-public=true --disk-format=qcow2 --container-format=ovf < freebsd9.qcow2
+------------------+--------------------------------------+
| Property | Value |
+------------------+--------------------------------------+
| checksum | 9090d5585c7cdb12d3361746e75a29be |
| container_format | ovf |
| created_at | 2013-12-15T11:14:40 |
| deleted | False |
| deleted_at | None |
| disk_format | qcow2 |
| id | 33c28732-f7bf-45fc-8b9b-d2dea51885c6 |
| is_public | True |
| min_disk | 0 |
| min_ram | 0 |
| name | freebsd01 |
| owner | 059b553a542a48df957a4bc41258fd25 |
| protected | False |
| size | 1417871360 |
| status | active |
| updated_at | 2013-12-15T11:15:09 |
+------------------+--------------------------------------+
これでインスタンス作成時に選択できるようになる。のですが、glanceで取り込んだときに名前が変わっているので、このまま起動するとmount失敗します。
Mounting from ufs:/dev/ada0p2 failed with error 19.
Loader variables:
vfs.root.mountfrom=ufs:/dev/ada0p2
vfs.root.mountfrom.options=rw
Manual root filesystem specification:
<fstype>:<device> [options]
Mount <device> using filesystem <fstype>
and with the specified (optional) option list.
eg. ufs:/dev/da0s1a
zfs:tank
cd9660:/dev/acd0 ro
(which is equivalent to: mount -t cd9660 -o ro /dev/acd0 /)
? List valid disk boot devices
. Yield 1 second (for background tasks)
<empty line> Abort manual input
mountroot>
んでもってここで?を打つと、名前が変わったあとのディスク名が分かるのでそいつをmountします。
うちの環境の場合はこうでした。
mountroot>
List of GEOM managed disk devices:
gptid/708e0058-656e-11e3-9e07-525400123456
gptid/708d6be0-656e-11e3-9e07-525400123456 ufsid/52ad7ba0693fe823
gptid/708d0974-656e-11e3-9e07-525400123456 vtbd0p3 vtbd0p2 vtbd0p1 vtbd0
んで起動します。
mountroot> ufs:vtbd0p2
mountroot> Trying to mount root from
ネットワークも変わってるので
vi /etc/rc.conf
ifconfig_re0 これを
ifconfig_vtnet0="DHCP" こうする
んで/etc/netstartするとDHCPで割り当ててくれます。OSのインストール時にDHCPを有効にするのをお忘れなく。
VNCはしんどいおーって人はSSHを開こう。っていうか開くのがいい。
vi /etc/ssh/sshd_config
Port 22
Protocol 2
PermitRootLogin no
PasswordAuthentication yes
PermitEmptyPasswords no
これでOpenstackのホストからつながると思います。
とりあえず今のとこはこれくらいですな。
Openstackといえど、この辺はLinux+KVMなので、検証作業もたいして変わらんと思うのですけど実際やってみたらなんか違った結果に。
詳しくはまた次回で。