目次


はじめに

注意:

まだ LXD をセットアップしていないのであれば、まずは「はじめに - コマンドライン」を最初にご覧ください。

このガイドでは、いくつかの LXD の機能について詳細な情報を紹介しています。

インスタンスの設定

設定キーのリストはLXDドキュメントのインスタンスの項でご覧いただけます。

インスタンスを起動する際にオプションを指定することも(起動オプションをご覧ください)、あとで追加することもできます。

基本的に、次のふたつのタイプの設定を追加できます:

  • 一般オプション
    • インスタンスの起動
    • セキュリティ
    • ハードウェアに対する制限
    • カーネルモジュール
    • スナップショット
    • user キー(cloud-init用)
    • など
  • デバイス
    • ネットワーク
    • ストレージ
    • usb
    • ソケット
    • gpu
    • など

コンテナと仮想マシンの違い

現時点では、仮想マシンに対するサポートは、コンテナがサポートする機能よりも少ないです。 仮想マシンで設定できるオプションはLXD公式文書のインスタンスのセクションでご覧いただけます。 「サポートされるインスタンスタイプ」でVMと書かれているカテゴリー、"Condition" で virtual-machine と書かれている設定キーが仮想マシンでサポートされています。

lxc launch コマンドのオプション

lxc launchでオプションを指定して、設定オプションを追加できます。

設定に関連するオプションのリスト:
-p profilename   # プロファイルの適用

-c key=value   # 設定キーと値の適用

注意:

詳しくは後のプロファイルをご覧ください。

使い方:

lxc launch imageserver:imagename instancename -p profile1 -c key1=value

注意

複数のプロファイルや設定キーを適用するには、次のようにそれぞれにひとつの設定を与えます:

lxc launch imageserver:imagename instancename -p profile1 -p profile2

lxc launch imageserver:imagename instancename -c key1=value -c key2=value

プロファイル

プロファイルはインスタンスに対する設定ファイルのようなものです(設定はデータベースに保存されますが)。

プロファイルを与えない場合・デフォルトプロファイル

特定のプロファイルをインスタンスに適用しない場合、default という名前のプロファイルのみが自動的に適用されます。

次のように default プロファイルの内容を確認できます:

lxc profile show default

プロファイルの作成

次のように作成します:

lxc profile create profilename

その後、あとで説明するようにプロファイルを編集します。

プロファイルの編集

プロファイルを編集する方法は複数あります:

1. テキストファイルに記載し、プロファイルの内容を適用する

詳しくはあとのプロファイルを記述するの項をご覧ください。

2. ターミナルエディタでプロファイルを編集

次のように編集します:

lxc profile edit profilename
エディタの選択

/home/user/.profileでエディタを設定できます。

次のように標準のターミナルエディタとしてnanoを設定します:

echo 'export EDITOR=nano' >> ~/.profile
プロファイル中の設定キーに値を設定する

次のように設定します:

lxc profile set profilename key=value

プロファイルを記述する

プロファイルは yaml で記述します。次のような指定の書式にしたがう必要があります。

手順:

  1. 空のテキストファイルを作成し、profilename.profile という名前を付けます(profilenameという部分は任意の名前に置き換えてください)
  2. 好きなエディタでそのファイルを開きます
  3. 編集して保存します

defaultプロファイル)

config: {}
description: ""
devices:
  eth0:
    name: eth0
    nictype: bridged
    parent: lxdbr0
    type: nic
  root:
    path: /
    pool: one
    type: disk
name: default
used_by: []

説明:

config:

LXD公式ドキュメント - インスタンスの設定キーの項 にあるすべての設定キーを適用できます。

例:

config:
  snapshots.expiry: 1M
  security.protection.delete: true
  security.idmap.isolated: true
description:

プロファイルの説明を追加できます。空でも構いません。

devices:

LXD公式ドキュメント - インスタンスのデバイスタイプの項 にあるすべての設定キーを適用できます。

name:

プロファイル名(任意の名前を付けられます)。

used_by:

空のままにしておきます。どのインスタンスがこのプロファイルを適用したかが入ります。

プロファイルを LXD に追加

空のプロファイルを作成します:

lxc profile create myprofile

テキストファイルを新しいプロファイルに「コピー」します:

cat myprofile.profile | lxc profile edit myprofile

