Ubuntu 20.04 でLXD 4.0をインストールする


はじめに

Ubuntu 20.04 に LXD をインストールするためのメモ。
【注意点】 LXCのコンテナは、ホスト機と同一のネットワークに属するようにしている。

環境

$ hostnamectl status
   Static hostname: ---
         Icon name: computer-vm
           Chassis: vm
        Machine ID: ---
           Boot ID: ---
    Virtualization: microsoft
  Operating System: Ubuntu 20.04.4 LTS
            Kernel: Linux 5.4.0-110-generic
      Architecture: x86-64

インストール

001. パッケージリストとパッケージを更新

$ sudo apt update && sudo apt list --upgradable && sudo apt upgrade -y

002. LXDインストール

snapを利用して、LXDをインストールする。

$ sudo snap install lxd --channel=4.0/stable

003. LXD/LXCのバージョンを確認

lxd --version/lxc --versionコマンドを実行する。

$ lxd --version
4.0.9
$ lxc --version
4.0.9

004. ブリッジインターフェースを作成

「/etc/netplan/99_config.yaml」にブリッジインターフェースの以下設定を追加する。

$ sudo vim /etc/netplan/99_config.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: false
      dhcp6: false
  bridges:
    br0:
      interfaces: [eth0]
      dhcp4: false
      dhcp6: false
      addresses: [192.168.1.48/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]
      parameters:
        forward-delay: 0
        stp: false
      optional: true

005. ホスト機のリソース制限編集

以下設定を「limits.conf」の末尾に追記する。

$ sudo vim /etc/security/limits.conf
~~~
*               soft    nofile          1048576
*               hard    nofile          1048576
root            soft    nofile          1048576
root            hard    nofile          1048576
*               soft    memlock         unlimited
*               hard    memlock         unlimited

以下設定を「sysctl.conf」の末尾に追記する。

$ sudo vim /etc/sysctl.conf
~~~
fs.inotify.max_queued_events = 1048576
fs.inotify.max_user_instances = 1048576
fs.inotify.max_user_watches = 1048576
vm.max_map_count = 262144

006. 再起動

全ての設定を有効化するために、サーバを再起動する。

$ sudo reboot

007. LXDセットアップ

lxd initコマンドを実行し、セットアップする。
基本はデフォルト値で設定するがブリッジネットワークのみ、004で作成したインターフェイスを入力する。

$ sudo 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]: lxd-storage
Name of the storage backend to use (btrfs, dir, lvm, zfs, ceph) [default=zfs]: zfs
Create a new ZFS pool? (yes/no) [default=yes]: yes
Would you like to use an existing empty block device (e.g. a disk or partition)? (yes/no) [default=no]: no
Size in GB of the new loop device (1GB minimum) [default=12GB]: 12GB
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]: no
Would you like to configure LXD to use an existing bridge or host interface? (yes/no) [default=no]: yes
Name of the existing bridge or host interface: br0
Would you like the LXD server 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

操作方法

001. リモートのコンテナイメージを検索

lxc image list images: ディストリビューション名 バージョン アーキテクチャコマンドを実行する。

$ lxc image list images: ubuntu 20.04 amd64
+-------------------------------+--------------+--------+-------------------------------------+--------------+-----------------+----------+-------------------------------+
|             ALIAS             | FINGERPRINT  | PUBLIC |             DESCRIPTION             | ARCHITECTURE |      TYPE       |   SIZE   |          UPLOAD DATE          |
+-------------------------------+--------------+--------+-------------------------------------+--------------+-----------------+----------+-------------------------------+
| ubuntu/focal (7 more)         | 60a3405cf361 | yes    | Ubuntu focal amd64 (20220514_07:42) | x86_64       | CONTAINER       | 110.09MB | May 14, 2022 at 12:00am (UTC) |
+-------------------------------+--------------+--------+-------------------------------------+--------------+-----------------+----------+-------------------------------+
| ubuntu/focal (7 more)         | a29dfcbeae12 | yes    | Ubuntu focal amd64 (20220514_07:42) | x86_64       | VIRTUAL-MACHINE | 229.88MB | May 14, 2022 at 12:00am (UTC) |
+-------------------------------+--------------+--------+-------------------------------------+--------------+-----------------+----------+-------------------------------+
| ubuntu/focal/cloud (3 more)   | 1c573de33373 | yes    | Ubuntu focal amd64 (20220514_07:42) | x86_64       | CONTAINER       | 121.03MB | May 14, 2022 at 12:00am (UTC) |
+-------------------------------+--------------+--------+-------------------------------------+--------------+-----------------+----------+-------------------------------+
| ubuntu/focal/cloud (3 more)   | a0217cf5cccd | yes    | Ubuntu focal amd64 (20220514_07:42) | x86_64       | VIRTUAL-MACHINE | 246.50MB | May 14, 2022 at 12:00am (UTC) |
+-------------------------------+--------------+--------+-------------------------------------+--------------+-----------------+----------+-------------------------------+
| ubuntu/focal/desktop (3 more) | 3f99c1607cba | yes    | Ubuntu focal amd64 (20220514_08:49) | x86_64       | VIRTUAL-MACHINE | 989.20MB | May 14, 2022 at 12:00am (UTC) |
+-------------------------------+--------------+--------+-------------------------------------+--------------+-----------------+----------+-------------------------------+

