9.2. ライブマイグレーションの設定
ライブマイグレーション設定を行い、移行プロセスがクラスターに負荷を与えないようにすることができます。
ライブマイグレーションポリシーを設定して、さまざまな移行設定を仮想マシンのグループに適用できます。
9.2.1. ライブマイグレーションの制限およびタイムアウトの設定
openshift-cnv
namespace にある HyperConverged
カスタムリソース (CR) を更新して、クラスターのライブマイグレーションの制限およびタイムアウトを設定します。
手順
HyperConverged
CR を編集し、必要なライブマイグレーションパラメーターを追加します。$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
設定ファイルのサンプル
apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: liveMigrationConfig: bandwidthPerMigration: 64Mi 1 completionTimeoutPerGiB: 800 2 parallelMigrationsPerCluster: 5 3 parallelOutboundMigrationsPerNode: 2 4 progressTimeout: 150 5 allowPostCopy: false 6
- 1
- 各マイグレーションの帯域幅制限。値は 1 秒あたりのバイト数です。たとえば、値
2048Mi
は 2048 MiB/s を意味します。デフォルト:0
(無制限)。 - 2
- 移行がこの時間内に終了しない場合 (単位はメモリーの GiB あたりの秒数)、移行は取り消されます。たとえば、6 GiB メモリーを搭載した仮想マシンは、4800 秒以内に移行が完了しないとタイムアウトになります。
Migration Method
がBlockMigration
の場合、移行するディスクのサイズは計算に含められます。 - 3
- クラスターで並行して実行される移行の数。デフォルトは
5
です。 - 4
- ノードごとのアウトバウンド移行の最大数。デフォルトは
2
です。 - 5
- メモリーのコピーの進捗がこの時間内 (秒単位) に見られない場合に、移行は取り消されます。デフォルトは
150
です。 - 6
- 仮想マシンが負荷の高いワークロードを実行しており、メモリーのダーティー率が高すぎる場合、あるノードから別のノードへの移行が収束しない可能性があります。これを防ぐには、ポストコピーモードを有効にします。デフォルトでは、
allowPostCopy
はfalse
に設定されています。
キー/値のペアを削除し、ファイルを保存して、spec.liveMigrationConfig
フィールドのデフォルト値を復元できます。たとえば、progressTimeout: <value>
を削除してデフォルトの progressTimeout: 150
を復元します。
9.2.2. 負荷の高いワークロード向けのライブマイグレーション設定
メモリーのダーティー率が高く、負荷の高いワークロード (データベース処理など) を実行している仮想マシンを移行する場合、移行を完了するにはより高い帯域幅が必要です。
ダーティー率が高すぎる場合、あるノードから別のノードへの移行は収束しません。これを防ぐには、ポストコピーモードを有効にします。
ポストコピーモードは、定義されたタイムアウト内に最初のプレコピーフェーズが完了しない場合にトリガーされます。ポストコピーの期間において、必要最小限のメモリーページの転送中に仮想マシン CPU はソースホスト上で一時停止します。その後、仮想マシン CPU が宛先ホスト上でアクティブになり、実行時に残りのメモリーページが宛先ノードに転送されます。
openshift-cnv
namespace にある HyperConverged
カスタムリソース (CR) を更新して、負荷の高いワークロードのライブマイグレーションを設定します。
手順
HyperConverged
CR を編集し、負荷の高いワークロードを移行するために必要なパラメーターを追加します。$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
設定ファイルのサンプル
apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: liveMigrationConfig: bandwidthPerMigration: 0Mi 1 completionTimeoutPerGiB: 150 2 parallelMigrationsPerCluster: 5 3 parallelOutboundMigrationsPerNode: 1 4 progressTimeout: 150 5 allowPostCopy: true 6
- 1
- 各マイグレーションの帯域幅制限。値は 1 秒あたりのバイト数です。デフォルトは
0
で、無制限です。 - 2
- この時間内に完了しない移行はキャンセルされ、ポストコピーが有効な場合はポストコピーモードがトリガーされます。この値は、メモリー 1 GiB あたりの秒数で測定されます。移行プロセスの早い段階でポストコピーモードをトリガーするには、
completionTimeoutPerGiB
を減らします。また、移行プロセスの後半でポストコピーモードをトリガーするには、completionTimeoutPerGiB
を増やします。 - 3
- クラスターで並行して実行される移行の数。デフォルトは
5
です。負荷の高いワークロードを移行する場合は、parallelMigrationsPerCluster
設定を低くします。 - 4
- ノードごとのアウトバウンド移行の最大数。負荷の高いワークロード用に、ノードごとに仮想マシンを 1 つ設定します。
- 5
- この時間内 (秒単位) にメモリーコピーが進捗しない場合、移行は取り消されます。この値は秒単位で測定されます。大きなメモリーサイズで負荷の高いワークロードを実行する場合は、このパラメーターを増やします。
- 6
- メモリーのダーティー率が高い場合は、移行が確実に収束するように、ポストコピーモードを使用します。ポストコピーモードを有効にするには、
allowPostCopy
をtrue
に設定します。
- オプション: メインネットワークがビジー状態で移行できない場合は、移行専用のセカンダリーネットワークを設定します。
ポストコピーモードは転送中のパフォーマンスに影響を与える可能性があるため、重要なデータや不安定なネットワークでは使用しないでください。
9.2.3. 関連情報
9.2.4. ライブマイグレーションポリシー
ライブマイグレーションポリシーを作成して、仮想マシンまたはプロジェクトラベルによって定義された仮想マシンのグループにさまざまな移行設定を適用できます。
ライブマイグレーションポリシーは、OpenShift Virtualization Web コンソールを使用して作成できます。
9.2.4.1. コマンドラインを使用したライブマイグレーションポリシーの作成
コマンドラインを使用してライブマイグレーションポリシーを作成できます。KubeVirt は、任意のラベルの組み合わせを使用して、選択した仮想マシン (VM) にライブマイグレーションポリシーを適用します。
-
size
、os
、gpu
などの仮想マシンラベル -
priority
、bandwidth
、またはhpc-workload
などのプロジェクトラベル
ポリシーを特定の仮想マシングループに適用するには、仮想マシングループのすべてのラベルがポリシーのラベルと一致する必要があります。
複数のライブマイグレーションポリシーが仮想マシンに適用される場合は、一致するラベルの数が最も多いポリシーが優先されます。
複数のポリシーがこの基準を満たす場合、ポリシーは一致するラベルキーのアルファベット順に並べ替えられ、その順序の最初のポリシーが優先されます。
手順
ライブマイグレーションポリシーを適用する仮想マシンオブジェクトを編集し、対応する仮想マシンラベルを追加します。
リソースの YAML 設定を開きます。
$ oc edit vm <vm_name>
設定の
.spec.template.metadata.labels
セクションで必要なラベル値を調整します。たとえば、移行ポリシーの目的で仮想マシンをproduction
仮想マシンとしてマークするには、kubevirt.io/environment: production
行を追加します。apiVersion: migrations.kubevirt.io/v1alpha1 kind: VirtualMachine metadata: name: <vm_name> namespace: default labels: app: my-app environment: production spec: template: metadata: labels: kubevirt.io/domain: <vm_name> kubevirt.io/size: large kubevirt.io/environment: production # ...
- 設定を保存して終了します。
対応するラベルを使用して
MigrationPolicy
オブジェクトを設定します。次の例では、production
というラベルが付けられたすべての仮想マシンに適用されるポリシーを設定します。apiVersion: migrations.kubevirt.io/v1alpha1 kind: MigrationPolicy metadata: name: <migration_policy> spec: selectors: namespaceSelector: 1 hpc-workloads: "True" xyz-workloads-type: "" virtualMachineInstanceSelector: 2 kubevirt.io/environment: "production"
次のコマンドを実行して、移行ポリシーを作成します。
$ oc create migrationpolicy -f <migration_policy>.yaml