LXD環境の構築手順(Snapパッケージ使用)

カテゴリ:コンテナ仮想化

LXDとは

LXDはLinux コンテナ(LXC)を管理するコンテナハイパーバイザーです。LXDはREST APIを介し、ネットワーク経由でコンテナに対するすべての操作を行います。

Note以降は CentOS 8 + LXD 4.4 環境での手順となります。

Snapとは

SnapはLinuxディストリビューションを問わず利用できるユニバーサルパッケージです。ディストリビューションによってパッケージ管理ツール(yum、dnf、aptなど)は異なりますが、Snapはすべてのディストリビューションにインストールが可能で、パッケージ管理をsnapコマンドに統一できます。

Snapのインストール

Snapをインストールするには、LXCと同様にEnterprise Linux(EPEL)リポジトリを追加します。

# yum -y install epel-release

Snapをインストールします。

# yum -y install snapd

メインスナップ通信ソケットを管理するsystemdユニットを有効にします。

# systemctl enable --now snapd.socket

/var/lib/snapd/snap へのシンボリックリンク /snap を作成します。

# ln -s /var/lib/snapd/snap /snap

一旦OSを再起動します。

# reboot

LXDのインストール

snapコマンドを使用してLXDをインストールします。

# snap install lxd

LXDの初期設定

以下のコマンドを実行してLXDの初期設定を行います。基本、すべてデフォルト値で問題ありません。

# lxd init

例)

# lxd init
Would you like to use LXD clustering? (yes/no) [default=no]: no
Do you want to configure a new storage pool? (yes/no) [default=yes]: yes
Name of the new storage pool [default=default]: strage
Name of the storage backend to use (ceph, btrfs, dir, lvm) [default=btrfs]: dir
Would you like to connect to a MAAS server? (yes/no) [default=no]: no
Would you like to create a new local network bridge? (yes/no) [default=yes]: yes
What should the new bridge be called? [default=lxdbr0]: lxdbr0
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: auto
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: none
Would you like LXD to be available over the network? (yes/no) [default=no]: no
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]: yes
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]: no

注意/var/snap/lxd/common/lxd/disks/default.img に既存のファイルシステム(btrfs)が含まれている状態で、ストレージプールをyesにするとエラーになります。
Error: Failed to create storage pool 'default': Failed to format sparse file: Failed to run: mkfs.btrfs /var/snap/lxd/common/lxd/disks/default.img -L default: /var/snap/lxd/common/lxd/disks/default.img appears to contain an existing filesystem (btrfs).
ERROR: use the -f option to force overwrite of /var/snap/lxd/common/lxd/disks/default.img

その場合は、ヒントに記載されているように-fオプションを使用して、/var/snap/lxd/common/lxd/disks/default.imgを強制的に上書きします。もしくはストレージプール名をdefault以外にしましょう。

注意btrfsのストレージプールの作成に失敗する場合は、dir を指定してみましょう。
Name of the storage backend to use (btrfs, dir, lvm) [default=btrfs]: dir

LXD初期設定後の確認

lxc storage list コマンドでストレージプールが作成されていることを確認します。
# lxc storage list
+--------+-------------+--------+-----------------------------------------------+---------+
|  NAME  | DESCRIPTION | DRIVER |                    SOURCE                     | USED BY |
+--------+-------------+--------+-----------------------------------------------+---------+
| strage |             | dir    | /var/snap/lxd/common/lxd/storage-pools/strage | 1       |
+--------+-------------+--------+-----------------------------------------------+---------+

ブリッジインターフェースlxdbr0が作成されていることを確認します。

# ip addr
...
5: lxdbr0:  mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 00:16:3e:45:a3:09 brd ff:ff:ff:ff:ff:ff
    inet 10.231.170.1/24 scope global lxdbr0
       valid_lft forever preferred_lft forever
    inet6 fd42:3d0d:672a:e80c::1/64 scope global
       valid_lft forever preferred_lft forever
...

コンテナの作成

LXCコンテナのインスタンスを作成するには lxc launch コマンドに続けて、対象のイメージサーバーイメージ名インスタンス名を指定します。

使用法:lxc launch イメージサーバー:イメージ名 インスタンス名

つまり、先にイメージサーバーとイメージ名を調べる必要があります。

イメージサーバーの確認

イメージサーバーは lxc remote list コマンドで確認できます。

# lxc remote list

例)

# lxc remote list
If this is your first time running LXD on this machine, you should also run: lxd init
To start your first instance, try: lxc launch ubuntu:18.04

