コンテンツにスキップ

「LXD」の版間の差分

提供: ArchWiki
削除された内容 追加された内容
同期
同期
1行目: 1行目:
[[Category:仮想化]]
[[Category:仮想化]]
[[en:LXD]]
[[en:LXD]]
{{Related articles start}}
{{Related|Linux Containers}}
{{Related articles end}}
'''[https://linuxcontainers.org/lxd/ LXD]''' はコンテナの『ハイパーバイザ』であり [[Linux Containers]] の新しいユーザー体験です。
'''[https://linuxcontainers.org/lxd/ LXD]''' はコンテナの『ハイパーバイザ』であり [[Linux Containers]] の新しいユーザー体験です。


7行目: 10行目:
[[LXC]] と {{AUR|lxd}} パッケージをインストールして、{{ic|lxd.service}} を[[起動]]してください。
[[LXC]] と {{AUR|lxd}} パッケージをインストールして、{{ic|lxd.service}} を[[起動]]してください。


非特権コンテナを使いたい場合は [[Linux Containers#非特権コンテナのサポートを有効化 (任意)]] を見てください。非特権コンテナを使わない場合は [[#CONFIG_USER_NS 無しでコンテナを起動する]]を見てください。
実行しているカーネルがコンテナを起動できることを確認:
$ lxc-checkconfig

LXD で作成できる最も安全なコンテナは''非特権''です。Linux カーネルの'''ユーザー名前空間'''機能を使うことで非特権コンテナを作成できます。しかしながらセキュリティ上の理由で、デフォルトの Arch カーネルでは非特権ユーザーでコンテナを実行できるようにはなっていません (カーネルコンパイル時に {{ic|CONFIG_USER_NS}} が有効になっていません)。{{ic|CONFIG_USER_NS}} が有効になっているカーネルを使用して''非特権''コンテナを作成する方法は3つあります:

* デフォルトの {{Pkg|linux}} カーネルパッケージの他に {{Pkg|linux-hardened}} カーネルパッケージをインストールする。非特権の LXD コンテナを起動したいときは、ブートローダーで {{Pkg|linux-hardened}} を選択して起動する。{{Pkg|linux-hardened}} は {{ic|CONFIG_USER_NS}} が有効になっています。それ以外の場合は、通常の {{Pkg|linux}} で起動します。
* [[AUR]] の {{AUR|linux-userns}} または {{AUR|linux-lts-userns}} パッケージをインストールする。どちらも {{ic|CONFIG_USER_NS}} を有効にしてコンパイルされています。後者のパッケージは長期サポート版です。
* {{ic|CONFIG_USER_NS}} を有効にして自分でカスタムカーネルをコンパイル・インストールする。


=== 他のインストール方法 ===
{{Note|{{ic|CONFIG_USER_NS}} 機能がなくてもコンテナを起動することはできます。ただし LXD コンテナは特権になるためプロセスがコンテナを脱獄した場合にリスクがあります。[[#CONFIG_USER_NS 無しでコンテナを起動する]]を参照。}}


{{AUR|snapd}} パッケージをインストールしてから以下のコマンドを実行することで [[snapd]] を使って LXD をインストールできます:
=== Sub{u,g}id の設定 ===


# snap install lxd
root の sub{u,g}ids を設定して、LXD が非特権のコンテナを作成できるようにします:


=== LXD の設定 ===
# echo "root:1000000:65536" | tee -a /etc/subuid /etc/subgid
LXD を使うにはストレージプールと (インターネットを使いたい場合) ネットワークを設定する必要があります。以下のコマンドを root で実行してください:
# lxd init


=== 非特権ユーザーとして LXD にアクセス ===
=== 非特権ユーザーとして LXD にアクセス ===
29行目: 27行目:


# usermod -a -G lxd <user>
# 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 のネットワーク ===
72行目: 84行目:
上記のサンプル設定で問題が発生する場合、{{AUR|lxd}} のページにコメントを投稿してください。
上記のサンプル設定で問題が発生する場合、{{AUR|lxd}} のページにコメントを投稿してください。


== 基本的な使い方 ==

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

$ lxc launch ubuntu:14.04

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

$ lxc launch images:centos/7/amd64 centos

== ヒントとテクニック ==
=== プロセスやファイルの制限を変更する ===
=== プロセスやファイルの制限を変更する ===


ファイル記述子の制限やユーザーが使用できる最大プロセス数の制限を増やしたい場合、以下のコマンドを実行 (Arch Linux ではデフォルトで1024になっています):
ファイル記述子の制限やユーザーが使用できる最大プロセス数の制限を増やしたい場合 (Arch Linux ではデフォルトで1024になっています)、{{ic|lxd.service}} を[[systemd#ユニットファイルの編集|編集]]してください:


# systemctl edit lxd
{{hc|# systemctl edit lxd.service|2=
[Service]
LimitNOFILE=infinity
LimitNPROC=infinity
TasksMax=infinity
}}


== トラブルシューティング ==
以下のように設定してください:


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


設定できたら lxd を再起動してください:

# systemctl restart lxd

== トラブルシューティング ==
=== CONFIG_USER_NS 無しでコンテナを起動する ===
=== CONFIG_USER_NS 無しでコンテナを起動する ===
イメージを起動するにはイメージの生成時に {{ic|1=security.privileged=true}} が必要です:
イメージを起動するにはイメージの生成時に {{ic|1=security.privileged=true}} が必要です:
108行目: 108行目:
もしくは既存のイメージを使う場合は設定を編集してください:
もしくは既存のイメージを使う場合は設定を編集してください:


$ lxc config edit ubuntu
{{hc|$ lxc config edit ubuntu|
name: ubuntu

profiles:
name: test_ubuntu
- default
profiles:
config:
- default
...
config:
security.privileged: "true"
...
...
security.privileged: "true"
devices:
...
root:
devices:
root:
path: /
path: /
type: disk
ephemeral: false
type: disk
}}
ephemeral: false


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

2018年2月28日 (水) 21:45時点における版

関連記事

LXD はコンテナの『ハイパーバイザ』であり Linux Containers の新しいユーザー体験です。

セットアップ

必要なソフトウェア

LXClxdAUR パッケージをインストールして、lxd.service起動してください。

非特権コンテナを使いたい場合は Linux Containers#非特権コンテナのサポートを有効化 (任意) を見てください。非特権コンテナを使わない場合は #CONFIG_USER_NS 無しでコンテナを起動するを見てください。

他のインストール方法

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

# snap install lxd

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起動有効化してください。

上記のサンプル設定で問題が発生する場合、lxdAUR のページにコメントを投稿してください。

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

ファイル記述子の制限やユーザーが使用できる最大プロセス数の制限を増やしたい場合 (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 ユニットが利用しているカーネルキーリングが非特権コンテナで機能しないためです。上記のコマンドを使うことでシステムコールは未実装を返すようになります。

参照