Note: この翻訳されたページは古くなっている可能性があります。 最新のコンテンツを読むには、英語版にアクセスしてください。 [English Version]

はじめに

注意

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

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

インスタンスの設定

インスタンスの設定をご覧ください。

現時点では、仮想マシンがサポートする機能は、コンテナがサポートする機能よりも少ないです。

仮想マシンで設定できるオプションは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

プロファイル

プロファイルの使用をご覧ください。

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 は色々な種類のリモートサーバーをサポートしています:

  • Simple streams サーバー: simple streams フォーマットを使った純粋なイメージサーバー
  • 公開 LXD サーバー: ストレージプールやネットワークを持たない空の LXD サーバーで、イメージサーバーとしてのみ機能します。core.https_address オプション(詳しくはサーバー設定を参照)を :8443 に設定し、認証を設定しないことで、ネットワークに 8443 番ポートで LXD サーバーを一般公開します。そして、共有したいイメージを public に設定します。
  • LXD サーバー: ネットワーク上で管理できる通常の LXD サーバーを、イメージサーバーとしても使えます。セキュリティ上の理由から、リモート API へのアクセスを制限し、アクセスを制御するために認証方法を設定する必要があります。詳細は、リモート API へのアクセスリモート API 認証をご覧ください。

リモートの Simple streams サーバーの使用

リモートサーバーとして Simple streams サーバーを追加するには、次のように実行します:

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

リモートの LXD サーバーの使用

リモートサーバーとして LXD サーバーを追加するには、次のように実行します:

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

認証方式によっては特定のオプションが必要です(例えば、Candid 認証の場合は lxc remote add some-name <IP|FQDN|URL> --auth-type=candid となります)。詳しい情報はリモート API 認証をご覧ください。

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

lxc remote add remoteserver2 1.2.3.4

実行すると、リモートサーバーのフィンガープリントを確認するプロンプトが表示されます。それからリモートサーバーが使用している認証方式に応じて、パスワードまたはトークンを聞かれます。

リモートサーバーの使用

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

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

lxc image list my-images:

インスタンスの起動

そのサーバーのイメージを使ってインスタンスを起動するには:

lxc launch some-name:image-name your-instance [--vm]

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

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

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

そのインスタンスで使える任意のコマンドが 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。この設定キーを削除しない限りは、インスタンスを削除できません。

その他の情報とリンク

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