5.5. より高い仮想マシンワークロード密度の設定
メモリー (RAM) をオーバーコミットすることで、ノード上の仮想マシン数を増やすことができます。仮想マシンのワークロード密度を高めることは、次のような状況で役立ちます。
- 類似したワークロードが多数ある場合。
- 過小使用のワークロードがある場合。
使用率の高いシステムでは、メモリーのオーバーコミットによりワークロードのパフォーマンスが低下する可能性があります。
5.5.1. wasp-agent を使用して仮想マシンのワークロード密度を高める
					wasp-agent コンポーネントは、ワーカーノードにスワップリソースを割り当てることで、メモリーのオーバーコミットを容易にします。また、スワップ I/O トラフィックや使用率が大きいことでノードがリスクにさらされている場合の Pod のエビクションも管理します。
				
						スワップリソースは、Burstable Quality of Service (QoS) クラスの仮想マシンワークロード (VM Pod) にのみ割り当てることができます。Guaranteed QoS クラスの仮想マシン Pod と、仮想マシンに属していない任意の QoS クラスの Pod は、リソースをスワップできません。
					
QoS クラスの説明は、Configure Quality of Service for Pods (Kubernetes ドキュメント) を参照してください。
						仮想マシンマニフェストで spec.domain.resources.requests.memory を使用すると、メモリーのオーバーコミット設定が無効になります。代わりに spec.domain.memory.guest を使用してください。
					
前提条件
- 
							OpenShift CLI (oc) がインストールされている。
- 
							cluster-adminロールでクラスターにログイン済みである。
- メモリーオーバーコミット率が定義済みである。
- ノードはワーカープールに属している。
						wasp-agent コンポーネントは、Open Container Initiative (OCI) フックをデプロイして、ノードレベルでコンテナーのスワップ使用を有効にします。低レベルの性質上、DaemonSet オブジェクトには特権が必要です。
					
手順
- スワップの使用を許可するように - kubeletサービスを設定します。- 次の例に示すパラメーターを使用して - KubeletConfigファイルを作成または編集します。- KubeletConfigファイルの例- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 次のコマンドを実行して、ワーカーノードが新しい設定と同期されるまで待ちます。 - $ oc wait mcp worker --for condition=Updated=True --timeout=-1s - $ oc wait mcp worker --for condition=Updated=True --timeout=-1s- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- MachineConfigオブジェクトを作成してスワップをプロビジョニングします。以下に例を示します。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 最悪のシナリオに備えて十分なスワップ領域を確保するには、オーバーコミットされた RAM と同量以上のスワップ領域をプロビジョニングしておく必要があります。次の式を使用して、ノードにプロビジョニングするスワップ領域の量を計算します。 - NODE_SWAP_SPACE = NODE_RAM * (MEMORY_OVER_COMMIT_PERCENT / 100% - 1) - NODE_SWAP_SPACE = NODE_RAM * (MEMORY_OVER_COMMIT_PERCENT / 100% - 1)- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 例 - NODE_SWAP_SPACE = 16 GB * (150% / 100% - 1) = 16 GB * (1.5 - 1) = 16 GB * (0.5) = 8 GB- NODE_SWAP_SPACE = 16 GB * (150% / 100% - 1) = 16 GB * (1.5 - 1) = 16 GB * (0.5) = 8 GB- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 次のコマンドを実行して、特権付きサービスアカウントを作成します。 - oc adm new-project wasp - $ oc adm new-project wasp- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - oc create sa -n wasp wasp - $ oc create sa -n wasp wasp- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - oc create clusterrolebinding wasp --clusterrole=cluster-admin --serviceaccount=wasp:wasp - $ oc create clusterrolebinding wasp --clusterrole=cluster-admin --serviceaccount=wasp:wasp- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - oc adm policy add-scc-to-user -n wasp privileged -z wasp - $ oc adm policy add-scc-to-user -n wasp privileged -z wasp- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 次のコマンドを実行して、ワーカーノードが新しい設定と同期されるまで待ちます。 - $ oc wait mcp worker --for condition=Updated=True --timeout=-1s - $ oc wait mcp worker --for condition=Updated=True --timeout=-1s- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 次のコマンドを実行して、wasp エージェントイメージのプル URL を決定します。 - oc get csv -n openshift-cnv -l=operators.coreos.com/kubevirt-hyperconverged.openshift-cnv -ojson | jq '.items[0].spec.relatedImages[] | select(.name|test(".*wasp-agent.*")) | .image'- $ oc get csv -n openshift-cnv -l=operators.coreos.com/kubevirt-hyperconverged.openshift-cnv -ojson | jq '.items[0].spec.relatedImages[] | select(.name|test(".*wasp-agent.*")) | .image'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 次の例に示すように、 - DaemonSetオブジェクトを作成して- wasp-agentをデプロイします。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- imageの値を、前の手順のイメージ URL に置き換えます。
 
