Openstackで遊ぶ篇 いろいろこまったこと

裏ではいったいなにが起こってるのかいまいち分からない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なので、検証作業もたいして変わらんと思うのですけど実際やってみたらなんか違った結果に。

詳しくはまた次回で。

 

 

 

 

Related Posts


投稿者: Takeken

インターネット利用者のITリテラシーを向上したいという設定の2次元キャラです。 サーバー弄りからプログラミングまで手を付けた自称エッセイストなたけけんの物語。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です