続・このOpenStackなんか変だよぉ…

概要

やっとcinder周りのコマンドを打って操作をすることが出来るようになった契約先の会社のOpenStackですが、再起動するとvolumeの作成が上手くいかなくなります。

担当者に聞いてみるとどうやら以下のような構成だったようです。

  • /dev/loop9に/etc/ictsc/ictsc.imgを割り当てたloopback deviceをlvmで使用する。
    ↓環境が壊れる以前のログ↓
root@vm1 user(keystone)# sudo pvdisplay
  --- Physical volume ---
  PV Name               /dev/loop9
  VG Name               cinder-volumes
  PV Size               3.00 GiB / not usable 4.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              767
  Free PE               767
  Allocated PE          0
  PV UUID               kqtzcD-lv5f-CW2p-3vae-CK5I-JWWw-t7CLbL
root@vm1 user(keystone)# sudo vgdisplay
  --- Volume group ---
  VG Name               cinder-volumes
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <3.00 GiB
  PE Size               4.00 MiB
  Total PE              767
  Alloc PE / Size       0 / 0
  Free  PE / Size       767 / <3.00 GiB
  VG UUID               f8umFx-eMqy-uR0b-yR7m-4DSx-GhCv-t4F5uz

この再起動後にvolumeの作成がうまくいかなくなる状態を改善するよう依頼された。

前提条件

  • OpenStackの再構築禁止
  • OpenStackのソースコードの変更禁止
  • OpenStack周辺の各種バイナリの置き換え禁止
  • openstackコマンドを使用する場合は以下の手順で環境変数を読み込むこと
user@vm1:~$ sudo su --
root@vm1:/home/user# source keystonerc
root@vm1 user(keystone)#
  • 永続化をすること(再起動しても上記のloopback deviceに対してファイルが保存されるようにすること)

初期状態

  • 再起動後、以下のように作成するとStatusがerrorになっている
    ※ 問題は再起動直後の状態になっています。
root@vm1 user(keystone)# openstack volume create --size 1 test1
+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| attachments         | []                                   |
| availability_zone   | nova                                 |
| bootable            | false                                |
| consistencygroup_id | None                                 |
| created_at          | 2021-03-06T17:34:12.000000           |
| description         | None                                 |
| encrypted           | False                                |
| id                  | 868dbf1c-3587-4823-8ce6-543174930833 |
| migration_status    | None                                 |
| multiattach         | False                                |
| name                | test1                                |
| properties          |                                      |
| replication_status  | None                                 |
| size                | 1                                    |
| snapshot_id         | None                                 |
| source_volid        | None                                 |
| status              | creating                             |
| type                | __DEFAULT__                          |
| updated_at          | None                                 |
| user_id             | 36c3e8d7b909429f966f0b3cbd989b65     |
+---------------------+--------------------------------------+
root@vm1 user(keystone)# openstack volume list
+--------------------------------------+-------+-----------+------+-------------+
| ID                                   | Name  | Status    | Size | Attached to |
+--------------------------------------+-------+-----------+------+-------------+
| 868dbf1c-3587-4823-8ce6-543174930833 | test1 | error     |    1 |             |
+--------------------------------------+-------+-----------+------+-------------+

終了状態

  • 以下のコマンドを打って、Statusがavailableなvolumeが作成できること
root@vm1 user(keystone)# openstack volume create --size 1 volume
root@vm1 user(keystone)# openstack volume list
+--------------------------------------+--------+-----------+------+-------------+
| ID                                   | Name   | Status    | Size | Attached to |
+--------------------------------------+--------+-----------+------+-------------+
| f3a78b88-d15e-4964-abfc-6b4beedcd8e2 | volume | available |    1 |             |
+--------------------------------------+--------+-----------+------+-------------+
  • 再起動してもloopback deviceが使用されていること(永続化必須)

接続情報

VM名ホスト名ユーザパスワード
vm1192.168.9.1userictsc2020

解説

この問題では、LVM(loopback device)を用いたCinderが動いている環境が再起動した際に、loop deviceの設定が外れることでCinderでのVolumeの「追加・変更・削除」が出来なくなってしまう。
よって、起動時に毎回自動的にloop deviceの設定がされるようになれば問題解決となる。

想定解

/etc/rc.locallosetup を起動時に行うように書きます。

root@vm1 user(keystone)# cat /etc/rc.local
#!/bin/bash
losetup /dev/loop9 /etc/ictsc/ictsc.img
root@vm1 user(keystone)# ls -la /etc/rc.local
-rwx------ 1 root root 53 Mar  4 23:25 /etc/rc.local

これで、永続化は完了しました。

その他解法

  • crontab
  • systemd
    などを用いて永続化している解答がありました。
    こちらも問題なく永続化出来ていることが確認できました。
    基本的には起動時に自動でloop deviceの設定が出来ていて、問題なくvolumeの「追加・変更・削除」が出来れば問題ありません。

採点基準

永続化が出来ている(再起動してもopenstack volume create とかが正常に行える) 100%