+-----------------+------------------------------------------+---------------+-------------+--------+--------+
|      NAME       |                   URL                    |   PROTOCOL    |  AUTH TYPE  | PUBLIC | STATIC |
+-----------------+------------------------------------------+---------------+-------------+--------+--------+
| images          | https://images.linuxcontainers.org       | simplestreams | none        | YES    | NO     |
+-----------------+------------------------------------------+---------------+-------------+--------+--------+
| local (default) | unix://                                  | lxd           | file access | NO     | YES    |
+-----------------+------------------------------------------+---------------+-------------+--------+--------+
| ubuntu          | https://cloud-images.ubuntu.com/releases | simplestreams | none        | YES    | YES    |
+-----------------+------------------------------------------+---------------+-------------+--------+--------+
| ubuntu-daily    | https://cloud-images.ubuntu.com/daily    | simplestreams | none        | YES    | YES    |
+-----------------+------------------------------------------+---------------+-------------+--------+--------+

イメージサーバー上のイメージリストを確認

イメージサーバー上のイメージリストは、lxc image list コマンドの後にイメージサーバーを指定して実行することで確認が可能です。

使用法:lxc image list イメージサーバー:

例)imagesイメージサーバー上のCentOS 8のイメージのリストを表示

# lxc image list images:centos/8
+----------------------------------+--------------+--------+------------------------------------------+--------------+-----------------+----------+-------------------------------+
|              ALIAS               | FINGERPRINT  | PUBLIC |               DESCRIPTION                | ARCHITECTURE |      TYPE       |   SIZE   |          UPLOAD DATE          |
+----------------------------------+--------------+--------+------------------------------------------+--------------+-----------------+----------+-------------------------------+
| centos/8 (3 more)                | a7bb2d8f644f | yes    | Centos 8 amd64 (20200825_07:08)          | x86_64       | VIRTUAL-MACHINE | 507.06MB | Aug 25, 2020 at 12:00am (UTC) |
+----------------------------------+--------------+--------+------------------------------------------+--------------+-----------------+----------+-------------------------------+
| centos/8 (3 more)                | d6f1ddce4258 | yes    | Centos 8 amd64 (20200825_07:08)          | x86_64       | CONTAINER       | 125.16MB | Aug 25, 2020 at 12:00am (UTC) |
+----------------------------------+--------------+--------+------------------------------------------+--------------+-----------------+----------+-------------------------------+
| centos/8-Stream (3 more)         | 64de677aa2e8 | yes    | Centos 8-Stream amd64 (20200825_07:08)   | x86_64       | VIRTUAL-MACHINE | 511.38MB | Aug 25, 2020 at 12:00am (UTC) |
+----------------------------------+--------------+--------+------------------------------------------+--------------+-----------------+----------+-------------------------------+
| centos/8-Stream (3 more)         | aa0e2f0c66d1 | yes    | Centos 8-Stream amd64 (20200825_07:08)   | x86_64       | CONTAINER       | 127.55MB | Aug 25, 2020 at 12:00am (UTC) |
+----------------------------------+--------------+--------+------------------------------------------+--------------+-----------------+----------+-------------------------------+
| centos/8-Stream/arm64 (1 more)   | 783fab8a04db | yes    | Centos 8-Stream arm64 (20200825_07:08)   | aarch64      | CONTAINER       | 123.95MB | Aug 25, 2020 at 12:00am (UTC) |
+----------------------------------+--------------+--------+------------------------------------------+--------------+-----------------+----------+-------------------------------+
| centos/8-Stream/cloud (1 more)   | 9458b643d2b4 | yes    | Centos 8-Stream amd64 (20200825_07:08)   | x86_64       | CONTAINER       | 142.43MB | Aug 25, 2020 at 12:00am (UTC) |
+----------------------------------+--------------+--------+------------------------------------------+--------------+-----------------+----------+-------------------------------+
| centos/8-Stream/cloud (1 more)   | ddc4576cf7b8 | yes    | Centos 8-Stream amd64 (20200825_07:08)   | x86_64       | VIRTUAL-MACHINE | 500.38MB | Aug 25, 2020 at 12:00am (UTC) |
+----------------------------------+--------------+--------+------------------------------------------+--------------+-----------------+----------+-------------------------------+
| centos/8-Stream/cloud/arm64      | 3f03d07995b6 | yes    | Centos 8-Stream arm64 (20200825_07:08)   | aarch64      | CONTAINER       | 138.49MB | Aug 25, 2020 at 12:00am (UTC) |
+----------------------------------+--------------+--------+------------------------------------------+--------------+-----------------+----------+-------------------------------+
| centos/8-Stream/cloud/ppc64el    | e86adaeeb7ea | yes    | Centos 8-Stream ppc64el (20200825_07:08) | ppc64le      | CONTAINER       | 146.85MB | Aug 25, 2020 at 12:00am (UTC) |
+----------------------------------+--------------+--------+------------------------------------------+--------------+-----------------+----------+-------------------------------+
| centos/8-Stream/ppc64el (1 more) | 647071e194ba | yes    | Centos 8-Stream ppc64el (20200825_07:08) | ppc64le      | CONTAINER       | 131.63MB | Aug 25, 2020 at 12:00am (UTC) |
+----------------------------------+--------------+--------+------------------------------------------+--------------+-----------------+----------+-------------------------------+
| centos/8/arm64 (1 more)          | ae1d3dcf059c | yes    | Centos 8 arm64 (20200825_07:08)          | aarch64      | CONTAINER       | 121.51MB | Aug 25, 2020 at 12:00am (UTC) |
+----------------------------------+--------------+--------+------------------------------------------+--------------+-----------------+----------+-------------------------------+
| centos/8/cloud (1 more)          | beb5e47b234f | yes    | Centos 8 amd64 (20200825_07:08)          | x86_64       | VIRTUAL-MACHINE | 496.06MB | Aug 25, 2020 at 12:00am (UTC) |
+----------------------------------+--------------+--------+------------------------------------------+--------------+-----------------+----------+-------------------------------+
| centos/8/cloud (1 more)          | f6d9407e26ce | yes    | Centos 8 amd64 (20200825_07:08)          | x86_64       | CONTAINER       | 140.10MB | Aug 25, 2020 at 12:00am (UTC) |
+----------------------------------+--------------+--------+------------------------------------------+--------------+-----------------+----------+-------------------------------+
| centos/8/cloud/arm64             | 7740a5640756 | yes    | Centos 8 arm64 (20200825_07:08)          | aarch64      | CONTAINER       | 136.09MB | Aug 25, 2020 at 12:00am (UTC) |
+----------------------------------+--------------+--------+------------------------------------------+--------------+-----------------+----------+-------------------------------+
| centos/8/cloud/ppc64el           | a3787c41bb45 | yes    | Centos 8 ppc64el (20200825_07:08)        | ppc64le      | CONTAINER       | 144.23MB | Aug 25, 2020 at 12:00am (UTC) |
+----------------------------------+--------------+--------+------------------------------------------+--------------+-----------------+----------+-------------------------------+
| centos/8/ppc64el (1 more)        | 32227d0cc2ef | yes    | Centos 8 ppc64el (20200825_07:08)        | ppc64le      | CONTAINER       | 129.06MB | Aug 25, 2020 at 12:00am (UTC) |
+----------------------------------+--------------+--------+------------------------------------------+--------------+-----------------+----------+-------------------------------+

