Ubuntu 18.04 - LXD 3.0をインストールする

参考サイト


作業環境


詳細

SHELL> hostnamectl status
   Static hostname: lxd.ie-server.info
         Icon name: computer-vm
           Chassis: vm
~
    Virtualization: kvm
  Operating System: Ubuntu 18.04.1 LTS
            Kernel: Linux 4.15.0-32-generic
      Architecture: x86-64

事前準備


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

SHELL> sudo apt update && sudo apt list --upgradable && sudo apt upgrade -y

再起動

SHELL> sudo reboot

LXDインストール


aptを使い、LXD構築に必要なパッケージをインストール

SHELL> sudo apt install -y lxd lxd-client zfsutils-linux bridge-utils criu

フューチャーブランチを利用する場合は、下記コマンドでインストール

SHELL> sudo apt install -t xenial-backports lxd lxd-client zfsutils-linux bridge-utils criu

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

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

SHELL> lxd --version
3.0.1
SHELL> lxc --version
3.0.1

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


「/etc/network/interfaces」にブリッジインターフェースの以下設定を追加

SHELL> sudo vim /etc/network/interfaces

追記する内容

source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
  address 0.0.0.0

auto br0
iface br0 inet static
  address 172.16.2.100
  netmask 255.240.0.0
  network 172.16.0.0
  broadcast 172.31.255.255
  gateway 172.16.0.1
  dns-nameservers 8.8.8.8 8.8.4.4
  bridge_ports eth0
  bridge_stp off
  bridge_fd 0
  bridge_maxwait 0

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

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

SHELL> 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」の末尾に追記

SHELL> 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

再起動

SHELL> sudo reboot

LXDセットアップ


セットアップ

lxd initコマンドを実行

SHELL> 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]: pool-01
Name of the storage backend to use (dir, zfs) [default=zfs]: zfs
Create a new ZFS pool? (yes/no) [default=yes]: yes
Would you like to use an existing block device? (yes/no) [default=no]: no
Size in GB of the new loop device (1GB minimum) [default=18GB]: 18
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]: yes
Address to bind LXD to (not including port) [default=all]: all
Port to bind LXD to [default=8443]: 8443
Trust password for new clients:
Again:
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

上記のような入力が面倒な場合は、下記コマンドでもセットアップ可能

※「************」の箇所は、適時パスワードに変更する

SHELL>  cat <<EOF | sudo lxd init
no
yes
lxd-storage-pool01
zfs
yes
no
18
no
yes
lxdbr0
auto
none
yes
all
8443
************
************
yes
no
EOF

コンテナイメージ取得


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

lxc image listコマンドを実行 はじめは、コンテナイメージは表示されないはず

SHELL> sudo lxc image list
+-------+-------------+--------+-------------+------+------+-------------+
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCH | SIZE | UPLOAD DATE |
+-------+-------------+--------+-------------+------+------+-------------+

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

lxc image list images: ディストリビューション名コマンドを実行 (下記では、リモートのCentOSを検索した)

SHELL> sudo lxc image list images: centos
+------------------------+--------------+--------+---------------------------------+--------+---------+-------------------------------+
|         ALIAS          | FINGERPRINT  | PUBLIC |           DESCRIPTION           |  ARCH  |  SIZE   |          UPLOAD DATE          |
+------------------------+--------------+--------+---------------------------------+--------+---------+-------------------------------+
| centos/6 (3 more)      | d183363eeba1 | yes    | Centos 6 amd64 (20180820_02:16) | x86_64 | 75.55MB | Aug 20, 2018 at 12:00am (UTC) |
+------------------------+--------------+--------+---------------------------------+--------+---------+-------------------------------+
| centos/6/i386 (1 more) | a089525a7a67 | yes    | Centos 6 i386 (20180820_02:16)  | i686   | 75.79MB | Aug 20, 2018 at 12:00am (UTC) |
+------------------------+--------------+--------+---------------------------------+--------+---------+-------------------------------+
| centos/7 (3 more)      | 2718b6765dda | yes    | Centos 7 amd64 (20180820_02:16) | x86_64 | 83.43MB | Aug 20, 2018 at 12:00am (UTC) |
+------------------------+--------------+--------+---------------------------------+--------+---------+-------------------------------+

コンテナ作成・一覧取得


コンテナ作成

lxc launch images:イメージ名 コンテナ名を実行 以下では、CentOS7 64bitのイメージを選択してvm01を作成する場合 ※初回はリモートからコンテナイメージを取得するのに時間がかかる

SHELL> sudo lxc launch images:centos/7/amd64 vm01
Creating vm01
Starting vm01

コンテナ一覧を取得

lxc listを実行

SHELL> sudo lxc list
+------+---------+-----------------------+------+------------+-----------+
| NAME |  STATE  |         IPV4          | IPV6 |    TYPE    | SNAPSHOTS |
+------+---------+-----------------------+------+------------+-----------+
| vm01 | RUNNING | 10.162.182.150 (eth0) |      | PERSISTENT | 0         |
+------+---------+-----------------------+------+------------+-----------+

コンテナ操作


コンテナ停止

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

SHELL> sudo lxc stop vm01

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

SHELL> sudo lxc list
+------+---------+------+------+------------+-----------+
| NAME |  STATE  | IPV4 | IPV6 |    TYPE    | SNAPSHOTS |
+------+---------+------+------+------------+-----------+
| vm01 | STOPPED |      |      | PERSISTENT | 0         |
+------+---------+------+------+------------+-----------+

コンテナ起動

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

SHELL> sudo lxc start vm01

コンテナにログイン

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

SHELL> sudo lxc exec vm01 bash
[root@vm01 ~]#

コンテナ削除

lxc delete コンテナ名コマンドを実行(コンテナが停止している必要がある)

SHELL> sudo lxc delete vm01

コンテナイメージの作成

SHELL> lxc publish vm01 --alias CentOS7
コンテナは以下のフィンガープリントで publish されます: 7b25b19d8b75fff2dea225bcd6d9580579b0e033f889147405afaf2f810c5d5b

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

SHELL> sudo lxc image list
+-------+--------------+--------+---------------------------------+--------+---------+------------------------------+
| ALIAS | FINGERPRINT  | PUBLIC |           DESCRIPTION           |  ARCH  |  SIZE   |         UPLOAD DATE          |
+-------+--------------+--------+---------------------------------+--------+---------+------------------------------+
|       | 2718b6765dda | no     | Centos 7 amd64 (20180820_02:16) | x86_64 | 83.43MB | Aug 20, 2018 at 6:25am (UTC) |
+-------+--------------+--------+---------------------------------+--------+---------+------------------------------+