インスタンスオプション¶
インスタンスオプションはインスタンスに直接関係する設定オプションです。
インスタンスオプションをどのように設定するかの手順はインスタンスオプションを設定するを参照してください。
key/value 形式の設定は、名前空間で分けられています。 以下のオプションが利用できます:
各オプションに型が定義されていますが、すべての値は文字列として保管され、REST API で文字列としてエクスポートされる(こうすることで後方互換性を壊すことなく任意の追加の値をサポートできます)ことに注意してください。
その他のオプション¶
以下のセクションに一覧表示される設定オプションに加えて、以下のインスタンスオプションがサポートされます:
| Key: | agent.nic_config |
| Type: | bool |
| Default: |
|
| Live update: | yes |
| Condition: | virtual machine |
コンテナでは、デフォルトネットワークインタフェースの名前とMTUを使うようになります。
仮想マシンでは、このオプションをtrueに設定するとデフォルトのネットワークインタフェースの名前とMTUがインスタンスデバイスと同じになります。
| Key: | cluster.evacuate |
| Type: | string |
| Default: |
|
| Live update: | no |
cluster.evacuateはクラスタメンバーが退避される際にインスタンスがどのように扱われるかを制御します。
利用可能なモード:
auto(デフォルト): インスタンスのタイプと設定されたデバイスに基づいてベストな退避の方法をシステムが自動的に決定します:マイグレーションに適さないデバイスがある場合、インスタンスはマイグレーションされません(停止のみされます)。
ライブマイグレーションは
migration.stateful設定を有効にした仮想マシンでのみ実行され、仮想マシンのすべてのデバイスもマイグレートされます。
live-migrate: インスタンスが別のサーバーにライブマイグレートされます。つまりインスタンスはマイグレーションプロセス中にも稼働して操作可能なままになり、切断は最小限ですみます。migrate: このモードでは、インスタンスはクラスター内の他のサーバーにマイグレートされます。マイグレーションプロセスはライブではありません。つまり、インスタンスはマイグレーション中に短時間ダウンタイムが発生します。stop: インスタンスはマイグレートされません。代わりに現在のサーバー上で停止されます。stateful-stop: インスタンスはマイグレートされません。代わりに現在のサーバー上で停止されますが、復元時にレジュームできるように実行状態(メモリ)をディスク上に保存します。force-stop: インスタンスはマイグレートされません。代わりに強制停止されます。
詳細はクラスタメンバーの退避と復元を参照してください。
| Key: | linux.kernel_modules |
| Type: | string |
| Live update: | yes |
| Condition: | container |
カーネルモジュールをカンマ区切りリストで指定します。
| Key: | environment.* |
| Type: | string |
| Live update: | yes |
ブートと実行中に設定される追加の環境変数。
| Key: | linux.sysctl.* |
| Type: | string |
| Live update: | no |
| Condition: | container |
| Key: | smbios11.* |
| Type: | string |
| Live update: | yes |
SMBIOS Type 11の設定キー。
| Key: | systemd.credential-binary.* |
| Type: | string |
| Live update: | yes |
コンテナでは読み取り専用のbindマウント、仮想マシンではSMBIOS Type 11のデータとして渡されるsystemdの機密情報のキー/値ペアー。値はBase64エンコードされます。
| Key: | systemd.credential.* |
| Type: | string |
| Live update: | yes |
コンテナでは読み取り専用のbindマウント、仮想マシンではSMBIOS Type 11のデータとして渡されるsystemdの機密情報のキー/値ペアー。
| Key: | environment.* |
| Type: | string |
| Live update: | yes (exec) |
key/value の環境変数をインスタンスにエクスポートできます。
これらはその後 incus exec に設定されます。
ブート関連のオプション¶
以下のインスタンスオプションはインスタンスのブート関連の挙動を制御します:
| Key: | boot.autorestart |
| Type: | bool |
| Live update: | no |
trueに設定するとインスタンスの異常終了時に1分間に10回まで自動で再起動します。
| Key: | boot.autostart |
| Type: | bool |
| Live update: | no |
未設定あるいはlast-stateに設定された場合、最後の状態を復元します。
| Key: | boot.autostart.delay |
| Type: | integer |
| Default: | 0 |
| Live update: | no |
インスタンスが起動してから次のインスタンスを起動するまでの待ち時間の秒数。
| Key: | boot.autostart.priority |
| Type: | integer |
| Live update: | no |
一番大きな値のインスタンスが最初に起動されます。 優先度が設定されていないインスタンスは優先度が設定されているインスタンスよりも先に(いくつかの並列度で)起動されます。
| Key: | boot.host_shutdown_action |
| Type: | string |
| Default: | stop |
| Live update: | yes |
ホストの停止の際に行うアクション
有効な値はstop、force-stop、stateful-stop。
| Key: | boot.host_shutdown_timeout |
| Type: | integer |
| Default: | 30 |
| Live update: | yes |
インスタンスを強制停止する前に停止するのを待つ秒数。
cloud-init 設定¶
以下のインスタンスオプションはインスタンスのcloud-init設定を制御します:
| Key: | cloud-init.network-config |
| Type: | string |
| Default: |
|
| Live update: | no |
| Condition: | イメージでサポートされる場合 |
中身がcloud-initへのシード値として使用されます。
| Key: | cloud-init.user-data |
| Type: | string |
| Default: |
|
| Live update: | no |
| Condition: | イメージでサポートされる場合 |
中身がcloud-initへのシード値として使用されます。
| Key: | cloud-init.vendor-data |
| Type: | string |
| Default: |
|
| Live update: | no |
| Condition: | イメージでサポートされる場合 |
中身がcloud-initへのシード値として使用されます。
| Key: | user.network-config |
| Type: | string |
| Default: |
|
| Live update: | no |
| Condition: | イメージでサポートされる場合 |
| Key: | user.user-data |
| Type: | string |
| Default: |
|
| Live update: | no |
| Condition: | イメージでサポートされる場合 |
| Key: | user.vendor-data |
| Type: | string |
| Default: |
|
| Live update: | no |
| Condition: | イメージでサポートされる場合 |
これらのオプションのサポートは使用するイメージに依存し、保証はされません。
cloud-init.user-dataとcloud-init.vendor-dataの両方を指定すると、両方のオプションの設定がマージされます。
このため、これらのオプションに設定するcloud-init設定が同じキーを含まないようにしてください。
リソース制限¶
以下のインスタンスオプションはインスタンスのリソース制限を指定します:
| Key: | limits.cpu |
| Type: | string |
| Default: | 1 (VMs) |
| Live update: | yes |
インスタンスに見せるCPUの番号または範囲。
仮想マシンでは、sockets=2,cores=4,threads=2の形式のCPUトポロジーを指定することもできます。
詳細はCPUピンニングを参照してください。
| Key: | limits.cpu.allowance |
| Type: | string |
| Default: | 100% |
| Live update: | yes |
| Condition: | container |
CPUのどれだけを使えるか制御するため、パーセント(50%)でソフトリミットかタイムスライス(25ms/100ms)でハードリミットを指定します。
詳細は割り当てと優先度(コンテナのみ)を指定してください。
| Key: | limits.cpu.nodes |
| Type: | string |
| Live update: | yes |
インスタンスのCPUを配置するNUMAノードIDのカンマ区切りリストか範囲。
あるいは、起動時に一番忙しくないNUMAノードをIncusが選んで使用するbalancedという値も使えます。
詳細は割り当てと優先度(コンテナのみ)を参照してください。
| Key: | limits.cpu.priority |
| Type: | integer |
| Default: |
|
| Live update: | yes |
| Condition: | container |
リソースをオーバーコミットする際、同じCPUを共有する他のインスタンスと比較したCPUスケジュールの優先度を指定します。 0から10の間の整数を指定します。
詳細は割り当てと優先度(コンテナのみ)を参照してください。
| Key: | limits.disk.priority |
| Type: | integer |
| Default: |
|
| Live update: | yes |
負荷がかかった際のインスタンスのI/Oリクエストにどれぐらいの優先度を与えるかを制御します。
0から10の間の整数を指定します。
| Key: | limits.hugepages.1GB |
| Type: | string |
| Live update: | yes |
| Condition: | container |
1 GB huge pageの数を制限するための(バイト単位の)固定値。 さまざまな接尾辞がサポートされます(ストレージ、メモリとネットワーク制限の単位参照)。
詳細はhuge page の制限を参照してください。
| Key: | limits.hugepages.1MB |
| Type: | string |
| Live update: | yes |
| Condition: | container |
1 MB huge pageの数を制限するための(バイト単位の)固定値。 さまざまな接尾辞がサポートされます(ストレージ、メモリとネットワーク制限の単位参照)。
詳細はhuge page の制限を参照してください。
| Key: | limits.hugepages.2MB |
| Type: | string |
| Live update: | yes |
| Condition: | container |
2 MB huge pageの数を制限するための(バイト単位の)固定値。 さまざまな接尾辞がサポートされます(ストレージ、メモリとネットワーク制限の単位参照)。
詳細はhuge page の制限を参照してください。
| Key: | limits.hugepages.64KB |
| Type: | string |
| Live update: | yes |
| Condition: | container |
64 KB huge pageの数を制限するための(バイト単位の)固定値。 さまざまな接尾辞がサポートされます(ストレージ、メモリとネットワーク制限の単位参照)。
詳細はhuge page の制限を参照してください。
| Key: | limits.memory |
| Type: | string |
| Default: |
|
| Live update: | yes |
ホストのメモリのパーセンテージかバイト単位の固定値。 さまざまな接尾辞がサポートされます。
詳細はストレージ、メモリとネットワーク制限の単位を参照してください。
| Key: | limits.memory.enforce |
| Type: | string |
| Default: |
|
| Live update: | yes |
| Condition: | container |
インスタンスの目盛リミットがhardの場合、インスタンスはそのリミットを超えられません。
softの場合、ホストのメモリに余裕があればインスタンスはそのリミットを超えられます。
| Key: | limits.memory.hotplug |
| Type: | string |
| Default: |
|
| Live update: | yes |
| Condition: | virtual machine |
このオプションをfalseに設定すると、メモリホットプラグを完全に無効にします。
あるいは、ホットプラグされるメモリーの上限を指定するバイト数を設定できます。
値はlimits.memory以上にする必要があります。
| Key: | limits.memory.hugepages |
| Type: | bool |
| Default: |
|
| Live update: | no |
| Condition: | virtual machine |
このオプションがfalseに設定された場合、通常のシステムメモリが使用されます。
| Key: | limits.memory.oom_priority |
| Type: | integer |
| Default: |
|
| Live update: | yes |
-1000と1000の間の整数を指定します。 負の値はインスタンスをOOM killer (Out Of Memory killer)に殺されにくくします。 正の値は殺されやすくします。 デフォルト値の0はOut of Memoryスコアを調整しないことを意味します。
| Key: | limits.memory.swap |
| Type: | string |
| Default: |
|
| Live update: | yes |
| Condition: | container |
trueかfalseに設定すると、カーネルがスワップしたメモリの一部をコンテナが受け取るかどうかを制御します。
あるいはバイト数の値をセットすると、コンテナがスワップを通じて追加のメモリを使用できるようにします。
| Key: | limits.memory.swap.priority |
| Type: | integer |
| Default: |
|
| Live update: | yes |
| Condition: | container |
0から10の間の整数を指定します。 値が高いほど、インスタンスがディスクにスワップされにくくなります。
| Key: | limits.processes |
| Type: | integer |
| Default: | empty |
| Live update: | yes |
| Condition: | container |
空の場合は、制限なし。
| Key: | limits.kernel.* |
| Type: | string |
| Live update: | no |
| Condition: | container |
インスタンスにカーネルの制限を設定できます、たとえば、オープンできるファイル数を制限できます。 詳細は カーネルリソース制限 を参照してください。
仮想マシン内のメモリー制限¶
Incusは仮想マシンのメモリーの増加と削減の両方をサポートしています。
メモリーの増加はメモリーホットプラグで実現されます。これは実質的には仮想メモリースティックを追加するものです。 これには16個の仮想スロットという制限があり、VMを再起動無しでメモリーを増加できる回数を制限しています。
注釈
大きなリソース消費とゲストとの互換性の問題を避けるため、Incusはクラスター環境でのメモリーホットプラグを最大1TiBに制限します。 スタンドアロンのホストでは、デフォルトの制限はホストシステムのメモリ合計量に一致します。 CPUによっては(物理/仮想ビットで)アドレス可能なメモリの量によってさらに制限されます。
この制限を拡張するには、インスタンスを停止し、memory.limitを更新し、再度起動する必要があります。
メモリーの削減は、ゲストで問題が起きるリスクが高いため、ホットリムーブは使いません。 代わりにメモリーバルーンデバイスが使われ、ゲスト内でメモリープレッシャーをかけてメモリーが解放されるようにします。
これはかなり遅いプロセスで、メモリーの削減が指示された値に合わずに失敗することがよくあります。 失敗した場合は、より低い値を適用することで再度試行をトリガーします。
それぞれの試行でゲストで使える実質のメモリーが削減され、適用された希望のメモリー制限にいずれはゲストが到達するはずです。
CPU制限¶
CPU 使用率を制限するための異なるオプションがあります:
limits.cpuを設定して、インスタンスが見ることができ、使用することができる CPU を制限します。 このオプションの設定方法は、CPUピンニングを参照してください。limits.cpu.allowanceを設定して、インスタンスが利用可能な CPU にかける負荷を制限します。 このオプションはコンテナのみで利用可能です。 このオプションの設定方法は、割り当てと優先度(コンテナのみ)を参照してください。
これらのオプションは同時に設定して、インスタンスが見ることができる CPU とそれらのインスタンスの許可される使用量の両方を制限することが可能です。
しかし、limits.cpu.allowanceを時間制限と共に使用する場合、スケジューラーに多くの制約をかけ、効率的な割り当てが難しくなる可能性があるため、limits.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)、Incus は特定の CPU にピンニングされていないすべてのインスタンスをダイナミックに負荷分散し、マシン上の負荷を分散しようとします。 インスタンスが起動したり停止するたびに、またシステムに CPU が追加されるたびに、インスタンスはリバランスされます。
仮想マシンのCPUリミット¶
注釈
Incus はlimits.cpuオプションのライブアップデートをサポートします。
しかし、仮想マシンの場合は、対応する CPU がホットプラグされるだけです。
ゲストのオペレーティングシステムによって、新しい CPU をオンラインにするためには、インスタンスを再起動するか、なんらかの手動の操作を実行する必要があります。
Incus の仮想マシンはデフォルトでは 1 つの vCPU だけを割り当てられ、ホストの CPU のベンダーとタイプとマッチした CPU として現れますが、シングルコアでスレッドなしになります。
limits.cpuを単一の整数に設定する場合、Incus は複数の vCPU を割り当ててゲストにはフルなコアとして公開します。
これらの vCPU はホスト上の特定の物理コアにはピンニングされません。
vCPU の個数は VM の稼働中に変更できます。
注釈
大きなリソース消費とゲストとの互換性の問題を避けるため、Incusはクラスター環境でのCPUホットプラグを最大64コアーに制限します。
64 CPUコアーより多くを使うVMは停止し、limits.cpuプロパティーを調節する必要があります。
また、limits.cpuにsockets=2,cores=4,threads=2形式の値を設定することで特定のCPUトポロジーをリクエストすることもできます。
この3つのフィールドはどれも省略でき、省略時のデフォルト値は1です。
例えば、sockets=2は2つのvCPU(2つのソケットで、それぞれが1つのコアーと1つのスレッド)になり、cores=4は4つのvCPU(1つのソケットと4つのコアー)になります。
結果のトポロジーはゲストにそのまま公開され、vCPUはホストの特定の物理コアーにピンニングはされません。
注釈
CPUトポロジーのシンタックスを使うのはCPUホットプラグとは互換性がありません。 CPUホットプラグの値へ、あるいはCPUホットプラグの値から切り替える際は仮想マシンを停止する必要があります。
limits.cpuを CPU ID(incus info --resources で表示されます)の範囲またはカンマ区切りリストの組に設定する場合、vCPU は物理コアにピンニングされます。
このシナリオでは、Incus は 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)はハードリミットです。 たとえば、コンテナが最大で 1 つの CPU を使用することを許可する場合は、limits.cpu.allowanceを100ms/100msのような値に設定します。この値は 1 つの CPU に相当する時間に対する相対値なので、2 つの CPU の時間を制限するには、100ms/50msあるいは200ms/100msのような値を使用します。パーセント指定を使う場合は、制限は負荷状態にある場合のみに適用されるソフトリミットです。 設定は、同じ CPU(もしくは CPU の組)を使う他のインスタンスとの比較で、インスタンスに対するスケジューラの優先度を計算するのに使われます。 たとえば、負荷時のコンテナの CPU 使用率を 1 つの CPU に制限するためには、
limits.cpu.allowanceを100%に設定します。
limits.cpu.priority は、CPU の組を共有する複数のインスタンスに割り当てられた CPU の割合が同じ場合に、スケジューラの優先度スコアを計算するために使われる別の因子です。
huge page の制限¶
Incus では limits.hugepage.[size] キーを使ってコンテナが利用できる huge page の数を制限できます。
アーキテクチャはしばしば huge page のサイズを公開しています。 利用可能な huge page サイズはアーキテクチャによって異なります。
huge page の制限は非特権コンテナ内でhugetlbfsファイルシステムのmountシステムコールをインターセプトするように Incus を設定しているときには特に有用です。
Incus がhugetlbfs mountシステムコールをインターセプトすると Incus は正しいuidとgidの値をmountオプションに指定してhugetblfsファイルシステムをコンテナにマウントします。
これにより非特権コンテナからも huge page が利用可能となります。
しかし、ホストで利用可能な huge page をコンテナが使い切ってしまうのを防ぐため、limits.hugepages.[size]を使ってコンテナが利用可能な huge page の数を制限することを推奨します。
huge page の制限はhugetlb cgroup コントローラーによって実行されます。これはこれらの制限を適用するために、ホストシステムがhugetlbコントローラーを公開する必要があることを意味します。
カーネルリソース制限¶
コンテナインスタンスには、リソース制限を設定するのに使用できる一般の名前空間キーlimits.kernel.*を公開しています。
limits.kernel.*接頭辞に続いて指定されるリソースについて Incus が全く検証を行わないという意味でこれは汎用です。
Incus は対象のカーネルがサポートするすべての利用可能なリソースについて知ることはできません。
代わりに、Incus はlimits.kernel.*接頭辞の後の対応するリソースキーとその値をカーネルに単に渡します。
カーネルが適切な検証を行います。
これによりユーザーはシステム上でサポートされる任意の制限を指定できます。
よくある制限のいくつかは以下のとおりです:
| Key: | limits.kernel.fsize |
| Type: | string |
| Resource: |
|
| Key: | limits.kernel.locks |
| Type: | string |
| Resource: |
|
| Key: | limits.kernel.memlock |
| Type: | string |
| Resource: |
|
| Key: | limits.kernel.nice |
| Type: | string |
| Resource: |
|
| Key: | limits.kernel.nofile |
| Type: | string |
| Resource: |
|
| Key: | limits.kernel.nproc |
| Type: | string |
| Resource: |
|
| Key: | limits.kernel.rtprio |
| Type: | string |
| Resource: |
|
| Key: | limits.kernel.sigpending |
| Type: | string |
| Resource: |
|
指定できる制限の完全なリストは getrlimit(2)/setrlimit(2)システムコールの man ページで確認できます。
limits.kernel.*名前空間内で制限を指定するには、RLIMIT_を付けずに、リソース名を小文字で指定します。
たとえば、RLIMIT_NOFILEはnofileと指定します。
制限は、コロン区切りのふたつの数字もしくはunlimitedという文字列で指定します(たとえば、limits.kernel.nofile=1000:2000)。
単一の値を使って、ソフトリミットとハードリミットを同じ値に設定できます(たとえば、limits.kernel.nofile=3000)。
明示的に設定されないリソースは、コンテナを起動したプロセスから継承されます。 この継承は Incus でなく、カーネルによって強制されることに注意してください。
マイグレーションオプション¶
以下のインスタンスオプションはインスタンスがあるIncusサーバーから別のサーバーに移動される場合の挙動を制御します:
| Key: | migration.incremental.memory |
| Type: | bool |
| Default: |
|
| Live update: | yes |
| Condition: | container |
インスタンスのメモリのインクリメンタルなメモリ転送を使用するとダウンタイムを短縮できます。
| Key: | migration.incremental.memory.goal |
| Type: | integer |
| Default: |
|
| Live update: | yes |
| Condition: | container |
| Key: | migration.incremental.memory.iterations |
| Type: | integer |
| Default: |
|
| Live update: | yes |
| Condition: | container |
NVIDIAとCUDAの設定¶
以下のインスタンスオプションはインスタンスの NVIDIA と CUDA の設定を指定します:
| Key: | nvidia.driver.capabilities |
| Type: | string |
| Default: |
|
| Live update: | no |
| Condition: | container |
指定されたドライバーのケイパビリティはlibnvidia-container NVIDIA_DRIVER_CAPABILITIESを設定するのに使われます。
| Key: | nvidia.require.cuda |
| Type: | string |
| Live update: | no |
| Condition: | container |
指定されたバージョンはlibnvidia-container NVIDIA_REQUIRE_CUDAを設定するのに使われます。
| Key: | nvidia.require.driver |
| Type: | string |
| Live update: | no |
| Condition: | container |
指定されたバージョンはlibnvidia-container NVIDIA_REQUIRE_CUDAを設定するのに使われます。
OCI設定¶
以下のインスタンスオプションはインスタンスのOCI設定を指定します:
| Key: | oci.cwd |
| Type: | string |
| Live update: | no |
| Condition: | OCIコンテナ |
OCIコンテナのワーキングディレクトリを上書きします。
| Key: | oci.entrypoint |
| Type: | string |
| Live update: | no |
| Condition: | OCIコンテナ |
OCIコンテナのエントリポイントを上書きします。
| Key: | oci.gid |
| Type: | string |
| Live update: | no |
| Condition: | OCIコンテナ |
OCIコンテナ内で稼働するプロセスのGIDを上書きします。
rawインスタンス設定のオーバーライド¶
以下のインスタンスオプションは Incus 自身が使用するバックエンド機能に直接制御できるようにします:
| Key: | raw.apparmor |
| Type: | blob |
| Live update: | yes |
指定されたエントリは生成されるプロファイルに追加されます。
| Key: | raw.idmap |
| Type: | blob |
| Live update: | no |
| Condition: | unprivileged container |
例: both 1000 1000
| Key: | raw.qemu |
| Type: | blob |
| Live update: | no |
| Condition: | virtual machine |
| Key: | raw.qemu.conf |
| Type: | blob |
| Live update: | no |
| Condition: | virtual machine |
詳細はQEMU設定のオーバーライドを参照してください。
| Key: | raw.qemu.qmp.early |
| Type: | blob |
| Live update: | no |
| Condition: | virtual machine |
| Key: | raw.qemu.qmp.post-start |
| Type: | blob |
| Live update: | no |
| Condition: | virtual machine |
| Key: | raw.qemu.qmp.pre-start |
| Type: | blob |
| Live update: | no |
| Condition: | virtual machine |
| Key: | raw.qemu.scriptlet |
| Type: | string |
| Live update: | no |
| Condition: | virtual machine |
重要
これらのraw.*キーを設定すると Incus を予期せぬ形で壊してしまうかもしれません。
このため、これらのキーを設定するのは避けるほうが良いです。
QEMU設定のオーバーライド¶
VM インスタンスに対しては、Incus は-readconfigコマンドラインオプションで QEMU に渡す設定ファイルを使って QEMU を設定します。
この設定ファイルは各インスタンスの起動前に生成されます。
設定ファイルは/run/incus/<instance_name>/qemu.confに作られます。
デフォルトの設定はほとんどの典型的な利用ケース、VirtIO デバイスを持つモダンな UEFI ゲスト、では正常に動作します。 しかし、いくつかの状況では、生成された設定をオーバーライドする必要があります。 たとえば以下のような場合です。
UEFI をサポートしない古いゲスト OS を実行する。
VirtIO がゲスト OS でサポートされない場合にカスタムな仮想デバイスを指定する。
マシンの起動前に Incus でサポートされないデバイスを追加する。
ゲスト OS と衝突するデバイスを削除する。
設定をオーバーライドするには、raw.qemu.confオプションを設定します。
これはqemu.confと似たような形式ですが、いくつか拡張した形式をサポートします。
これは複数行の設定オプションですので、複数のセクションやキーを変更するのに使えます。
生成された設定ファイルのセクションやキーを置き換えるには、別の値を持つセクションを追加します。
たとえば、デフォルトの
virtio-gpu-pciGPU ドライバーをオーバーライドするには以下のセクションを使います:raw.qemu.conf: |- [device "qemu_gpu"] driver = "qxl-vga"
セクションを削除するには、キー無しのセクションを指定します。 たとえば:
raw.qemu.conf: |- [device "qemu_gpu"]
キーを削除するには、空の文字列を値として指定します。 たとえば:
raw.qemu.conf: |- [device "qemu_gpu"] driver = ""
新規のセクションを追加するには、設定ファイル内に存在しないセクション名を指定します。
QEMU で使用される設定ファイル形式は同じ名前の複数のセクションを許可します。 以下は Incus で生成される設定の抜粋です。
[global]
driver = "ICH9-LPC"
property = "disable_s3"
value = "1"
[global]
driver = "ICH9-LPC"
property = "disable_s4"
value = "0"
オーバーライドするセクションを指定するには、インデクスを指定します。
たとえば:
最初のglobalセクションはS3(RAMへのサスペンド)を無効化し、2番目のglobalセクションはS4(ディスクへのサスペンド)を有効にしました。S4を無効にするには、2番目のglobalセクションを以下のように指定する必要があります:
raw.qemu.conf: |-
[global][1]
value = "1"
セクションのインデクスは 0(指定しない場合のデフォルト値)から始まりますので、上の例は以下の設定を生成します:
[global]
driver = "ICH9-LPC"
property = "disable_s3"
value = "1"
[global]
driver = "ICH9-LPC"
property = "disable_s4"
value = "1"
QEMUランタイムオブジェクトをオーバーライド¶
QEMUに渡す引数や設定ファイルを変更するのにraw.qemuとraw.qemu.confが使えますが、代わりにQMPを通して今では多くのデバイスが追加されます。
これらは実行時に再設定する必要があるデバイスのためにIncusに使用され、実質的にはどんなものでもホットプラグできます。
これらのデバイスは設定やコマンドラインではオーバーライドできませんが、代わりに追加の設定キーがQMPコマンドを直接実行するのに使えます。
固定のコマンドをraw.qemu.early、raw.qemu.pre-start、raw.qemu.post-start設定キーで提供できます。
これらは実行するQMPのコマンドのリストをJSONでエンコードしたものを指定します。
以下のフックがあります:
earlyはQEMNUの起動後、QMPを通してIncusによってデバイスが追加される前に実行されますpre-startはIncusがすべてのデバイスを追加した後、VMの起動前に実行されますpost-startはVMの起動直後に実行されます
高度な使い方¶
ダイナミックなQMPのインタラクションが必要、例えばあるオブジェクトの値を変更したり新しいオブジェクトを生成する前に現在の値を取得するような場合には、スクリプトレットを使ってこれらの同じフックにアタッチすることもできます。
これはraw.qemu.scriptletによって行います。スクリプトレットはqemu_hook(instance, stage)関数を定義する必要があります。instance引数はVMを表すオブジェクトで、属性はapi.Instance構造体と同じです。stage引数はフックの名前(config、early、pre-start、post-start)でconfigはQEMNUの起動前に実行され、他のフックは上記のとおりです。
以下のコマンドがスクリプトレットで利用可能です:
log_infoはINFOメッセージをログ出力しますlog_warnはWARNINGメッセージをログ出力しますlog_errorはERRORメッセージをログ出力しますrun_qmpは任意のQMPコマンド(JSON形式で指定)を実行し、その出力を返しますrun_commandはオプショナルな引数のリストとともに指定したコマンドを実行し、その出力を返しますget_qemu_cmdlineはQEMNUに渡されるコマンドライン引数の一覧を返しますset_qemu_cmdlineはQEMNUに渡されるコマンドライン引数の一覧を設定しますget_qemu_confはQEMNU設定をディクショナリとして返しますset_qemu_confはディクショナリからQEMNU設定を設定します
さらに以下のエイリアスコマンド(内部ではrun_commandを使用)がスクリプトを単純化するために使えます:
blockdev_addblockdev_delchardev_addchardev_changechardev_removedevice_adddevice_delnetdev_addnetdev_delobject_addobject_delqom_getqom_listqom_set
QEMU設定を変更できる関数はconfigフック内でのみ実行できます。一方、QMPコマンドを実行する関数はconfigフック内では実行できません。
セキュリティーポリシー¶
以下のインスタンスオプションはインスタンスのSecurityポリシーを制御します:
| Key: | security.agent.metrics |
| Type: | bool |
| Default: |
|
| Live update: | no |
| Condition: | virtual machine |
| Key: | security.bpffs.delegate_attachs |
| Type: | string |
| Live update: | no |
| Condition: | unprivileged container |
詳細はBPFトークン移譲を参照してください。
| Key: | security.bpffs.delegate_cmds |
| Type: | string |
| Live update: | no |
| Condition: | unprivileged container |
詳細はBPFトークン移譲を参照してください。
| Key: | security.bpffs.delegate_maps |
| Type: | string |
| Live update: | no |
| Condition: | unprivileged container |
詳細はBPFトークン移譲を参照してください。
| Key: | security.bpffs.delegate_progs |
| Type: | string |
| Live update: | no |
| Condition: | unprivileged container |
詳細はBPFトークン移譲を参照してください。
| Key: | security.bpffs.path |
| Type: | string |
| Default: |
|
| Live update: | no |
| Condition: | unprivileged container |
指定されたパスはコンテナ内に存在する必要があります。
BPFファイルシステムはいずれかのsecurity.bpffs.delegate_*オプションが設定されている場合にのみマウントされます。
詳細はBPFトークン移譲を参照してください。
| Key: | security.csm |
| Type: | bool |
| Default: |
|
| Live update: | no |
| Condition: | virtual machine |
このオプションを有効にする際は、security.securebootをfalseに設定してください。
| Key: | security.guestapi |
| Type: | bool |
| Default: |
|
| Live update: | no |
詳細はインスタンス〜ホスト間の通信を参照してください。
| Key: | security.guestapi.images |
| Type: | bool |
| Default: |
|
| Live update: | no |
| Condition: | container |
| Key: | security.idmap.base |
| Type: | integer |
| Live update: | no |
| Condition: | unprivileged container |
このオプションを設定すると自動検出をオーバーライドします。
| Key: | security.idmap.isolated |
| Type: | bool |
| Default: |
|
| Live update: | no |
| Condition: | unprivileged container |
指定すると、このインスタンスに使用するidmapはこのオプションを設定したインスタンス間でユニークになります。
| Key: | security.idmap.size |
| Type: | integer |
| Live update: | no |
| Condition: | unprivileged container |
| Key: | security.nesting |
| Type: | bool |
| Default: |
|
| Live update: | yes |
| Condition: | container |
| Key: | security.privileged |
| Type: | bool |
| Default: |
|
| Live update: | no |
| Condition: | container |
| Key: | security.protection.delete |
| Type: | bool |
| Default: |
|
| Live update: | yes |
| Key: | security.protection.shift |
| Type: | bool |
| Default: |
|
| Live update: | yes |
| Condition: | container |
このオプションをtrueにするとインスタンスの起動時にファイルシステムでUID/GIDがシフトされなくなります。
| Key: | security.secureboot |
| Type: | bool |
| Default: |
|
| Live update: | no |
| Condition: | virtual machine |
このオプションを無効にする場合、security.csmを有効にすることを検討してください。
| Key: | security.sev |
| Type: | bool |
| Default: |
|
| Live update: | no |
| Condition: | virtual machine |
| Key: | security.sev.policy.es |
| Type: | bool |
| Default: |
|
| Live update: | no |
| Condition: | virtual machine |
| Key: | security.sev.session.data |
| Type: | string |
| Default: |
|
| Live update: | no |
| Condition: | virtual machine |
| Key: | security.sev.session.dh |
| Type: | string |
| Default: |
|
| Live update: | no |
| Condition: | virtual machine |
| Key: | security.syscalls.allow |
| Type: | string |
| Live update: | no |
| Condition: | container |
\nで区切られた許可するシステムコールのリスト。
このリストはsecurity.syscalls.denyと相互排他的である必要があります。
| Key: | security.syscalls.deny |
| Type: | string |
| Live update: | no |
| Condition: | container |
\nで区切られた拒否するシステムコールのリスト。
このリストはsecurity.syscalls.allowと相互排他的である必要があります。
| Key: | security.syscalls.deny_compat |
| Type: | bool |
| Default: |
|
| Live update: | no |
| Condition: | container |
x86_64上では、このオプションはcompat_*システムコールをブロックするかどうかを制御します。
他のアーキテクチャーでは、このオプションは無視されます。
| Key: | security.syscalls.deny_default |
| Type: | bool |
| Default: |
|
| Live update: | no |
| Condition: | container |
| Key: | security.syscalls.intercept.bpf |
| Type: | bool |
| Default: |
|
| Live update: | no |
| Condition: | container |
| Key: | security.syscalls.intercept.bpf.devices |
| Type: | bool |
| Default: |
|
| Live update: | no |
| Condition: | container |
このオプションはBPFプログラムが単一階層構造のデバイスcgroupをロードするのを許可するかどうかを制御します。
| Key: | security.syscalls.intercept.mknod |
| Type: | bool |
| Default: |
|
| Live update: | no |
| Condition: | container |
これらのシステムコールはキャラクター/ブロックデバイスの限定されたサブセットの作成を許可します。
| Key: | security.syscalls.intercept.mount |
| Type: | bool |
| Default: |
|
| Live update: | no |
| Condition: | container |
| Key: | security.syscalls.intercept.mount.allowed |
| Type: | string |
| Live update: | yes |
| Condition: | container |
インスタンス内部のプロセスが安全にマウントできるファイルシステムのカンマ区切りリストを指定します。
| Key: | security.syscalls.intercept.mount.fuse |
| Type: | string |
| Live update: | yes |
| Condition: | container |
FUSE実装にリダイレクトすべきファイルシステムのマウントを指定します(例えば、ext4=fuse2fs)。
| Key: | security.syscalls.intercept.mount.shift |
| Type: | bool |
| Default: |
|
| Live update: | yes |
| Condition: | container |
| Key: | security.syscalls.intercept.sched_setscheduler |
| Type: | bool |
| Default: |
|
| Live update: | no |
| Condition: | container |
このシステムコールはプロセスの優先度を増加させることができます。
| Key: | security.syscalls.intercept.setxattr |
| Type: | bool |
| Default: |
|
| Live update: | no |
| Condition: | container |
このシステムコールは制限された拡張属性の限定されたサブセットを設定できます。
スナップショットのスケジュールと設定¶
以下のインスタンスオプションはインスタンススナップショットの作成と削除を制御します:
| Key: | snapshots.expiry |
| Type: | string |
| Live update: | no |
1M 2H 3d 4w 5m 6yのような式を指定します。
この値は新しく作成されたスナップショットの有効期限を算出するために使われます。 スナップショットが作られた日時にこの値が加算され、結果のタイムスタンプがスナップショットの個別の有効期限として保管されます。 この値の変更は変更後に作成したスナップショットのみに影響します。既存のスナップショットの有効期限は変更されません。
サポートされる単位はS(秒)、M(分)、H(時)、d(日)、w(週)、m(月)、y(年)です。
| Key: | snapshots.expiry.manual |
| Type: | string |
| Live update: | no |
1M 2H 3d 4w 5m 6yのような式を指定します。
この値はスケジュールで作られたのではない新しく作成されたスナップショットの有効期限を算出するために使われます。 スナップショットが作られた日時にこの値が加算され、結果のタイムスタンプがスナップショットの個別の有効期限として保管されます。 この値の変更は変更後に作成したスナップショットのみに影響します。既存のスナップショットの有効期限は変更されません。
サポートされる単位についてはsnapshots.expiryを参照してください。
| Key: | snapshots.pattern |
| Type: | string |
| Default: |
|
| Live update: | no |
スナップショット名を表すPongo2のテンプレート文字列を指定します。 このテンプレートはスケジュールされたスナップショットと無名のスナップショットに使用されます。
詳細はスナップショットの自動命名を参照してください。
| Key: | snapshots.schedule |
| Type: | string |
| Default: | empty |
| Live update: | no |
cronの式(<minute> <hour> <dom> <month> <dow>)かスケジュールのエイリアス(@startup、@hourly、@daily、@midnight、@weekly、@monthly、@annually、@yearly)のカンマと空白区切りリストを設定するか、あるいは自動スナップショットを無効にするためには空にしてください。
cron設定自体がカンマを含むため、他の多くの設定キーと異なり、この設定は単なるカンマ区切りではなくカンマと空白区切りであることに注意してください。
| Key: | snapshots.schedule.stopped |
| Type: | bool |
| Default: |
|
| Live update: | no |
スナップショットの自動命名¶
snapshots.pattern オプションはスナップショット名をフォーマットする Pongo2 テンプレート文字列です。
スナップショット名にタイムスタンプを追加するには、Pongo2 コンテキスト変数 creation_date を使用します。
スナップショット名に使用できない文字を含まないようにテンプレート文字列をフォーマットするようにしてください。
例えば、 snapshots.pattern を {{ creation_date|date:'2006-01-02_15-04-05' }} に設定し、作成日時を秒の制度まで落として、スナップショットを命名するようにします。
名前の衝突を防ぐ別の方法はパターン内に %d プレースホルダを使うことです。
最初のスナップショットでは、プレースホルダは 0 に置換されます。
後続のスナップショットでは、既存のスナップショットが考慮され、プレースホルダの位置の最大の数を見つけます。
この数が 1 増加されて新しい名前に使用されます。
揮発性の内部データ¶
以下の揮発性のキーはインスタンスに固有な内部データを保管するため Incus で現在内部的に使用されています:
| Key: | volatile.<name>.apply_quota |
| Type: | string |
ディスククォータはインスタンスの次回起動時に適用されます。
| Key: | volatile.<name>.hwaddr |
| Type: | string |
ネットワークデバイスのMACアドレスはデバイス自身にhwaddrプロパティが設定されていない場合に使用されます。
| Key: | volatile.<name>.io.bus |
| Type: | string |
この値はio.bus=autoの場合に使用され、登録されている実際のIOバスに設定されます。
| Key: | volatile.<name>.last_state.created |
| Type: | string |
取りうる値はtrueまたはfalse。
| Key: | volatile.<name>.last_state.hwaddr |
| Type: | string |
物理デバイスがインスタンスに移動する際に使われた元のMAC
| Key: | volatile.<name>.last_state.ip_addresses |
| Type: | string |
ネットワークデバイスの最後に使用されたIPアドレスのカンマ区切りリスト。
| Key: | volatile.<name>.last_state.mtu |
| Type: | string |
物理デバイスがインスタンスに移動する際に使われた元のMTU
| Key: | volatile.<name>.last_state.pci.driver |
| Type: | string |
PCIデバイスの元のホストドライバー。
| Key: | volatile.<name>.last_state.pci.parent |
| Type: | string |
PCIデバイスをインスタンスに割り当てる際に使用された親のホストデバイス。
| Key: | volatile.<name>.last_state.pci.slot.name |
| Type: | string |
親のホストデバイスのPCIスロット名。
| Key: | volatile.<name>.last_state.usb.bus |
| Type: | string |
元のUSBバスアドレス。
| Key: | volatile.<name>.last_state.usb.device |
| Type: | string |
元のUSBデバイス識別子。
| Key: | volatile.<name>.last_state.vdpa.name |
| Type: | string |
VDPAデバイスファイルディスクリプターをインスタンスに移動する際に使用されたVPDAデバイス名。
| Key: | volatile.<name>.last_state.vf.hwaddr |
| Type: | string |
VF(仮想ファンクション)をインスタンスに移動する際に使用された元のMAC。
| Key: | volatile.<name>.last_state.vf.id |
| Type: | string |
VF(仮想ファンクション)をインスタンスに移動する際に使用されたID。
| Key: | volatile.<name>.last_state.vf.parent |
| Type: | string |
VF(仮想ファンクション)をインスタンスに移動する際に使用された親のホストデバイス。
| Key: | volatile.<name>.last_state.vf.spoofcheck |
| Type: | string |
VF(仮想ファンクション)をインスタンスに移動する際に使用された元のspoolチェック設定。
| Key: | volatile.<name>.last_state.vf.trusted |
| Type: | string |
VF(仮想ファンクション)をインスタンスに移動する際に使用された元の信頼された設定。
| Key: | volatile.<name>.last_state.vf.vlan |
| Type: | string |
VF(仮想ファンクション)をインスタンスに移動する際に使用された元のVLAN。
| Key: | volatile.<name>.mig.uuid |
| Type: | string |
NVIDIA MIGインスタンスUUID。
| Key: | volatile.<name>.name |
| Type: | string |
デバイス自身にnameプロパティがせってされていない場合のインスタンス内部のネットワークインタフェース名。
| Key: | volatile.<name>.vgpu.uuid |
| Type: | string |
NVIDIA仮想GPUインスタンスUUID。
| Key: | volatile.apply_template |
| Type: | string |
次回起動時に指定された名前のテンプレートが起動されます。
| Key: | volatile.base_image |
| Type: | string |
インスタンスの作成に使われたイメージのハッシュ値(インスタンスがイメージから作成されなかった場合は空)
| Key: | volatile.cloud_init.instance-id |
| Type: | string |
| Key: | volatile.cluster.group |
| Type: | string |
インスタンスが作成時に限定されていた1つまたは複数のクラスタグループ。 これは退避のようなイベントをスケジュールする際にインスタンスを指定した組の中に維持するのに使われます。
| Key: | volatile.container.oci |
| Type: | bool |
| Default: |
|
| Key: | volatile.evacuate.origin |
| Type: | string |
退避前にインスタンスが存在していたクラスタメンバー。
| Key: | volatile.last_state.agent |
| Type: | string |
| Key: | volatile.rebalance.last_move |
| Type: | integer |
| Key: | volatile.uuid.generation |
| Type: | string |
インスタンス生成UUIDはインスタンスの時刻が遡るたびに変更されます。 全てのサーバーとプロジェクトに対してグローバルにユニークです。
| Key: | volatile.vm.boot_state |
| Type: | string |
| Key: | volatile.vm.rtc_adjustment |
| Type: | int64 |
仮想マシンがホストとは異なる時間で動かせるようにするためのリアルタイムクロックの調整時間。
| Key: | volatile.vm.rtc_offset |
| Type: | int64 |
仮想マシンがホストとは異なる時間で動かせるようにするためのリアルタイムクロックのオフセット。
注釈
揮発性のキーはユーザは設定できません。