Geekな世界に溺れたい

#! 新人エンジニアによる技術備忘録

Ubuntu 16.04でLXD2.0の設定と簡単な操作まとめ

LXDを触ったり必要な設定を調べていくうちに、記録していた情報が分散してしまったので整理を兼ねてまとめてみました。

LXDとは

Canonicalによって開発されているコンテナ型仮想化ハイパーバイザの事。オープンソースソフトウェア。Canonicalが以前から開発していたLXCというlinuxコンテナを扱うためのソフトウェアを用いて、複数のホスト上に存在する複数のコンテナを操作、管理する事できるソフトウェアがLXDである。LXDは、lxdデーモンとlxcコマンド、Openstack nova プラグイン(Openstackの仮想化基盤を管理するコンポーネントプラグイン)によって構成されている。
色々書きましたが、簡単に言うと LXDを使えばお手軽に仮想マシンの様に扱えるコンテナを作成できて、ネットワーク越しの管理や操作も簡単にできるよ ってことです。

コンテナの話については、また後日にまとめた記事を書こうと思ってます。。

とりあえず触ってみましょう!

インストール

LXDはCanonicalが開発している事もあり、最近のUbuntu Serverではデフォルトでインストールされています。ですが、非常に開発が活発なので最新版へのアップデートは行いましょう。Ubuntu severの場合は、OSのインストール後にフルアップグレードで良いかと思います。

$ sudo apt-get update
$ sudo apt-get upgrade

デスクトップ版ではインストールが必要です。apt-getでインストールしちゃいましょう。

$ sudo apt-get update
$ sudo apt-get install lxd

インストールされたところで、バージョンを確認

$ lxd --version
2.0.5

このように表示されればインストールは完了です。
(※この記事を書いている時点(2016/11/24)でのLXDのバージョンは2.0.5でした。2.0系は長期サポート対象のリリースになっています。LinuxContainers.orgのニュースを見ると2.X系がリリースされていますが、それらは長期サポート対象外のリリースです。ppa経由でインストールが可能ですが、本番環境の場合は2.0系が推奨されています。)

lxdを操作する為には、ユーザが"lxd"グループに所属している必要があります。
所属していないと、

Permission denied, are you in the lxd groups?

と出力され、操作が行えません。

もし、lxdを操作したいユーザがadmin又は,sudoresグループのメンバーである場合は、自動的に"lxd"グループに追加されます。
そうでない場合は、以下のコマンドを実行して"lxd"グループへ所属させましょう。

# gpasswd -a ユーザ名 lxd
(※ gpasswdコマンドの実行にはroot権限が必要です)

また、現在のログインセッションを閉じて再度開くと"lxd"グループへの所属が有効になりますが、それが嫌な場合は以下のコマンドですぐ有効にできます。

$ newgrp lxd

次に初期設定を行いましょう。

初期設定

初期設定は以下のコマンドを実行することで行えます。

$ sudo lxd init

※ 細かい設定があるので、面倒であれば設定値は全部デフォルト値、キャラクタベースのGUI設定画面が出てきたらEnterキーで進んでしまいましょう。ネットワーク設定とかどうでも良いからとりあえず触ってみたい!という方はEnterキー連打で大丈夫です。

※ lxd init実行時のスクリーンショット
f:id:geek_tm:20161125134731j:plain
設定項目は、以下の通り。

・使用するストレージバックエンド(dir or zfs)[default=dir]:
・LXDをネットワーク上で利用可能にするか(yes or no)[default=no]:
・LXDをバインドするアドレス(ポート番号を含まない)[default=all]:
・LXDをバインドするポート番号(8443を推奨)
・クライアントのパスワードを入力:
・LXDブリッジ(lxdbr0)を設定するか(yes or no):

ブリッジ設定でyesを選択した場合は、CUIの設定画面に移るので質問に対して答えて設定を行います。

※こんな画面に切り替わる
f:id:geek_tm:20161125134847j:plain
設定項目は以下の通り

・ブリッジ接続の設定を行うか(yes or no)
・使用するブリッジインターフェースの名前を入力(デフォルトではlxdbr0が指定されている)
IPv4接続をコンテナに提供する為の設定を行うか(yes or no)
・ブリッジインターフェースで使用するIPv4アドレスの入力
・ブリッジインターフェースで使用するIPv4 CIDR maskの入力
DHCPで使用する初めのアドレスを入力
DHCPで使用する終わりのアドレスを入力
DHCPクライアントの最大数を入力(デフォルトでは252が入力されている)
IPv4トラフィックをNATするか(yes or no)
IPv6接続をコンテナに提供する為の設定を行うか(yes or no)
・ブリッジインターフェースで使用するIPv6アドレスの入力
・ブリッジインターフェースで使用するIPv6 CIDR maskの入力
IPv6トラフィックをNATするか(yes or no)

また、後ほど再設定を行いたい場合は、以下のコマンドを実行することで行えます。

$ sudo dpkg-reconfigure -m medium lxd

※ dpkg-reconfigureはインストール済みのパッケージを再設定するコマンド。
先ほどのCUI画面が出てきます。

初期設定は以上です。
それでは、コンテナを操作してみましょう。

操作

LXDはlxcコマンド経由で操作が行えます。

・コンテナを作成

$ lxc launch images:ubuntu/trusty/amd64 コンテナ名

コンテナ名を指定しない場合は、LXDが自動で名前をつけます。
※ imagesは、https://uk.images.linuxcontainers.org/images/からビルド済みのOSイメージを取得します。どのようなOSイメージが置いてあるかはURL先で確認してください。

実行例として、

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

のように出力されれば、コンテナの作成は完了です。

・コンテナのリストを表示
ホスト上に存在するコンテナを確認するには以下のコマンドで行えます。

$ lxc list
+-----------+---------+----------------------+------+------------+-----------+
|   NAME    |  STATE  |         IPV4         | IPV6 |    TYPE    | SNAPSHOTS |
+-----------+---------+----------------------+------+------------+-----------+
| ubuntu-01 | RUNNING | 192.168.2.178 (eth0) |      | PERSISTENT | 0         |
+-----------+---------+----------------------+------+------------+-----------+

・コンテナを起動

$ lxc start コンテナ名

・コンテナを停止

$ lxc stop コンテナ名

・コンテナを削除(コンテナを停止している必要がある)

$ lxc delete コンテナ名

コンテナを再起動

$ lxc restart コンテナ名

・コンテナに入って操作する(コンテナ内部でのシェル実行)

$ lxc exec コンテナ名 デフォルトシェル(例えば/bin/bash)

実行例として、

$ lxc exec ubuntu-01 /bin/bash
root@ubuntu-01:~# 

これで、仮想マシンを扱うようにコマンドラインで操作が行えます。
また、lxcコマンドから直接コマンドの実行も行えます。

$ lxc exec コンテナ名 -- コマンド

こんな感じで実行されます。

$ lxc exec ubuntu-01 -- uname -a
Linux ubuntu-01 4.4.0-45-generic #66-Ubuntu SMP Wed Oct 19 14:12:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

リモート間通信やそれに伴う設定などがまだありますが、今回はここまでにしたいと思います。
初期設定がやや面倒なところがありますが、コンテナの操作自体はとても簡単に行えて便利だと思います。