LXD

提供: ArchWiki
2020年10月20日 (火) 10:45時点におけるKusanaginoturugi (トーク | 投稿記録)による版 (→‎他のインストール方法: 節を追加(英語版準拠))
ナビゲーションに移動 検索に移動

関連記事

LXD はコンテナ(LXC経由)および仮想マシン(QEMU経由)のマネージャー/ハイパーバイザーです。

セットアップ

必要なソフトウェア

lxd パッケージをインストールして、lxd.service有効にします。

他のインストール方法

snapdAUR パッケージをインストールしてから以下のコマンドを実行することで snapd を使って LXD をインストールできます:

# snap install lxd

Setup for unpriviledged containers

It is recommended to use unpriviledged containers (See Linux_Containers#Privileged_containers_or_unprivileged_containers for an explanation of the difference).

In order to use them, you need to enable support to run unprivileged containers.

Once enabled, every container will be started unpriviledged by default.

For the alternative see howto set up priviledged containers.

LXD の設定

LXD を使うにはストレージプールと (インターネットを使いたい場合) ネットワークを設定する必要があります。以下のコマンドを root で実行してください:

# lxd init

非特権ユーザーとして LXD にアクセス

デフォルトでは LXD デーモンは lxd グループのユーザーからのアクセスを許可するので、ユーザーをグループに追加してください:

# usermod -a -G lxd <user>

基本的な使い方

コンテナの作成

LXD はデーモン (lxd バイナリ) とクライアント (lxc バイナリ) の2つに分かれています。デーモンを設定して実行したら、コンテナを作成できます:

$ lxc launch ubuntu:16.04

もしくは、リモートの LXD ホストをイメージソースとして使うこともできます。LXD で設定済みのイメージを使用するには (images.linuxcontainers.org):

$ lxc launch images:centos/7/amd64 centos

ヒントとテクニック

LXD のネットワーク

LXD は LXC のネットワーク機能を使います。デフォルトではコンテナを lxcbr0 ネットワークデバイスに接続します。コンテナのブリッジを設定する方法は LXC のネットワーク設定のドキュメントを読んでください。

lxcbr0 以外のインターフェイスを使いたい場合、lxc のコマンドラインツールを使ってデフォルト設定を編集してください:

$ lxc profile edit default

エディタで設定ファイルが開きます。デフォルトでは以下の内容になっています:

name: default
config: {}
devices:
  eth0:
    name: eth0
    nictype: bridged
    parent: lxcbr0
    type: nic

parent パラメータを設定することで LXD でコンテナに接続するブリッジを決めることができます。

ネットワーク設定例

LXD パッケージにはネットワークの設定例が付属しており /usr/share/lxd/ に保存されます。設定を使用するには以下のコマンドを実行してください:

$ ln -s /usr/share/lxd/dnsmasq-lxd.conf /etc/dnsmasq-lxd.conf
$ ln -s /usr/share/lxd/systemd/system/dnsmasq@lxd.service /etc/systemd/system/dnsmasq@lxd.service 
$ ln -s /usr/share/lxd/netctl/lxd  /etc/netctl/lxd
$ ln -s /usr/share/lxd/dbus-1/system.d/dnsmasq-lxd.conf /etc/dbus-1/system.d/dnsmasq-lxd.conf

NetworkManager を使用する場合、以下のようにシンボリックリンクを作成してください:

$ ln -s /usr/share/lxd/NetworkManager/dnsmasq.d/lxd.conf /etc/NetworkManager/dnsmasq.d/lxd.conf

parent: lxcbr0parent: lxd に変更してください:

$ lxc profile edit default

最後に、dnsmasq@lxd.servicenetctl@lxd.service起動有効化してください。

プロセスやファイルの制限を変更する

ファイル記述子の制限やユーザーが使用できる最大プロセス数の制限を増やしたい場合 (Arch Linux ではデフォルトで1024になっています)、lxd.service編集してください:

# systemctl edit lxd.service
[Service]
LimitNOFILE=infinity
LimitNPROC=infinity
TasksMax=infinity

トラブルシューティング

カーネルコンフィグの確認

デフォルトで Arch Linux のカーネルは Linux Containers とフロントエンドの LXD が動くようにコンパイルされています。カスタムカーネルを使っている場合やカーネルオプションを変更している場合、LXD が動かない場合があります。コンテナを実行できるようにカーネルが設定されているか確認してください:

$ lxc-checkconfig

CONFIG_USER_NS 無しでコンテナを起動する

イメージを起動するにはイメージの生成時に security.privileged=true が必要です:

$ lxc launch ubuntu:16.04 ubuntu -c security.privileged=true

もしくは既存のイメージを使う場合は設定を編集してください:

$ lxc config edit ubuntu
name: ubuntu
profiles:
- default
config:
  ...
  security.privileged: "true"
  ...
devices:
  root:
    path: /
    type: disk
ephemeral: false

新しいコンテナで security.privileged=true を有効にしたい場合、デフォルトプロファイルの設定を編集してください:

$ lxc profile edit default

非特権の Arch コンテナ で IPv4 アドレスが取得できない

LXD v2.20 ではコンテナが systemd-networkd サービスを起動できずに IPv4 アドレスが取得できません。LXD ホストで以下のコマンドを実行してからコンテナを再起動することで解決できます (Github Issue):

$ lxc profile set default security.syscalls.blacklist "keyctl errno 38"

原因は systemd の networkd ユニットが利用しているカーネルキーリングが非特権コンテナで機能しないためです。上記のコマンドを使うことでシステムコールは未実装を返すようになります。

参照