これで、このプロファイルをインスタンスを起動する際か、あとで適用できます(後述)。

あとで設定オプションを適用・編集する

プロファイルを適用・削除・修正したり、直接インスタンスの設定を編集できます。

プロファイルの適用

次のように実行します:

lxc profile add instancename profilename

プロファイルの削除

次のように削除します:

lxc profile remove instancename profilename

プロファイルの編集

次のように編集します:

lxc profile edit profilename

インスタンスの設定の編集

ターミナルエディタでインスタンスの設定を編集するには:

lxc config edit instancename

特定の設定キーに設定を行うには:

lxc config set instancename key=value

設定の確認

次のように適用されているすべての設定を確認します(適用されているプロファイルを含む);

lxc config show instancename -e

Cloud-init

cloud-initは Linux ディストリビューションを自動的にカスタマイズするためのソフトウェアです。

次のような機能があります:

  • パッケージのインストール
  • 設定の適用や編集
  • ユーザーの追加
  • その他

動作環境:

  • cloud-init をサポートするイメージ:
    例えば、ALIAScloud という文字列を含む LXD の公式イメージは cloud-init をサポートしています。

cloud-init で行う処理を適用する

LXD プロファイル中で cloud-init で行う処理を適用できます。

簡単に編集するには、テキストエディターでプロファイルを記述し、そのテキストファイルを新しいプロファイルに適用します。

cloud-init プロファイルを記述する

  1. 新しいテキストファイルを、例えば cloud-profile1.profile のような名前で作成します
  2. テキストエディターでそのファイルを開いて編集を行います

cloud-init に対する各命令は、configuser.user-data セクションに適用されます(もしくはインスタンスデータの他のセクション。下記を参照):

config:
  user.user-data: |
    #cloud-config
    key: value

例:

config:
  user.user-data: |
    #cloud-config
    package_upgrade: true
    packages:
      - package1
      - package2

この例では、インストールされているパッケージすべてをアップデートし、package1 と package2 をインストールします。

cloud-init に対するその他の命令

より詳細な命令については examples in the cloud-init documentation をご覧ください。

インスタンスデータの他の設定セクション

Tips:
cloud-init の書式が合っているかどうかは cloud-init FAQ - debug user-data でチェックできます。

プロファイルの適用

テキストファイルを保存したあとは、次のステップでそのファイルを適用します。

LXD で新しいプロファイルを作成します:

lxc profile create cloud-profile1

そして、そのテキストファイルを作成したプロファイルに適用します:

cat cloud-profile1.profile | lxc profile edit cloud-profile1

cloud-init を使ったインスタンスの起動

lxc launch コマンドに -p オプションを指定して、起動時にプロファイルを適用します:

lxc launch imageserver:image instancename -p cloud-profile1

これで cloud-init が動作し始めます。

注意:

cloud-init は、指定した内容によっては終了までに時間がかかるかもしれません。

cloud-init の状態

次のようにして、cloud-init の状態を取得できます:

cloud-init status

上記のコマンドを実行した場合の結果: status: running : cloud-init は実行中です。

もしくは

status: done : cloud-init の実行が終了しました。


次のような --wait オプションを指定して、cloud-init が終了したときだけ反応を返すようにできます:

cloud-init status --wait

さらなる情報:

次をご覧ください: Cloud-init documentation

サーバー設定

すべてのサーバーの設定オプションは LXDドキュメントのサーバー設定の項 をご覧ください。

ここでは次のようなテーマについて紹介します:

プロジェクト

サーバーをプロジェクトに分割できます。プロジェクトでは、独自のインスタンスやプロファイルを持つことができます。
詳しい情報や設定は LXDドキュメントのプロジェクトの項 をご覧ください。

セキュリティ

サーバーセキュリティの詳細は LXDドキュメントのセキュリティの項 をご覧ください。

リモートサーバー

LXD はいろいろな種類のリモートサーバーに対応しています:

simplestream サーバーのセットアップ

いろいろなサーバーが存在します。例えば:

simplestream サーバーへの接続:
simplestream サーバーの追加をご覧ください。

リモートサーバーとして LXD サーバーをセットアップする

デフォルト(TLS + Password)

ここでは TLS 証明書ベースの認証でサーバーをセットアップします。クライアントの追加を簡単にするために、初回接続時にクライアントを認証するためのパスワードを設定できます。