002. リモートのコンテナイメージを取得

lxc image listコマンドを実行する。

$ lxc image list
To start your first container, try: lxc launch ubuntu:20.04
Or for a virtual machine: lxc launch ubuntu:20.04 --vm

+-------+-------------+--------+-------------+------+------+-------------+
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCH | SIZE | UPLOAD DATE |
+-------+-------------+--------+-------------+------+------+-------------+

003. ローカルのコンテナイメージ一覧を取得

lxc image listコマンドを実行する。

$ lxc image list
To start your first container, try: lxc launch ubuntu:20.04
Or for a virtual machine: lxc launch ubuntu:20.04 --vm

+-------+-------------+--------+-------------+------+------+-------------+
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCH | SIZE | UPLOAD DATE |
+-------+-------------+--------+-------------+------+------+-------------+

004. コンテナ作成

lxc launch images:イメージ名 コンテナ名を実行する。
以下では、Ubuntu 20.04 64bitのイメージを指定している。

$ lxc launch images:ubuntu/focal/amd64 container-01
Creating container-01
Starting container-01

【注意点】本作業環境では、仮想化にHyper-Vを利用している。コンテナ作成時にDHCPでIPアドレスが取得できない場合は、Hyper-Vマネージャーから該当VMのネットワークアダプターで「高度な機能」→「MACアドレスのスプーフィングを有効にする」にチェックする必要がある。

005. コンテナ一覧を取得

lxc listを実行する。

$ lxc list
+--------------+---------+----------------------+---------------------------------------------+-----------+-----------+
|     NAME     |  STATE  |         IPV4         |                    IPV6                     |   TYPE    | SNAPSHOTS |
+--------------+---------+----------------------+---------------------------------------------+-----------+-----------+
| container-01 | RUNNING | 192.168.1.145 (eth0) | 2001:ce8:100:f036:216:3eff:fe79:9355 (eth0) | CONTAINER | 0         |
+--------------+---------+----------------------+---------------------------------------------+-----------+-----------+

006. コンテナ停止

lxc stop コンテナ名で該当コンテナを停止する。

$ lxc stop container-01

lxc listコマンドで、コンテナ停止を確認

$ lxc list
+--------------+---------+------+------+-----------+-----------+
|     NAME     |  STATE  | IPV4 | IPV6 |   TYPE    | SNAPSHOTS |
+--------------+---------+------+------+-----------+-----------+
| container-01 | STOPPED |      |      | CONTAINER | 0         |
+--------------+---------+------+------+-----------+-----------+

007. コンテナ起動

lxc start コンテナ名で該当コンテナを起動

$ lxc start container-01

008. コンテナにログイン

lxc exec コンテナ名 bashコマンドを実行

$ lxc exec container-01 bash
root@container-01:~#

009. コンテナ削除

lxc delete コンテナ名コマンドを実行

$ lxc delete container-01

010. コンテナイメージの作成

$ lxc publish container-01 --alias original-image
Instance published with fingerprint: b11797522a8742b3b0caa587db0710441d56d201face9d105f7e5e9a89214234

作成したコンテナイメージを確認

$ lxc image list
+----------------+--------------+--------+-------------------------------------+--------------+-----------+----------+------------------------------+
|     ALIAS      | FINGERPRINT  | PUBLIC |             DESCRIPTION             | ARCHITECTURE |   TYPE    |   SIZE   |         UPLOAD DATE          |
+----------------+--------------+--------+-------------------------------------+--------------+-----------+----------+------------------------------+
| original-image | b11797522a87 | no     | Ubuntu focal amd64 (20220514_07:42) | x86_64       | CONTAINER | 146.73MB | May 14, 2022 at 3:25pm (UTC) |
+----------------+--------------+--------+-------------------------------------+--------------+-----------+----------+------------------------------+
|                | 60a3405cf361 | no     | Ubuntu focal amd64 (20220514_07:42) | x86_64       | CONTAINER | 110.09MB | May 14, 2022 at 3:14pm (UTC) |
+----------------+--------------+--------+-------------------------------------+--------------+-----------+----------+------------------------------+

参考サイト