「LXD」の版間の差分
(同期) |
(同期) |
||
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になっています)、{{ic|lxd.service}} を[[systemd#ユニットファイルの編集|編集]]してください: |
− | + | {{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行目: | ||
もしくは既存のイメージを使う場合は設定を編集してください: |
もしくは既存のイメージを使う場合は設定を編集してください: |
||
− | + | {{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: |
||
− | + | 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 の新しいユーザー体験です。
目次
セットアップ
必要なソフトウェア
LXC と lxdAUR パッケージをインストールして、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: lxcbr0
を parent: lxd
に変更してください:
$ lxc profile edit default
最後に、dnsmasq@lxd.service
と netctl@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 ユニットが利用しているカーネルキーリングが非特権コンテナで機能しないためです。上記のコマンドを使うことでシステムコールは未実装を返すようになります。