インスタンスオプション#
インスタンスオプションはインスタンスに直接関係する設定オプションです。
インスタンスオプションをどのように設定するかの手順はインスタンスオプションを設定するを参照してください。
key/value 形式の設定は、名前空間で分けられています。 以下のオプションが利用できます。
各オプションに型が定義されていますが、全ての値は文字列として保管され、REST APIで文字列としてエクスポートされる(こうすることで後方互換性を壊すことなく任意の追加の値をサポートできます)ことに注意してください。
その他のオプション#
以下のセクションに一覧表示される設定オプションに加えて、以下のインスタンスオプションがサポートされます。
キー |
型 |
デフォルト値 |
ライブアップデート |
条件 |
説明 |
---|---|---|---|---|---|
|
bool |
|
no |
仮想マシン |
デフォルトのネットワークインタフェースの名前とMTUをインスタンスデバイスと同じにするかどうかを制御(これはコンテナでは自動でそうなります) |
|
string |
|
no |
- |
インスタンス待避時に何をするか( |
|
string |
- |
yes (exec) |
- |
インスタンス実行時に設定されるkey/value形式の環境変数 |
|
string |
- |
yes |
コンテナ |
インスタンスを起動する前にロードするカーネルモジュールのカンマ区切りのリスト |
|
string |
- |
no |
コンテナ |
コンテナ内の対応する |
|
string |
- |
no |
- |
自由形式のユーザー定義のkey/valueの設定の組(検索に使えます) |
ブート関連のオプション#
以下のインスタンスオプションはインスタンスのブート関連の挙動を制御します。
キー |
型 |
デフォルト値 |
ライブアップデート |
条件 |
説明 |
---|---|---|---|---|---|
|
bool |
- |
n/a |
- |
LXD起動時に常にインスタンスを起動するかどうかを制御(設定しない場合、最後の状態がリストアされます) |
|
integer |
|
n/a |
- |
インスタンスが起動した後に次のインスタンスが起動するまで待つ秒数 |
|
integer |
|
n/a |
- |
インスタンスを起動させる順番(高いほど早く起動します) |
|
integer |
|
yes |
- |
強制停止前にインスタンスが停止するのを待つ秒数 |
|
integer |
|
n/a |
- |
インスタンスの停止順(高いほど早く停止します) |
cloud-init
設定#
以下のインスタンスオプションはインスタンスのcloud-init
設定を制御します。
キー |
型 |
デフォルト値 |
ライブアップデート |
条件 |
説明 |
---|---|---|---|---|---|
|
string |
|
no |
イメージでサポートされている場合 |
|
|
string |
|
no |
イメージでサポートされている場合 |
|
|
string |
|
no |
イメージでサポートされている場合 |
|
|
string |
|
no |
イメージでサポートされている場合 |
|
|
string |
|
no |
イメージでサポートされている場合 |
|
|
string |
|
no |
イメージでサポートされている場合 |
|
これらのオプションのサポートは使用するイメージに依存し、保証はされません。
cloud-init.user-data
とcloud-init.vendor-data
の両方を指定すると、両方のオプションの設定がマージされます。
このため、これらのオプションに設定するcloud-init
設定が同じキーを含まないようにしてください。
リソース制限#
以下のインスタンスオプションはインスタンスのリソース制限を指定します。
キー |
型 |
デフォルト値 |
ライブアップデート |
条件 |
説明 |
---|---|---|---|---|---|
|
string |
仮想マシンでは 1 CPU |
yes |
- |
インスタンスに割り当てるCPU番号、もしくは番号の範囲。CPUピンニング参照 |
|
string |
|
yes |
コンテナ |
どれくらいCPUを使えるかを制御。ソフトリミットとしてパーセント指定( |
|
integer |
|
yes |
コンテナ |
リソースをオーバーコミットする際に同じCPUをシェアする他のインスタンスと比較したCPUスケジューリングの優先度(0〜10の整数)。割り当てと優先度 (コンテナのみ) 参照 |
|
integer |
|
yes |
- |
高負荷時に、インスタンスのI/Oリクエストに割り当てる優先度を制御(0〜10の整数) |
|
string |
- |
yes |
コンテナ |
64 KB huge pagesの数を制限するためのバイト数(さまざまな単位が指定可能、ストレージとネットワーク制限の単位参照)の固定値。huge page の制限 参照 |
|
string |
- |
yes |
コンテナ |
1 MB huge pagesの数を制限するためのバイト数(さまざまな単位が指定可能、ストレージとネットワーク制限の単位参照)の固定値。huge page の制限 参照 |
|
string |
- |
yes |
コンテナ |
2 MB huge pagesの数を制限するためのバイト数(さまざまな単位が指定可能、ストレージとネットワーク制限の単位参照)の固定値。huge page の制限 参照 |
|
string |
- |
yes |
コンテナ |
1 GB huge pagesの数を制限するためのバイト数(さまざまな単位が指定可能、ストレージとネットワーク制限の単位参照)の固定値。huge page の制限 参照 |
|
string |
- |
no |
コンテナ |
インスタンスごとのカーネルリソースの制限(例、オープンできるファイルの数)。カーネルリソース制限参照 |
|
string |
仮想マシンでは |
yes |
- |
ホストメモリに対する割合(パーセント)もしくはバイト数(さまざまな単位が指定可能、ストレージとネットワーク制限の単位参照)の固定値 |
|
string |
|
yes |
コンテナ |
|
|
bool |
|
no |
仮想マシン |
インスタンスを動かすために通常のシステムメモリではなくhuge pageを使用するかどうかを制御 |
|
bool |
|
yes |
コンテナ |
このインスタンスのあまり使われないページのスワップを推奨/非推奨にするかを制御 |
|
integer |
|
yes |
コンテナ |
インスタンスがディスクにスワップされるのを防ぐ(0〜10の整数。高い値を設定するほど、インスタンスがディスクにスワップされにくくなります) |
|
integer |
|
yes |
- |
高負荷時に、インスタンスのネットワークリクエストに割り当てる優先度(0〜10の整数)を制御 |
|
integer |
- (最大値) |
yes |
コンテナ |
インスタンス内で実行できるプロセスの最大数 |
CPU制限#
CPU制限はcgroupコントローラのcpuset
とcpu
を組み合わせて実装しています。
CPUピンニング#
limits.cpu
はcpuset
コントローラを使って、CPUを固定(ピンニング)します。
どのCPUを使うか、またはどれぐらいの数のCPUを使うかを指定できます。
どのCPUを使うかを指定するには、
limits.cpu
をCPUの組み合わせ(例:1,2,3
)あるいはCPUの範囲(例:0-3
)で指定できます。単一のCPUにピンニングするためには、CPUの個数との区別をつけるために、範囲を指定する文法(例:
1-1
)を使う必要があります。CPUの個数を指定した場合(例:
4
)、LXDは特定のCPUにピンニングされていない全てのインスタンスをダイナミックに負荷分散し、マシン上の負荷を分散しようとします。 インスタンスが起動したり停止するたびに、またシステムにCPUが追加されるたびに、インスタンスはリバランスされます。
注釈
LXDの仮想マシンはデフォルトでは1つのvCPUだけを割り当てられ、ホストのCPUのベンダーとタイプとマッチしたCPUとして現れますが、シングルコアでスレッドなしになります。
limits.cpu
を単一の整数に設定する場合、LXDは複数のvCPUを割り当ててゲストにはフルなコアとして公開します。
これらのvCPUはホスト上の特定の物理コアにはピンニングされません。
vCPUの個数はVMの稼働中に変更できます。
limits.cpu
をCPU ID(lxc info --resources
で表示されます)の範囲またはカンマ区切りリストの組に設定する場合、vCPUは物理コアにピンニングされます。
このシナリオでは、LXDはCPU設定が現実のハードウェアトポロジーとぴったり合うかチェックし、合う場合はそのトポロジーをゲスト内に複製します。
CPUピンニングを行う場合、VMの稼働中に設定を変更することはできません。
例えば、ピンニング設定が8個のスレッド、同じコアのスレッドの各ペアと2個のCPUに散在する偶数のコアを持つ場合、ゲストは2個のCPU、各CPUに2個のコア、各コアに2個のスレッドを持ちます。 NUMAレイアウトは同様に複製され、このシナリオでは、ゲストではほとんどの場合、2個のNUMAノード、各CPUソケットに1個のノードを持つことになるでしょう。
複数のNUMAノードを持つような環境では、メモリは同様にNUMAノードで分割され、ホスト上で適切にピンニングされ、その後ゲストに公開されます。
これら全てにより、ゲストスケジューラはソケット、コア、スレッドを適切に判断し、メモリを共有したりNUMAノード間でプロセスを移動する際にNUMAトポロジーを考慮できるので、ゲスト内で非常に高パフォーマンスな操作を可能にします。
割り当てと優先度 (コンテナのみ)#
limits.cpu.allowance
は、時間の制限を与えたときはCFSスケジューラのクォータを、パーセント指定をした場合は全体的なCPUシェアの仕組みを使います。
時間制限(例:
20ms/50ms
)はひとつのCPU相当の時間に関連するので、ふたつのCPUの時間を制限するには、100ms/50ms
のような指定を使うようにします。パーセント指定を使う場合は、制限は負荷状態にある場合のみに適用されます。 設定は、同じCPU(もしくはCPUの組)を使う他のインスタンスとの比較で、インスタンスに対するスケジューラの優先度を計算するのに使われます。
limits.cpu.priority
は、CPUの組を共有する複数のインスタンスに割り当てられたCPUの割合が同じ場合に、スケジューラの優先度スコアを計算するために使われる別の因子です。
huge page の制限#
LXD では limits.hugepage.[size]
キーを使ってコンテナが利用できるhuge pageの数を制限できます。
アーキテクチャはしばしばhuge pageのサイズを公開しています。 利用可能なhuge pageサイズはアーキテクチャによって異なります。
huge pageの制限は非特権コンテナ内でhugetlbfs
ファイルシステムのmount
システムコールをインターセプトするようにLXDを設定しているときには特に有用です。
LXDがhugetlbfs
mount
システムコールをインターセプトするとLXDは正しいuid
とgid
の値をmount
オプションに指定してhugetblfs
ファイルシステムをコンテナにマウントします。
これにより非特権コンテナからもhuge pageが利用可能となります。
しかし、ホストで利用可能なhuge pageをコンテナが使い切ってしまうのを防ぐため、limits.hugepages.[size]
を使ってコンテナが利用可能なhuge pageの数を制限することを推奨します。
huge pageの制限はhugetlb
cgroupコントローラによって実行されます。これはこれらの制限を適用するために、ホストシステムがhugetlb
コントローラをレガシーあるいはcgroupの単一階層構造(訳注:cgroup v2)に公開する必要があることを意味します。
カーネルリソース制限#
LXDは、インスタンスのリソース制限を設定するのに使用できる一般の名前空間キーlimits.kernel.*
を公開しています。
limits.kernel.*
接頭辞に続いて指定されるリソースについてLXDが全く検証を行わないという意味でこれは汎用です。
LXDは対象のカーネルがサポートする全ての利用可能なリソースについて知ることはできません。
代わりに、LXDはlimits.kernel.*
接頭辞の後の対応するリソースキーとその値をカーネルに単に渡します。
カーネルが適切な検証を行います。
これによりユーザーはシステム上でサポートされる任意の制限を指定できます。
よくある制限のいくつかは以下のとおりです。
キー |
リソース |
説明 |
---|---|---|
|
|
プロセスの仮想メモリーの最大サイズ |
|
|
プロセスのコアダンプファイルの最大サイズ |
|
|
プロセスが使えるCPU時間の秒単位の制限 |
|
|
プロセスのデータセグメントの最大サイズ |
|
|
プロセスが作成できるファイルの最大サイズ |
|
|
プロセスが確立できるファイルロック数の制限 |
|
|
プロセスがRAM上でロックできるメモリのバイト数の制限 |
|
|
引き上げることができるプロセスのnice値の最大値 |
|
|
プロセスがオープンできるファイルの最大値 |
|
|
呼び出し元プロセスのユーザーが作れるプロセスの最大数 |
|
|
プロセスに対して設定できるリアルタイム優先度の最大値 |
|
|
呼び出し元プロセスのユーザーがキューに入れられるシグナルの最大数 |
指定できる制限の完全なリストは getrlimit(2)
/setrlimit(2)
システムコールの man ページで確認できます。
limits.kernel.*
名前空間内で制限を指定するには、RLIMIT_
を付けずに、リソース名を小文字で指定します。
例えば、RLIMIT_NOFILE
はnofile
と指定します。
制限は、コロン区切りのふたつの数字もしくはunlimited
という文字列で指定します(例:limits.kernel.nofile=1000:2000
)。
単一の値を使って、ソフトリミットとハードリミットを同じ値に設定できます(例:limits.kernel.nofile=3000
)。
明示的に設定されないリソースは、インスタンスを起動したプロセスから継承されます。 この継承はLXDでなく、カーネルによって強制されることに注意してください。
マイグレーションオプション#
以下のインスタンスオプションはインスタンスがあるLXDサーバから別のサーバに移動される場合の挙動を制御します。
キー |
型 |
デフォルト値 |
ライブアップデート |
条件 |
説明 |
---|---|---|---|---|---|
|
bool |
|
yes |
コンテナ |
インスタンスのダウンタイムを短くするためにインスタンスのメモリを増分転送するかどうかを制御 |
|
integer |
|
yes |
コンテナ |
インスタンスを停止させる前に同期するメモリの割合(%) |
|
integer |
|
yes |
コンテナ |
インスタンスを停止させる前に完了させるメモリ転送処理の最大数 |
|
bool |
|
no |
仮想マシン |
ステートフルな停止/開始とスナップショットを許可するかどうかを制御(有効にするとこれと非互換ないくつかの機能は使えなくなります) |
NVIDIAとCUDAの設定#
以下のインスタンスオプションはインスタンスのNVIDIAとCUDAの設定を指定します。
キー |
型 |
デフォルト値 |
ライブアップデート |
条件 |
説明 |
---|---|---|---|---|---|
|
string |
|
no |
コンテナ |
インスタンスに必要なドライバケーパビリティ( |
|
bool |
|
no |
コンテナ |
ホストのNVIDIAとCUDAラインタイムライブラリをインスタンス内でも使えるようにする |
|
string |
- |
no |
コンテナ |
必要となるCUDAバージョンのバージョン表記( |
|
string |
- |
no |
コンテナ |
必要となるドライババージョンのバージョン表記( |
rawインスタンス設定のオーバーライド#
以下のインスタンスオプションはLXD自身が使用するバックエンド機能に直接制御できるようにします。
キー |
型 |
デフォルト値 |
ライブアップデート |
条件 |
説明 |
---|---|---|---|---|---|
|
blob |
- |
yes |
- |
生成されたプロファイルに追加するAppArmorプロファイルエントリ |
|
blob |
- |
no |
非特権コンテナ |
生(raw)のidmap設定(例: |
|
blob |
- |
no |
コンテナ |
生成された設定に追加する生(raw)のLXC設定 |
|
blob |
- |
no |
仮想マシン |
生成されたコマンドラインに追加される生(raw)のQEMU設定 |
|
blob |
- |
no |
仮想マシン |
生成された |
|
blob |
- |
no |
コンテナ |
生(raw)のSeccomp設定 |
重要
これらのraw.*
キーを設定するとLXDを予期せぬ形で壊してしまうかもしれません。
このため、これらのキーを設定するのは避けるほうが良いです。
QEMU設定のオーバーライド#
VMインスタンスに対しては、LXDは-readconfig
コマンドラインオプションでQEMUに渡す設定ファイルを使ってQEMUを設定します。
この設定ファイルは各インスタンスの起動前に生成されます。
設定ファイルは/var/log/lxd/<instance_name>/qemu.conf
に作られます。
デフォルトの設定はほとんどの典型的な利用ケース、VirtIOデバイスを持つモダンなUEFIゲスト、では正常に動作します。 しかし、いくつかの状況では、生成された設定をオーバーライドする必要があります。 例えば以下のような場合です。
UEFIをサポートしない古いゲストOSを実行する。
VirtIOがゲストOSでサポートされない場合にカスタムな仮想デバイスを指定する。
マシンの起動前にLXDでサポートされないデバイスを追加する。
ゲストOSと衝突するデバイスを削除する。
設定をオーバーライドするには、raw.qemu.conf
オプションを設定します。
これはqemu.conf
と似たような形式ですが、いくつか拡張した形式をサポートします。
これは複数行の設定オプションですので、複数のセクションやキーを変更するのに使えます。
生成された設定ファイルのセクションやキーを置き換えるには、別の値を持つセクションを追加します。
例えば、デフォルトの
virtio-gpu-pci
GPUドライバをオーバーライドするには以下のセクションを使います。raw.qemu.conf: |- [device "qemu_gpu"] driver = "qxl-vga"
セクションを削除するには、キー無しのセクションを指定します。 例えば以下のようにします。
raw.qemu.conf: |- [device "qemu_gpu"]
キーを削除するには、空の文字列を値として指定します。 例えば以下のようにします。
raw.qemu.conf: |- [device "qemu_gpu"] driver = ""
新規のセクションを追加するには、設定ファイル内に存在しないセクション名を指定します。
QEMUで使用される設定ファイル形式は同じ名前の複数のセクションを許可します。 以下はLXDで生成される設定の抜粋です。
[global]
driver = "ICH9-LPC"
property = "disable_s3"
value = "1"
[global]
driver = "ICH9-LPC"
property = "disable_s4"
value = "1"
オーバーライドするセクションを指定するには、インデクスを指定します。 例えば以下のようにします。
raw.qemu.conf: |-
[global][1]
value = "0"
セクションのインデクスは0(指定しない場合のデフォルト値)から始まりますので、上の例は以下の設定を生成します。
[global]
driver = "ICH9-LPC"
property = "disable_s3"
value = "1"
[global]
driver = "ICH9-LPC"
property = "disable_s4"
value = "0"
セキュリティポリシー#
以下のインスタンスオプションはインスタンスのセキュリティポリシーを制御します。
キー |
型 |
デフォルト値 |
ライブアップデート |
条件 |
説明 |
---|---|---|---|---|---|
|
bool |
|
no |
- |
インスタンス内の |
|
bool |
|
no |
コンテナ |
|
|
integer |
- |
no |
非特権コンテナ |
割り当てに使うホストIDの開始値(自動検出を上書きします) |
|
bool |
|
no |
非特権コンテナ |
インスタンス間で独立したidmapのセットを使用するかどうかを制御 |
|
integer |
- |
no |
非特権コンテナ |
使用するidmapのサイズ |
|
bool |
|
yes |
コンテナ |
インスタンス内でネストしたLXDの実行を許可するかどうかを制御 |
|
bool |
|
no |
コンテナ |
特権モードでインスタンスを実行するかどうかを制御 |
|
bool |
|
yes |
- |
インスタンスを削除から保護する |
|
bool |
|
yes |
コンテナ |
インスタンスのファイルシステムが起動時に UID/GID がシフト(再マッピング)されるのを防ぐ |
|
bool |
|
no |
仮想マシン |
状態の情報とメトリクスを |
|
bool |
|
no |
仮想マシン |
UEFIセキュアブートがデフォルトのMicrosoftのキーで有効になるかを制御 |
|
bool |
|
no |
仮想マシン |
AMD SEV (Secure Encrypted Virtualization)をこのVMで有効にするかを制御 |
|
bool |
|
no |
仮想マシン |
AMD SEV-ES (SEV Encrypted State)をこのVMで有効にするかを制御 |
|
string |
|
no |
仮想マシン |
ゲストオーナーの |
|
string |
|
no |
仮想マシン |
ゲストオーナーの |
|
string |
- |
no |
コンテナ |
|
|
string |
- |
no |
コンテナ |
|
|
bool |
|
no |
コンテナ |
|
|
bool |
|
no |
コンテナ |
デフォルトのシステムコールの拒否を有効にするかどうかを制御 |
|
bool |
|
no |
コンテナ |
|
|
bool |
|
no |
コンテナ |
cgroupの単一階層構造(訳注:cgroup v2)内のdevice cgroup用の |
|
bool |
|
no |
コンテナ |
|
|
bool |
|
no |
コンテナ |
|
|
string |
- |
yes |
コンテナ |
インスタンス内のプロセスが安全にマウントできるファイルシステムのカンマ区切りリスト |
|
string |
- |
yes |
コンテナ |
FUSE実装にリダイレクトするべき指定されたファイルシステムのマウント(例: |
|
bool |
|
yes |
コンテナ |
|
|
bool |
|
no |
コンテナ |
|
|
bool |
|
no |
コンテナ |
|
|
bool |
|
no |
コンテナ |
|
スナップショットのスケジュールと設定#
以下のインスタンスオプションはinstance snapshotsの作成と削除を制御します。
キー |
型 |
デフォルト値 |
ライブアップデート |
条件 |
説明 |
---|---|---|---|---|---|
|
string |
- |
no |
- |
Cron 表記 ( |
|
bool |
|
no |
- |
停止したインスタンスのスナップショットを自動的に作成するかどうかを制御 |
|
string |
|
no |
- |
スナップショットの名前を表す Pongo2 テンプレート文字列 (スケジュールされたスナップショットと名前無しのスナップショットで使用)。スナップショットの自動命名参照 |
|
string |
- |
no |
- |
スナップショットをいつ削除するかを制御 ( |
スナップショットの自動命名#
snapshots.pattern
オプションはスナップショット名をフォーマットする Pongo2 テンプレート文字列です。
スナップショット名にタイムスタンプを追加するには、Pongo2 コンテキスト変数 creation_date
を使用します。
スナップショット名に使用できない文字を含まないようにテンプレート文字列をフォーマットするようにしてください。
例えば、 snapshots.pattern
を {{ creation_date|date:'2006-01-02_15-04-05' }}
に設定し、作成日時を秒の制度まで落として、スナップショットを命名するようにします。
名前の衝突を防ぐ別の方法はパターン内に %d
プレースホルダを使うことです。
最初のスナップショットでは、プレースホルダは 0
に置換されます。
後続のスナップショットでは、既存のスナップショットが考慮され、プレースホルダの位置の最大の数を見つけます。
この数が 1 増加されて新しい名前に使用されます。
揮発性の内部データ#
以下の揮発性のキーはインスタンスに固有な内部データを保管するためLXDで現在内部的に使用されています。
キー |
型 |
説明 |
---|---|---|
|
string |
次の起動時にトリガーされるテンプレートフックの名前 |
|
string |
次の起動時に仮想マシンのNVRAMを再生成するかどうか |
|
string |
インスタンスを作成したイメージのハッシュ(存在する場合) |
|
string |
|
|
string |
待避したインスタンスのオリジン(クラスタメンバー) |
|
integer |
インスタンスの主idmapの範囲の最初のID |
|
string |
インスタンスで現在使用中のidmap |
|
string |
次にインスタンスが起動する際に使うidmap |
|
string |
シリアライズ化したインスタンスのUID/GIDマップ |
|
string |
最後にホストがシャットダウンした時点のインスタンスの状態 |
|
string |
最後の起動時に使用されたインスタンスの |
|
string |
インスタンスのUUID(全サーバとプロジェクト内でグローバルにユニーク) |
|
string |
インスタンスの時間の位置が後退するたびに変わるインスタンス generation UUID (全サーバとプロジェクト内でグローバルにユニーク) |
|
string |
次回のインスタンス起動時に適用されるディスククォータ |
|
string |
CephのディスクデバイスのRBDデバイスパス |
|
string |
ホスト上のネットワークデバイス名 |
|
string |
ネットワークデバイスのMACアドレス( |
|
string |
物理デバイスのネットワークデバイスが作られたかどうか( |
|
string |
物理デバイスをインスタンスに移動したときに使われていたネットワークデバイスの元のMTU |
|
string |
物理デバイスをインスタンスに移動したときに使われていたネットワークデバイスの元のMAC |
|
string |
VDPAデバイスファイルディスクリプタをインスタンスに移動させる際に使用されるVDPAデバイス名 |
|
string |
SR-IOVの仮想ファンクション(VF)をインスタンスに移動したときに使われていたVFのID |
|
string |
SR-IOVの仮想ファンクション(VF)をインスタンスに移動したときに使われていたVFのMAC |
|
string |
SR-IOVの仮想ファンクション(VF)をインスタンスに移動したときに使われていたVFの元のVLAN |
|
string |
SR-IOVの仮想ファンクション(VF)をインスタンスに移動したときに使われていたVFの元のspoofチェックの設定 |
注釈
揮発性のキーはユーザは設定できません。