Ubuntu 16.04 - LXD 2.0をインストールする

Ubuntu 16.04 - LXD 2.0をインストールする

参考サイト


作業環境


詳細

$ hostnamectl status
   Static hostname: lxd.local
         Icon name: computer-vm
           Chassis: vm
~
    Virtualization: microsoft
  Operating System: Ubuntu 16.04.3 LTS
            Kernel: Linux 4.4.0-96-generic
      Architecture: x86-64

事前準備


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

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

LXDインストール


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

$ sudo apt install -y lxd lxd-client zfsutils-linux bridge-utils

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

$ sudo apt install -t xenial-backports lxd lxd-client zfsutils-linux bridge-utils

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

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

$ lxd --version
2.0.10
$ lxc --version
2.0.10

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


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

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

$ 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

再起動

$ sudo reboot

LXDセットアップ


セットアップ

lxd initコマンドを実行

$ sudo lxd init
Name of the storage backend to use (dir or zfs) [default=zfs]: zfs
Create a new ZFS pool (yes/no) [default=yes]? yes
Name of the new ZFS pool [default=lxd]: lxd
Would you like to use an existing block device (yes/no) [default=no]? yes
Path to the existing block device: /dev/vdb1
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]:
Port to bind LXD to [default=8443]:
Trust password for new clients:
Again:
Do you want to configure the LXD bridge (yes/no) [default=yes]? yes

f:id:sabakan1204:20171008234714p:plain
ブリッジインターフェースのセットアップは不要なため「いいえ」を選択

f:id:sabakan1204:20171008234718p:plain
既存のブリッジインターフェースを利用するため「はい」を選択

f:id:sabakan1204:20171008234723p:plain
既存のブリッジインターフェース名を入力(本環境の場合、br0と入力)

シングルディスクの場合は、以下のようにzfsで利用する容量を指定

$ sudo lxd init
[sudo] ubuntu のパスワード:
Name of the storage backend to use (dir or zfs) [default=zfs]: zfs
Create a new ZFS pool (yes/no) [default=yes]? yes
Name of the new ZFS pool [default=lxd]: lxd
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=17]: 60
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:
Do you want to configure the LXD bridge (yes/no) [default=yes]? yes
Warning: Stopping lxd.service, but it can still be activated by:
  lxd.socket
LXD has been successfully configured.

コンテナイメージ取得


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

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

$ lxc image list
クライアント証明書を生成します。1分ぐらいかかります...
初めて LXD を使う場合、sudo lxd init と実行する必要があります
初めてコンテナを起動するには、"lxc launch ubuntu:16.04" と実行してみてくだ
さい。

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

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

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

$ lxc image list images: centos
+------------------------+--------------+--------+---------------------------------+--------+---------+-------------------------------+
|         ALIAS          | FINGERPRINT  | PUBLIC |           DESCRIPTION           |  ARCH  |  SIZE   |          UPLOAD DATE          |
+------------------------+--------------+--------+---------------------------------+--------+---------+-------------------------------+
| centos/6 (3 more)      | f2cdaec19821 | yes    | Centos 6 amd64 (20170919_02:16) | x86_64 | 75.51MB | Sep 19, 2017 at 12:00am (UTC) |
+------------------------+--------------+--------+---------------------------------+--------+---------+-------------------------------+
| centos/6/i386 (1 more) | 3721b3e53702 | yes    | Centos 6 i386 (20170919_02:16)  | i686   | 75.72MB | Sep 19, 2017 at 12:00am (UTC) |
+------------------------+--------------+--------+---------------------------------+--------+---------+-------------------------------+
| centos/7 (3 more)      | 35d54c491da1 | yes    | Centos 7 amd64 (20170919_02:29) | x86_64 | 82.22MB | Sep 19, 2017 at 12:00am (UTC) |
+------------------------+--------------+--------+---------------------------------+--------+---------+-------------------------------+

コンテナ作成・一覧取得


コンテナ作成

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

$ lxc launch images:centos/7/amd64 vm01
vm01 を作成中
vm01 を起動中

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

コンテナ一覧を取得

lxc listを実行

$ lxc list
+------+---------+----------------------+-----------------------------------------------+------------+-----------+
| NAME |  STATE  |         IPV4         |                     IPV6                      |    TYPE    | SNAPSHOTS |
+------+---------+----------------------+-----------------------------------------------+------------+-----------+
| vm01 | RUNNING | 10.199.90.135 (eth0) | fde1:6be4:be7c:2a5c:216:3eff:fef4:21c2 (eth0) | PERSISTENT | 0         |
+------+---------+----------------------+-----------------------------------------------+------------+-----------+

コンテナ操作


コンテナ停止

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

$ lxc stop vm01

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

$ lxc list
+------+---------+------+------+------------+-----------+
| NAME |  STATE  | IPV4 | IPV6 |    TYPE    | SNAPSHOTS |
+------+---------+------+------+------------+-----------+
| vm01 | STOPPED |      |      | PERSISTENT | 0         |
+------+---------+------+------+------------+-----------+

コンテナ起動

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

$ lxc start vm01

コンテナにログイン

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

$ lxc exec vm01 bash
[root@vm01 ~]#

コンテナ削除

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

$ lxc delete vm01

コンテナイメージの作成

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

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

$ lxc image list
+---------+--------------+--------+---------------------------------+--------+----------+-------------------------------+
|  ALIAS  | FINGERPRINT  | PUBLIC |           DESCRIPTION           |  ARCH  |   SIZE   |          UPLOAD DATE          |
+---------+--------------+--------+---------------------------------+--------+----------+-------------------------------+
| CentOS7 | 7b25b19d8b75 | no     |                                 | x86_64 | 167.98MB | Sep 19, 2017 at 12:56pm (UTC) |
+---------+--------------+--------+---------------------------------+--------+----------+-------------------------------+
|         | 35d54c491da1 | no     | Centos 7 amd64 (20170919_02:29) | x86_64 | 82.22MB  | Sep 19, 2017 at 6:59am (UTC)  |
+---------+--------------+--------+---------------------------------+--------+----------+-------------------------------+