- PrometheusRuleオブジェクトを作成してアラートルールをデプロイします。以下に例を示します。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 次のコマンドを実行して、 - cluster-monitoringラベルを- waspnamespace に追加します。- oc label namespace wasp openshift.io/cluster-monitoring="true" - $ oc label namespace wasp openshift.io/cluster-monitoring="true"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- Web コンソールまたは CLI を使用して、OpenShift Virtualization でメモリーのオーバーコミットを有効にします。 - Web コンソール - 
											OpenShift Container Platform Web コンソールで、Virtualization Overview Settings General settings Memory density に移動します。 
- Enable memory density をオンに設定します。
 
- 
											OpenShift Container Platform Web コンソールで、Virtualization 
- CLI - より高いメモリー密度を有効にし、オーバーコミットレートを設定するように OpenShift Virtualization を設定します。 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 正常な出力 - hyperconverged.hco.kubevirt.io/kubevirt-hyperconverged patched - hyperconverged.hco.kubevirt.io/kubevirt-hyperconverged patched- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
 
検証
- wasp-agentのデプロイメントを確認するには、次のコマンドを実行します。- oc rollout status ds wasp-agent -n wasp - $ oc rollout status ds wasp-agent -n wasp- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - デプロイメントが成功すると、次のメッセージが表示されます。 - 出力例 - daemon set "wasp-agent" successfully rolled out - daemon set "wasp-agent" successfully rolled out- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- スワップが正しくプロビジョニングされていることを確認するには、次の手順を実行します。 - 次のコマンドを実行して、ワーカーノードのリストを表示します。 - oc get nodes -l node-role.kubernetes.io/worker - $ oc get nodes -l node-role.kubernetes.io/worker- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- リストからノードを選択し、次のコマンドを実行してそのメモリー使用量を表示します。 - oc debug node/<selected_node> -- free -m - $ oc debug node/<selected_node> -- free -m- 1 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- <selected_node>をノード名に置き換えます。
 - スワップがプロビジョニングされている場合、 - Swap:行にゼロより大きい値が表示されます。- Expand - 表5.1 出力例 - total - used - free - shared - buff/cache - available - Mem: - 31846 - 23155 - 1044 - 6014 - 14483 - 8690 - Swap: - 8191 - 2337 - 5854 
 
- 次のコマンドを実行して、OpenShift Virtualization のメモリーオーバーコミットメント設定を確認します。 - oc -n openshift-cnv get HyperConverged/kubevirt-hyperconverged -o jsonpath='{.spec.higherWorkloadDensity}{"\n"}'- $ oc -n openshift-cnv get HyperConverged/kubevirt-hyperconverged -o jsonpath='{.spec.higherWorkloadDensity}{"\n"}'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 出力例 - {"memoryOvercommitPercentage":150}- {"memoryOvercommitPercentage":150}- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 返される値は、以前に設定した値と一致する必要があります。 
5.5.2. wasp-agent コンポーネントの削除
					メモリーのオーバーコミットが不要になった場合は、クラスターから wasp-agent コンポーネントと関連リソースを削除できます。
				