次のようにリモートサーバーとして LXD サーバーを設定します:

lxc config set core.https_address "[::]"
lxc config set core.trust_password some-password
  • core.https_address "[::]" は LXD に、全アドレスのポート 8443 番をバインドするよう設定します
  • core.trust_password は新しいクライアントのための認証パスワードを設定します

注意 core.https_address はサーバーで使える単一のアドレスに設定することが推奨です(ホスト上の全アドレスでなく)。そして信頼できるホスト・サブネットからだけ LXD へのアクセスを許可するファイアウォールのルールを設定するのがよいでしょう。

さらに core.trust_password は、すべてのクライアントを追加したあとに削除すべきです。これにより、ブルートフォース攻撃でパスワードを推測することを防げます。

詳しくは LXDドキュメントのセキュリティの項 をご覧ください。


サーバーへの接続:
クライアントのリモートサーバーリストにサーバーを追加するには、リモートサーバーの追加 をご覧ください。

パブリック・イメージサーバー

(ストレージプールやネットワークなどがない)空の LXD サーバーをパブリックのイメージサーバーとして使うことができます。

LXD をインストールし、次のように実行します:

lxc config set core.https_address :8443

これで LXD サーバーが、8443 番ポートでネットワーク経由で利用できるようになります。さらに、共有したいイメージを public に設定する必要があります。

Candid

Candid は認証サービスです。 詳細と使い方は Ubuntu のチュートリアル - Candid authentication for LXD をご覧ください。

Candid + RBAC

詳しくは LXD ドキュメントのセキュリティのRBACに関する部分 をご覧ください。

リモートーサーバーの追加

Simplestream サーバーの追加

次のように追加します:

lxc remote add some-name https://example.com/some/path --protocol=simplestreams

サーバーに存在するイメージのリストは次のように取得できます:

lxc image list some-name:

そのサーバーのイメージを使ってコンテナを起動するには次のように実行します:

lxc launch some-name:image-name your-container

リモートの LXD サーバーの追加

デフォルト(TLS + パスワード)

次のようにリモートサーバーのリストにサーバーを追加できます:

lxc remote add some-name <IP|FQDN|URL> [flags]

IP アドレスを使う場合の例は次のとおりです:

lxc remote add remoteserver2 1.2.3.4

実行すると、リモートサーバーのフィンガープリントを確認するプロンプトが表示されます。それからパスワードを聞かれます。

Candid

次のように実行します:

lxc remote add some-name <IP|FQDN|URL> --auth-type=candid

リモートサーバーの使用

リモートサーバーのイメージリスト

リモートサーバーのイメージリストは次のように取得できます:

lxc image list my-images:

リモートサーバーのインスタンスの管理

次のようにインスタンス名、イメージ名の前にリモートホスト名を付けて、(ローカルで実行するのと)同じコマンドを使用できます:

lxc exec remoteserver-name:instancename -- apt-get update

イメージ - Part 2

イメージに関する高度なオプション

  1. リモートの(イメージ)サーバーの追加
  2. イメージの手動インポート
  3. イメージのビルド

イメージのインポート

次のようなイメージをインポートできます:

コンテナイメージのインポート

次のようなコンポーネントがある場合:

  • lxd.tar.xz
  • rootfs.squashfs

次のように実行します:

lxc image import lxd.tar.xz rootfs.squashfs --alias custom-imagename
仮想マシンイメージのインポート

次のようなコンポーネントがある場合:

  • lxd.tar.xz
  • disk.qcow2

次のように実行します:

lxc image import lxd.tar.xz disk.qcow2 --alias custom-imagename

手動でのダウンロード

手動でイメージをダウンロードできます。その場合、イメージのインポートで説明したようなコンポーネントをダウンロードする必要があります。

LXD公式のイメージサーバーから

注意: 通常使用する lxc launch を使ったほうが簡単です。例えば、使用前にファイルを修正するなどの、何か特別な理由があるときのみ手動でのダウンロードを使用してください。

公式のイメージサーバーへのリンク
https://images.linuxcontainers.org/images/

イメージのエクスポート

次のように実行します:

lxc image export imagename [target folder] [flags]

オプション:
--vm - 仮想マシンイメージを問い合わせる

コンテナからのイメージの作成