コンテナのインスタンスを作成

imagesイメージサーバーのCentos 8 amd64コンテナを作成する場合は、以下のようになります。

例)

# lxc launch images:centos/8 centos8
Creating centos8
Starting centos8

注意以下のエラーが表示される場合、lxc storage list コマンドでストレージプールが作成されているかを確認しましょう。
Error: Failed instance creation: No storage pool found. Please create a new storage pool

インスタンスのリストを確認

インスタンスのリストを表示する場合は lxc list コマンドを実行します。

例)

# lxc list
+---------+---------+------+------+-----------+-----------+
|  NAME   |  STATE  | IPV4 | IPV6 |   TYPE    | SNAPSHOTS |
+---------+---------+------+------+-----------+-----------+
| centos8 | RUNNING |      |      | CONTAINER | 0         |
+---------+---------+------+------+-----------+-----------+

コンテナの操作

インスタンスの起動

インスタンスを起動する場合は、lxc start コマンドに続けてインスタンス名を指定します。

使用法:lxc start インスタンス名

例)

# lxc start centos8

インスタンスの停止

インスタンスを停止する場合は、lxc stop コマンドに続けてインスタンス名を指定します。

使用法:lxc stop インスタンス名

例)

# lxc stop centos8

コンテナのシェルに接続

コンテナのシェルに接続する場合は、lxc exec コマンドに続けてインスタンス名を指定します。オプションでシェイルを指定できます。

使用法:lxc exec インスタンス名 -- シェル

例)

# lxc exec centos8 -- /bin/bash

コンテナから抜ける

コンテナから抜ける場合は、コンテナのシェル上で exit を実行します。

公開日時:2020年08月30日 11:51:41
最終更新日時:2022年03月13日 08:34:14

なお、VPS選びで迷ったらこちらの記事で主要VPSのメモリ容量ごとの月額、年額料金を比較していますので、是非参考にしてみてください。

コンテナ仮想化に戻る

「コンテナ仮想化」に関する他の手順

このページのトップに戻る