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