次のコマンドを実行し、ヘルプをご覧ください:

lxc publish

イメージのビルド

自分でイメージをビルドする場合に、distrobuilder を使えます(われわれが開発しています)。

distrobuilder のインストール

distrobuilder は snap 経由、もしくは手動でインストールできます:

Snap 経由でのインストール

https://snapcraft.io/distrobuilder をご覧ください。

コンパイル

distrobuilder の Github リポジトリの手順 をご覧ください。

テンプレートの作成・編集

distrobuilder に手順を示すためのイメージテンプレート(例: ubuntu.yaml)が必要です。

下記のサンプルテンプレートのひとつを使って作成を始めることができます。ニーズに合うようにテンプレートを変更してください。設定キーの詳細については テンプレートの詳細 をご覧ください。

サンプルテンプレート

標準テンプレート(すべての使用可能なオプションを含みます): https://github.com/lxc/distrobuilder/blob/master/doc/examples/scheme.yaml

さまざまなディストリビューションの LXD 公式テンプレート: https://github.com/lxc/lxc-ci/tree/master/images

テンプレートの詳細

テンプレート内には複数のキーを定義できます:

セクション: 説明: ドキュメント:
image ディストリビューション、アーキテクチャ、リリースなどを定義します image.md 参照
source メインパッケージのソースやキーなどを定義します source.md 参照
targets 特定のターゲット(例: LXDクライアント、インスタンスなど)に対する設定を定義します targets.md 参照
files ファイルを変更するための generators を定義します generators.md 参照
packages インストールしたり削除したりするパッケージ、追加するリポジトリを定義します packages.md 参照
actions イメージをビルドする途中の特定のステップの後に実行するスクリプトを定義します actions.md 参照
mappings 特定のディストリビューションで使われているアーキテクチャ文字列と LXD で使われるアーキテクチャ文字列の差異をマッピングします (例: x86_64: amd64) mappings.md 参照

VMでの注意:

標準サイズが比較的小さい(〜4GB)ので、cloud-init サポートでイメージをビルドするか(自動的にサイズが大きくなります)、テンプレートにより大きなサイズを設定するかのどちらかを行う必要があります。 または手動で拡張することもできます。

イメージのビルド

コンテナイメージ

次のようにコンテナイメージをビルドします:

distrobuilder build-lxd filename [target folder]

上の例は次のように置き換えてください:

  • filename - テンプレートファイル名(例: ubuntu.yaml
  • (オプション)[target folder] - イメージを出力する任意のフォルダーへのパス。設定しない場合はカレントフォルダーを使います

イメージをビルドした後、ビルドしたイメージを LXD にインポートするためには イメージのインポート をご覧ください。

詳しくは distrobuilder の Github リポジトリの Building.md をご覧ください。

仮想マシンイメージ

次のように仮想マシンイメージをビルドします:

distrobuilder build-lxd filename --vm [target folder]

上の例は次のように置き換えてください:

  • filename - テンプレートファイル名(例: ubuntu.yaml
  • (オプション)[target folder] - イメージを出力する任意のフォルダーへのパス。設定しない場合はカレントフォルダーを使います

イメージをビルドした後、ビルドしたイメージを LXD にインポートするためには イメージのインポート をご覧ください。

さらなる情報

ネットワーク

詳しくは LXD ドキュメントをご覧ください:

ストレージ

詳しくは LXD ドキュメントをご覧ください:

コマンドエイリアス

LXD 内部で使うコマンドのエイリアスを次のコマンドで作ることができます:

lxc alias

すべてのエイリアスのリストは次のように表示できます:

lxc alias list

新しいエイリアスを作るには次のように実行します:

lxc alias add <alias> <target>

例:

lxc alias add delete "delete -i"

これはコマンド lxc deletelxc delete -i にリンクします。LXD クライアントで lxc delete と実行すると、代わりに lxc delete -i が実行されます。

Tips & Tricks

インスタンスの誤った削除を防ぐ

方法1: lxc delete を使う際には常にプロンプトで確認するようにエイリアスを設定する:

lxc alias add delete "delete -i"

方法2: インスタンスにつぎの設定を行います: security.protection.delete=true。この設定キーを削除しない限りは、インスタンスを削除できません。

その他の情報とリンク

次のページに詳しい情報があります: