第521回ではLXD 3.
LXDにおけるコンテナストレージ
LXDはシステムコンテナである以上、
LXD 2.
この状況はLXD 2.lxd storage
」
これにより、
さらにはストレージプールを利用して、
さて、lxd init
」
$ sudo lxd init Do you want to configure a new storage pool? (yes/no) [default=yes]: => ストレージプール(コンテナの保存先)を作成するかどうか Name of the new storage pool [default=default]: => 作成するストレージプールの名前 Name of the storage backend to use (btrfs, dir, lvm) [default=btrfs]: => ストレージバックエンドの選択 速度・利便性の両方においてbtrfsを選ぶのが無難です ホストのファイルシステムがbtrfsである必要はありません Create a new BTRFS pool? (yes/no) [default=yes]: => btrfsのプールを作成するかどうか Would you like to use an existing block device? (yes/no) [default=no]: => 既存のブロックデバイスを利用するかどうか 利用しない場合はbtrfsでフォーマットしたイメージファイルを作成します Size in GB of the new loop device (1GB minimum) [default=15GB]: 5 => ストレージプールのサイズ
設定を変更しなければ
LXD 3.
- Dir
- Btrfs
- LVM
- ZFS
- CEPH
Dirはディレクトリツリーをそのままコンテナとして見せる方式です。古式ゆかしいchrootをLXD再現しているようなものです。どんなシステムでも確実に動くという強みはあるものの、
BtrfsとLVM、lxd init
」
Btrfsを選んでおくと、
分散型計算機向けのオブジェクトストレージシステムであるCephはLXD 2.
その他、
ちなみに今回の記事も、
ストレージプールの基本
さて実際にストレージプールを使ってみましょう。まずはlxd init
」
$ lxc storage list To start your first container, try: lxc launch ubuntu:18.04 +---------+-------------+--------+--------------------------------+---------+ | NAME | DESCRIPTION | DRIVER | SOURCE | USED BY | +---------+-------------+--------+--------------------------------+---------+ | default | | btrfs | /var/lib/lxd/disks/default.img | 1 | +---------+-------------+--------+--------------------------------+---------+
defaultプールが作られていることがわかります。btfsバックエンドでは、
$ sudo file /var/lib/lxd/disks/default.img /var/lib/lxd/disks/default.img: BTRFS Filesystem label "default", sectorsize 4096, nodesize 16384, leafsize 16384, UUID=32b2fda6-a184-436d-8a86-49e9c37aa250, 262144/4999999488 bytes used, 1 devices
さらにストレージプールごとの詳細情報を表示してみましょう。
$ lxc storage info default info: description: "" driver: btrfs name: default space used: 17.24MB total space: 5.00GB used by: profiles: - default
サイズのlxd init
」used_
」
「lxd init
」
$ lxc profile show default config: {} description: Default LXD profile devices: eth0: name: eth0 nictype: bridged parent: lxdbr0 type: nic root: path: / pool: default type: disk name: default used_by: []
defaultプロファイルを指定してコンテナを作ったとき、
実際にコンテナを作成・
$ lxc launch ubuntu:18.04 mihono Creating mihono Starting mihono
コンテナが作られた状態で、
$ lxc storage info default info: description: "" driver: btrfs name: default space used: 808.94MB total space: 5.00GB used by: containers: - mihono images: - c4681ac755d9f8e858bb278741a4a0f0a91580ff046caa6b434d8804cdfb51af profiles: - default
コンテナ本体だけでなく、
新規にストレージプールを作成する
今度は新規にストレージプールを作ってみましょう。
$ lxc storage create kofuki btrfs Storage pool kofuki created
コマンドのフォーマットはlxc storage create ストレージプール名 バックエンド名 設定
」
$ lxc storage list +---------+-------------+--------+--------------------------------+---------+ | NAME | DESCRIPTION | DRIVER | SOURCE | USED BY | +---------+-------------+--------+--------------------------------+---------+ | default | | btrfs | /var/lib/lxd/disks/default.img | 3 | +---------+-------------+--------+--------------------------------+---------+ | kofuki | | btrfs | /var/lib/lxd/disks/kofuki.img | 0 | +---------+-------------+--------+--------------------------------+---------+
defaultプールと異なり、
$ lxc storage info kofuki info: description: "" driver: btrfs name: kofuki space used: 17.43MB total space: 15.00GB used by: {}
ちなみにイメージファイルの場合、
もうひとつ既定の値以外の設定を使って、
たとえばsourceを指定しなかった場合は、
$ lxc storage create chie btrfs source=/dev/sdb1 Storage pool chie created $ lxc storage info chie info: description: "" driver: btrfs name: chie space used: 17.43MB total space: 21.47GB used by: {} $ lsblk /dev/sdb1 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb1 8:17 0 20G 0 part /var/lib/lxd/storage-pools/chie
新しく作成したストレージプールが/dev/lxc storage set プール名 キー 値
」
作成したストレージプールを指定してコンテナを起動する
新しく作成したストレージプールを指定してコンテナを作成してみましょう。ストレージプールを明示的に指定するにはlxc init
」lxc launch
」--storage
」-s
」)を利用します。
$ lxc launch ubuntu:18.04 kiyoka --storage kofuki Creating kiyoka Starting kiyoka
新しいコンテナをdefaultプールではなくkofukiプールに作成した結果、
$ lxc storage info kofuki info: description: "" driver: btrfs name: kofuki space used: 810.18MB total space: 15.00GB used by: containers: - kiyoka images: - c4681ac755d9f8e858bb278741a4a0f0a91580ff046caa6b434d8804cdfb51af
もう一つ注意すべきポイントは、
LXDではリモートからコンテナイメージを取得した上で、
しかしながら、
新規にストレージボリュームを作成する
新しいLXDのストレージ関連のもう一つの新機能が、
ストレージプール上に任意の数のボリュームを作成し、
まずはストレージボリュームを作成してみましょう。
$ lxc storage volume create chie miruya Storage volume miruya created $ lxc storage volume list chie +--------+--------+-------------+---------+ | TYPE | NAME | DESCRIPTION | USED BY | +--------+--------+-------------+---------+ | custom | miruya | | 0 | +--------+--------+-------------+---------+ $ lxc storage volume show chie miruya config: {} description: "" name: miruya type: custom used_by: [] location: none
ボリュームの最大容量はプールの容量に依存します。ただしlxc storage volume set ボリューム名 size 値
」
特定のコンテナにボリュームをアタッチするにはlxc storage volume attach プール名 ボリューム名 コンテナ名 コンテナ上のパス
」
$ lxc storage volume attach chie miruya kiyoka /opt/data/akabane $ lxc exec kiyoka mount | grep akabane /dev/sdb1 on /opt/data/akabane type btrfs (rw,relatime,space_cache,user_subvol_rm_allowed,subvolid=261,subvol=/custom/miruya)
chieプールはブロックタイプ
ストレージボリュームの利点は、
$ lxc storage volume attach chie miruya mihono /opt/data/akabane
この時点でボリュームには何もないため、
$ lxc exec kiyoka ls /opt/data/akabane $ lxc exec kiyoka cat /opt/data/akabane/pudding cat: /opt/data/akabane/pudding: No such file or directory
ここで別のmihonoコンテナからファイルを書いてみましょう。
$ lxc exec mihono -- sh -c 'echo "tabeta" > /opt/data/akabane/pudding' $ lxc exec kiyoka cat /opt/data/akabane/pudding tabeta
上記のように即座にkiyokコンテナにもその結果が反映されましたね。
ちなみにmihonoコンテナはdefaultプールに、
また、
$ lxc storage volume detach chie miruya mihono
ボリュームのコピーや移動
ボリュームはプール間のコピーや移動が可能です。
$ lxc storage volume copy chie/miruya kofuki/miruya Storage volume copied successfully! $ lxc storage volume list kofuki +-----------+------------------------------------------------------------------+-------------+---------+ | TYPE | NAME | DESCRIPTION | USED BY | +-----------+------------------------------------------------------------------+-------------+---------+ | container | kiyoka | | 1 | +-----------+------------------------------------------------------------------+-------------+---------+ | custom | miruya | | 2 | +-----------+------------------------------------------------------------------+-------------+---------+ | image | c4681ac755d9f8e858bb278741a4a0f0a91580ff046caa6b434d8804cdfb51af | | 1 | +-----------+------------------------------------------------------------------+-------------+---------+
もちろん別名にも変更できますし、
$ lxc storage volume move chie/miruya default/2m Error: Volume is still in use by running containers
上記のように、