LXD 2.0: LXDのインストールと設定 [2/12]

## この文書について

この文書は、連載記事「[LXD 2.0: Blog post series](https://www.stgraber.org/2016/03/11/lxd-2-0-blog-post-series-012/)」（[日本語版目次](http://qiita.com/m-shibata/items/029b19d90af2a79116c2)）の一つである以下の記事を翻訳したものです。

* https://www.stgraber.org/2016/03/15/lxd-2-0-installing-and-configuring-lxd-212/

この文書のライセンスは原文と同じく、[Creative Commons BY-NC-SA 2.5](http://creativecommons.org/licenses/by-nc-sa/2.5/)のもとに提供されています。

![CC-BY-NC-SA 2.5](http://i.creativecommons.org/l/by-nc-sa/2.5/88x31.png)

---------

## LXDを入手しインストールする方法

最新のLXDを入手する方法はいくつか存在します。LXDのすべての機能を使いたいなら最新のLXCとカーネルを使うことをおすすめします。しかしながら古いLinuxディストリビューションもサポートできるよう、うまく調整しているつもりです。

### Ubuntuアーカイブから

最新のLXDリリースはすべて、リリースから数分以内にUbuntuの開発版にアップロードされます。このパッケージが、そのままUbuntuユーザー向けのパッケージとして配信されます。


開発版のUbuntu（16.04）を使っている場合は次のように入力するだけです：

```
sudo apt install lxd
```

Ubuntu 14.04を使っている場合は、バックポートパッケージを利用します：

```
sudo apt -t trusty-backports install lxd
```

### Ubuntu Coreストア

安定版のUbuntu Coreを使用しているなら次のようにLXDをインストールできます：

```
sudo snappy install lxd.stgraber
```

### 公式のUbuntu PPA

Ubuntu 15.10のような他のリリースのUbuntuを使っている場合は、次のPPA（Personal Package Archive）からLXDパッケージをインストールできます：

```
sudo apt-add-repository ppa:ubuntu-lxc/stable
sudo apt update
sudo apt dist-upgrade
sudo apt install lxd
```

### Gentooアーカイブ

Gentooにも最新のLXDパッケージが存在します。次のようにインストールできます：

```
sudo emerge --ask lxd
```

### ソースコードから

Goプロジェクトのビルドに慣れているのなら、ソースコードからLXDをビルドすることはそれほど難しくはありません。なお、LXCの開発用ヘッダーが必要になります。LXDの最新版を動かすためには、より新しいLinuxカーネル（少なくとも3.13以上）と、最新のLXC（1.15以上）、LXCFSにサブUID/GIDの割り当てをサポートしたshadowパッケージが必要です。

LXDをビルドする最新の方法は[アップストリームのREADMEファイル](https://github.com/lxc/lxd/blob/master/README.md)に記載されています。

## Ubuntuにおけるネットワーク設定について

Ubuntuのパッケージでは利便性のために「`lxdbr0`」というブリッジを提供しています。このブリッジは初期状態では何も設定されておらず、HTTPプロキシ経由での接続のためだけに、リンクローカルのIPv6アドレスのみを提供します。

IPv4もしくはIPv6のサブネットアドレスを取得するためには、次のコマンドでこのブリッジを設定してください：

```
sudo dpkg-reconfigure -p medium lxd
```

もしくは次のコマンドで、LXDの全体の設定を一つずつ実施できます：

```
sudo lxd init
```

## ストレージバックエンド

LXDはいくつものストレージバックエンドをサポートしています。バックエンド間のコンテナの移動はサポートしていないので、LXDの利用を開始する前にバックエンドについて把握しておいた方がいいでしょう。

バックエンド間の機能の比較は[こちら](https://github.com/lxc/lxd/blob/master/doc/storage-backends.md)にあります。


## ZFS

おすすめのバックエンドはZFSです。これはLXDのすべての機能をサポートし、高速で信頼性の高い体験を提供します。サポートする機能はコンテナごとのディスククオータやスナップショット・リストア、最適化されたマイグレーション（送信・受信ともに）、イメージからのコンテナの作成などです。btrfsよりも成熟していると考えられています。

LXDでZFSを使うためには、システム上にZFSが必要です。

Ubuntu 16.04を使っているなら、次のようにインストールするだけです：

```
sudo apt install zfsutils-linux
```

Ubuntu 15.10なら、次のようにインストールします：

```
sudo apt install zfsutils-linux zfs-dkms
```


古いリリースではzfsonlinux PPAを使うこともできます：

```
sudo apt-add-repository ppa:zfs-native/stable
sudo apt update
sudo apt install ubuntu-zfs
```

ZFSを使うためのLXDの設定は、次のコマンドを実行します：

```
sudo lxd init
```

ZFSの設定に関していくつか質問されますので、LXDの環境に合わせて回答してください。その後、適切な設定が行われます。



### btrfs

ZFSを利用できない場合、btrfsが同等の機能を提供します。ただしコンテナのディスク使用量を正しく把握できません（が、クオータは適用されます）。ZFSではまだサポートしない機能として、btrfsは正しくネストできます。LXDの中でLXDを使うことを考えている場合はbtrfsを使う価値があります。

btrfsを使う場合、LXDに特別な設定を行う必要はありません。btrfsファイルシステム上の/var/lib/lxdに保存さえすれば、自動的にbtrfsを使うようになります。


### LVM

ZFSもbtrfsも選択できない場合、代わりにLVMを使えばLXDの恩恵の一部を受けられるでしょう。LXDはLVMのシンプロビジョニングを使用して、コンテナごとに論理ボリュームを作成し、必要に応じてLVMのスナップショットを利用します。

LXDでLVMを使いたい場合は、LVMのボリュームグループを作り、次のコマンドを実行します：

```
lxc config set storage.lvm_vg_name "ボリュームグループの名前"
```

初期状態では、すべての論理ボリュームのファイルシステムとしてext4を使用します。XFSを使いたい場合は、次のように変更できます：

```
lxc config set storage.lvm_fstype xfs
```


### 単純なディレクトリ構成

上記の選択肢をどれも使用しない場合であってもLXDは動作しますが、いくつかの機能を利用できません。コンテナごとに単純にディレクトリを作成し、イメージアーカイブをコンテナの作成ごとに展開します。コンテナのコピーやスナップショットは、ファイルシステム全体のコピーとなります。

ディスククオータを除くすべての機能がサポートされますが、ディスクの使用量は大きくなりやすく、また低速です。他に選択肢がない場合はこの方法はたしかに動作はしますが、もし可能ならば上記で紹介した他の方法を選択することをおすすめします。


## デーモンの設定

LXDデーモンの設定オプションのリストは[こちら](https://github.com/lxc/lxd/blob/master/doc/configuration.md)に記載しています。

### ネットワーク設定

初期状態だとLXDはネットワークに対してLISTEN状態にはなりません。`/var/lib/lxd/unix.socket`にあるローカルのunixソケットとのみ通信できます。

ネットワークに対してLISTENするためには、次の設定を行ってください：

```
lxc config set core.https_address [::]
lxc config set core.trust_password 何らかのパスワード
```

最初の設定は、LXDをIPv6アドレスである「`::`」、つまり全アドレスにbindしています。もちろん特定のIPv4アドレスないしIPv6アドレスにポート番号を付けたものにbindすることも可能です（ポート番号の既定値は8443です）。

二つめの設定は、リモートクライアント自身をLXDの証明書ストアに登録する際に使われるパスワードです。LXDホストを追加する際、パスワードが要求されます。ユーザーの入力したパスワードが設定と一致すれば、そのLXDデーモンはクライアント証明書を登録し、そのクライアントを信頼します。以降、再びパスワードを要求することはありません（パスワードが変更されたり、完全に無効化される可能性はあります）。

パスワードを設定せず、（`~/.config/lxc`から）「`client.crt`」ファイルをサーバーにコピーし、証明書ストアに手作業で登録することも可能です。

```
lxc config trust add client.crt
```

### プロキシ設定

大抵の場合、LXDデーモンはリモートサーバーからイメージを取得することになるでしょう。

外部のネットワークにHTTP(S)プロキシ経由で接続する必要がある場合、以下の設定を行うか、もしくはデーモンの環境において標準的なPROXY環境変数を設定する必要があります。

```
lxc config set core.proxy_http http://squid01.internal:3128
lxc config set core.proxy_https http://squid01.internal:3128
lxc config set core.proxy_ignore_hosts image-server.local
```

上記の設定により、LXDから始まる通信はすべて`squid01.internal`というHTTPプロキシを経由します。ただし`image-server.local`との通信のみは例外的にプロキシを経由しないという設定になっています。


### イメージ管理

LXDは動的なイメージキャッシュを行います。リモートイメージからコンテナを作成した時、イメージはイメージストアへとダウンロードされ、キャッシュマークが付き、ダウンロード元が記録されます。数日間（初期設定では10日間）、使われなければ、そのイメージは自動的に削除されます。数時間ごとに（初期設定では6時間ごとに）、LXDはイメージのより新しいバージョンがないか確認し、更新されていればローカルにコピーします。

これらの振る舞いは、次のように設定を変更できます：

```
lxc config set images.remote_cache_expiry 5
lxc config set images.auto_update_interval 24
lxc config set images.auto_update_cached false
```

上記では、先ほど説明した設定に関する値をすべて変更しています。キャッシュの生存時間を最後に利用してから最大5日間に偏光子、イメージの更新チェック間隔は24時間ごととし、明示的に更新を指示した時のみ（`lxc image copy`コマンドで`-auto-update`フラグを付けた時のみ）イメージを更新し、LXDによるイメージキャッシュの自動的な更新を行わないようにしています。


## まとめ

この時点で、LXDの最新リリースを動かせるようになりましたので、自分自身の手でそれを試すことができます。次のブログの投稿では、LXDのコマンドラインツールを使って最初のコンテナの作成したり、その使用を方法解説する予定です。


## その他の情報

* LXDのウェブサイト：[https://linuxcontainers.org/ja/lxd/](https://linuxcontainers.org/ja/lxd/)
* 開発はGitHub上で行なっています：[https://github.com/lxc/lxd](https://github.com/lxc/lxd)
* メーリングリスト：[https://lists.linuxcontainers.org](https://lists.linuxcontainers.org)
* IRCチャンネル：#lxcontainers on irc.freenode.net

もし他の投稿を待ちきれず、LXDを試してみたいのであれば、[オンラインのデモページ](https://linuxcontainers.org/ja/lxd/try-it/)からLXDとそのガイドツアーを体験できます。