前提条件
- 
							cluster-adminロールでクラスターにログイン済みである。
- 
							OpenShift CLI (oc) がインストールされている。
手順
- wasp-agentDaemonSet を削除します。- oc delete daemonset wasp-agent -n wasp - $ oc delete daemonset wasp-agent -n wasp- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- アラートルールがデプロイされている場合は、削除します。 - oc delete prometheusrule wasp-rules -n wasp - $ oc delete prometheusrule wasp-rules -n wasp- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 必要に応じて、他のリソースが依存していない場合は、 - waspnamespace を削除します。- oc delete namespace wasp - $ oc delete namespace wasp- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- メモリーのオーバーコミットメント設定を元に戻します。 - oc -n openshift-cnv patch HyperConverged/kubevirt-hyperconverged \ --type='json' \ -p='[{"op": "remove", "path": "/spec/higherWorkloadDensity"}]'- $ oc -n openshift-cnv patch HyperConverged/kubevirt-hyperconverged \ --type='json' \ -p='[{"op": "remove", "path": "/spec/higherWorkloadDensity"}]'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- スワップメモリーをプロビジョニングする - MachineConfigを削除します。- oc delete machineconfig 90-worker-swap - $ oc delete machineconfig 90-worker-swap- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 関連する - KubeletConfigを削除します。- oc delete kubeletconfig custom-config - $ oc delete kubeletconfig custom-config- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- ワーカーノードがリコンサイルされるまで待ちます。 - oc wait mcp worker --for condition=Updated=True --timeout=-1s - $ oc wait mcp worker --for condition=Updated=True --timeout=-1s- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
検証
- wasp-agentDaemonSet が削除されていることを確認します。- oc get daemonset -n wasp - $ oc get daemonset -n wasp- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - wasp-agentはリストに表示されないはずです。
- ノードでスワップが有効になっていないことを確認します。 - oc debug node/<selected_node> -- free -m - $ oc debug node/<selected_node> -- free -m- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - Swap:行に- 0と表示されていること、またはスワップ領域がプロビジョニング済みと表示されないことを確認します。
5.5.3. wasp-agent が使用する Pod エビクション条件
システムの負荷が高く、ノードが危険な状態にある場合、wasp エージェントは Pod エビクションを管理します。次のいずれかの条件が満たされた場合、エビクションがトリガーされます。
- 高スワップ I/O トラフィック
- この条件は、スワップ関連の I/O トラフィックが過度に高い場合に満たされます。 - 状態 - averageSwapInPerSecond > maxAverageSwapInPagesPerSecond && averageSwapOutPerSecond > maxAverageSwapOutPagesPerSecond - averageSwapInPerSecond > maxAverageSwapInPagesPerSecond && averageSwapOutPerSecond > maxAverageSwapOutPagesPerSecond- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - デフォルトでは、 - maxAverageSwapInPagesPerSecondと- maxAverageSwapOutPagesPerSecondは 1000 ページに設定されています。平均を計算するデフォルトの間隔は 30 秒です。
- 高スワップ使用率
- この条件は、スワップ使用率が過度に高く、現在の仮想メモリー使用量が各要因が考慮されたしきい値を超えた場合に満たされます。 - MachineConfigオブジェクトの- NODE_SWAP_SPACE設定がこの状態に影響を与える可能性があります。- 状態 - nodeWorkingSet + nodeSwapUsage < totalNodeMemory + totalSwapMemory × thresholdFactor - nodeWorkingSet + nodeSwapUsage < totalNodeMemory + totalSwapMemory × thresholdFactor- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
5.5.3.1. 環境変数
次の環境変数を使用して、エビクション条件の計算に使用される値を調整できます。
| 環境変数 | 機能 | 
| 
										 | 
										 | 
| 
										 | 
										 | 
| 
										 | 
										高スワップ使用率の計算に使用される  | 
| 
										 | 平均スワップ使用量の計算間隔を設定します。 |