12.2. OpenShift Virtualization クラスターチェックアップフレームワーク
チェックアップ は、特定のクラスター機能が期待どおりに機能するかどうかを確認できる自動テストワークロードです。クラスターチェックアップフレームワークは、ネイティブの Kubernetes リソースを使用してチェックアップを設定および実行します。
OpenShift Virtualization クラスターチェックアップフレームワークは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
開発者またはクラスター管理者は、事前定義されたチェックアップを使用して、クラスターの保守性を向上させ、予期しない動作をトラブルシューティングし、エラーを最小限に抑え、時間を節約できます。チェックアップの結果を確認し、専門家と共有してさらに分析することができます。ベンダーは、提供する機能やサービスのチェックアップを作成して公開し、顧客環境が正しく設定されていることを確認できます。
12.2.1. 定義済みのレイテンシーチェックアップを実行する リンクのコピーリンクがクリップボードにコピーされました!
レイテンシーチェックアップを使用すると、ネットワーク接続を確認し、セカンダリーネットワークインターフェイスに接続された 2 つの仮想マシン (VM) 間のレイテンシーを測定できます。事前定義されたレイテンシーチェックアップでは、ping ユーティリティーが使用されます。
レイテンシーチェックアップを実行する前に、まずクラスターノードに ブリッジインターフェイスを作成 して、仮想マシンのセカンダリーインターフェイスをノード上の任意のインターフェイスに接続する必要があります。ブリッジインターフェイスを作成しないと、仮想マシンが起動せず、ジョブが失敗します。
既存の namespace で事前定義されたチェックアップを実行するには、チェックアップ用のサービスアカウントの設定、サービスアカウント用の Role および RoleBinding オブジェクトの作成、チェックアップのパーミッションの有効化、入力 config map とチェックアップジョブの作成が含まれます。チェックアップは複数回実行できます。
以下が常に必要になります。
- チェックアップイメージを適用する前に、信頼できるソースからのものであることを確認します。
-
RoleおよびRoleBindingオブジェクトを作成する前に、チェックアップパーミッションを確認してください。
12.2.1.1. Web コンソールを使用したレイテンシーチェックアップの実行 リンクのコピーリンクがクリップボードにコピーされました!
レイテンシーチェックアップを実行して、ネットワーク接続を検証し、セカンダリーネットワークインターフェイスに接続された 2 台の仮想マシン間のレイテンシーを測定します。
前提条件
-
namespace に
NetworkAttachmentDefinitionを追加する必要があります。
手順
-
Web コンソールで Virtualization
Checkups に移動します。 - Network latency タブをクリックします。
- Install permissions をクリックします。
- Run checkup をクリックします。
- Name フィールドにチェックアップの名前を入力します。
- ドロップダウンメニューから NetworkAttachmentDefinition を選択します。
- オプション: Sample duration (seconds) フィールドでレイテンシーサンプルの期間を設定します。
- オプション: Set maximum desired latency (milliseconds) を有効にして時間間隔を定義し、最大遅延時間間隔を定義します。
- オプション: Select nodes を有効にし、Source node と Target node を指定して、特定のノードをターゲットにします。
- Run をクリックします。
検証
- レイテンシーチェックアップのステータスを表示するには、Latency checkup タブの Checkups リストに移動します。チェックアップ名をクリックして詳細を確認します。
12.2.1.2. コマンドラインを使用したレイテンシー検査の実行 リンクのコピーリンクがクリップボードにコピーされました!
次の手順を実行して、CLI を使用してレイテンシーチェックアップを実行します。
- サービスアカウント、ロール、ロールバインディングを作成して、レイテンシーチェックアップへのクラスターアクセス権を提供します。
- config map を作成し、チェックアップを実行して結果を保存するための入力を行います。
- チェックアップを実行するジョブを作成します。
- config map で結果を確認します。
- オプション: チェックアップを再実行するには、既存の config map とジョブを削除し、新しい config map とジョブを作成します。
- 完了したら、レイテンシーチェックアップリソースを削除します。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 - クラスターには少なくとも 2 つのワーカーノードがある。
- namespace の Network Attachment Definition を設定している。
手順
レイテンシーチェックアップ用の
ServiceAccount、Role、RoleBindingマニフェストを作成します。例12.1 ロールマニフェストファイルの例
--- apiVersion: v1 kind: ServiceAccount metadata: name: vm-latency-checkup-sa --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: kubevirt-vm-latency-checker rules: - apiGroups: ["kubevirt.io"] resources: ["virtualmachineinstances"] verbs: ["get", "create", "delete"] - apiGroups: ["subresources.kubevirt.io"] resources: ["virtualmachineinstances/console"] verbs: ["get"] - apiGroups: ["k8s.cni.cncf.io"] resources: ["network-attachment-definitions"] verbs: ["get"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: kubevirt-vm-latency-checker subjects: - kind: ServiceAccount name: vm-latency-checkup-sa roleRef: kind: Role name: kubevirt-vm-latency-checker apiGroup: rbac.authorization.k8s.io --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: kiagnose-configmap-access rules: - apiGroups: [ "" ] resources: [ "configmaps" ] verbs: ["get", "update"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: kiagnose-configmap-access subjects: - kind: ServiceAccount name: vm-latency-checkup-sa roleRef: kind: Role name: kiagnose-configmap-access apiGroup: rbac.authorization.k8s.ioServiceAccount、Role、RoleBindingマニフェストを適用します。$ oc apply -n <target_namespace> -f <latency_sa_roles_rolebinding>.yaml1 - 1
<target_namespace>は、チェックアップを実行する namespace です。これは、NetworkAttachmentDefinitionオブジェクトが存在する既存の namespace である必要があります。
チェックアップの入力パラメーターを含む
ConfigMapマニフェストを作成します。入力 config map の例
apiVersion: v1 kind: ConfigMap metadata: name: kubevirt-vm-latency-checkup-config labels: kiagnose/checkup-type: kubevirt-vm-latency data: spec.timeout: 5m spec.param.networkAttachmentDefinitionNamespace: <target_namespace> spec.param.networkAttachmentDefinitionName: "blue-network"1 spec.param.maxDesiredLatencyMilliseconds: "10"2 spec.param.sampleDurationSeconds: "5"3 spec.param.sourceNode: "worker1"4 spec.param.targetNode: "worker2"5 ターゲット namespace に config map マニフェストを適用します。
$ oc apply -n <target_namespace> -f <latency_config_map>.yamlチェックアップを実行する
Jobマニフェストを作成します。ジョブマニフェストの例
apiVersion: batch/v1 kind: Job metadata: name: kubevirt-vm-latency-checkup labels: kiagnose/checkup-type: kubevirt-vm-latency spec: backoffLimit: 0 template: spec: serviceAccountName: vm-latency-checkup-sa restartPolicy: Never containers: - name: vm-latency-checkup image: registry.redhat.io/container-native-virtualization/vm-network-latency-checkup-rhel9:v4.16.0 securityContext: allowPrivilegeEscalation: false capabilities: drop: ["ALL"] runAsNonRoot: true seccompProfile: type: "RuntimeDefault" env: - name: CONFIGMAP_NAMESPACE value: <target_namespace> - name: CONFIGMAP_NAME value: kubevirt-vm-latency-checkup-config - name: POD_UID valueFrom: fieldRef: fieldPath: metadata.uidJobマニフェストを適用します。$ oc apply -n <target_namespace> -f <latency_job>.yamlジョブが完了するまで待ちます。
$ oc wait job kubevirt-vm-latency-checkup -n <target_namespace> --for condition=complete --timeout 6m以下のコマンドを実行して、レイテンシーチェックアップの結果を確認します。測定された最大レイテンシーが
spec.param.maxDesiredLatencyMilliseconds属性の値よりも大きい場合、チェックアップは失敗し、エラーが返されます。$ oc get configmap kubevirt-vm-latency-checkup-config -n <target_namespace> -o yaml出力 config map の例 (成功)
apiVersion: v1 kind: ConfigMap metadata: name: kubevirt-vm-latency-checkup-config namespace: <target_namespace> labels: kiagnose/checkup-type: kubevirt-vm-latency data: spec.timeout: 5m spec.param.networkAttachmentDefinitionNamespace: <target_namespace> spec.param.networkAttachmentDefinitionName: "blue-network" spec.param.maxDesiredLatencyMilliseconds: "10" spec.param.sampleDurationSeconds: "5" spec.param.sourceNode: "worker1" spec.param.targetNode: "worker2" status.succeeded: "true" status.failureReason: "" status.completionTimestamp: "2022-01-01T09:00:00Z" status.startTimestamp: "2022-01-01T09:00:07Z" status.result.avgLatencyNanoSec: "177000" status.result.maxLatencyNanoSec: "244000"1 status.result.measurementDurationSec: "5" status.result.minLatencyNanoSec: "135000" status.result.sourceNode: "worker1" status.result.targetNode: "worker2"- 1
- 測定された最大レイテンシー (ナノ秒)。
オプション: チェックアップが失敗した場合に詳細なジョブログを表示するには、次のコマンドを使用します。
$ oc logs job.batch/kubevirt-vm-latency-checkup -n <target_namespace>以下のコマンドを実行して、以前に作成したジョブおよび config map を削除します。
$ oc delete job -n <target_namespace> kubevirt-vm-latency-checkup$ oc delete config-map -n <target_namespace> kubevirt-vm-latency-checkup-configオプション: 別のチェックアップを実行する予定がない場合は、ロールマニフェストを削除します。
$ oc delete -f <latency_sa_roles_rolebinding>.yaml
12.2.2. 定義済みのストレージチェックアップを実行する リンクのコピーリンクがクリップボードにコピーされました!
ストレージチェックアップを使用して、クラスターストレージが OpenShift Virtualization に対して最適に設定されていることを確認できます。
既存の namespace で事前定義されたチェックアップを実行するには、チェックアップ用のサービスアカウントの設定、サービスアカウント用の Role および RoleBinding オブジェクトの作成、チェックアップのパーミッションの有効化、入力 config map とチェックアップジョブの作成が含まれます。チェックアップは複数回実行できます。
以下が常に必要になります。
- チェックアップイメージを適用する前に、信頼できるソースからのものであることを確認します。
-
RoleおよびRoleBindingオブジェクトを作成する前に、チェックアップパーミッションを確認してください。
12.2.2.1. ストレージチェックアップのトラブルシューティング用にリソースを保持する リンクのコピーリンクがクリップボードにコピーされました!
事前定義されたストレージチェックアップには、ストレージチェックアップ後にリソースのクリーンアップを制御する skipTeardown 設定オプションが含まれます。デフォルトでは、skipTeardown フィールドの値は Never です。これは、チェックアップは常に破棄手順を実行し、チェックアップの実行後にすべてのリソースを削除することを意味します。
skipTeardown フィールドを onfailure に設定すると、追加の検査のためにリソースを保持することができます。
前提条件
-
OpenShift CLI (
oc) がインストールされている。
手順
以下のコマンドを実行して
storage-checkup-configConfig Map を編集します。$ oc edit configmap storage-checkup-config -n <checkup_namespace>onfailure値を使用するようにskipTeardownフィールドを設定します。これを行うには、storage_checkup.yamlファイルに保存されているstorage-checkup-configconfig map を変更します。apiVersion: v1 kind: ConfigMap metadata: name: storage-checkup-config namespace: <checkup_namespace> data: spec.param.skipTeardown: onfailure # ...次のコマンドを実行して、
storage-checkup-configconfig map を再適用します。$ oc apply -f storage_checkup.yaml -n <checkup_namespace>
12.2.2.2. Web コンソールを使用したストレージチェックアップの実行 リンクのコピーリンクがクリップボードにコピーされました!
ストレージチェックアップを実行して、仮想マシンのストレージが正しく動作していることを確認します。
手順
-
Web コンソールで Virtualization
Checkups に移動します。 - Storage タブをクリックします。
- Install permissions をクリックします。
- Run checkup をクリックします。
- Name フィールドにチェックアップの名前を入力します。
- Timeout (minutes) フィールドにチェックアップのタイムアウト値を入力します。
- Run をクリックします。
ストレージチェックアップのステータスは、Storage タブの Checkups リストで確認できます。チェックアップ名をクリックして詳細を確認します。
12.2.2.3. コマンドラインを使用したストレージ検査の実行 リンクのコピーリンクがクリップボードにコピーされました!
事前定義された検査を使用して、OpenShift Container Platform クラスターストレージが OpenShift Virtualization ワークロードを実行するために最適に設定されていることを確認します。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 クラスター管理者が、次の例のように、ストレージチェックアップのサービスアカウントと namespace に必要な
cluster-reader権限を作成した。apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kubevirt-storage-checkup-clustereader roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-reader subjects: - kind: ServiceAccount name: storage-checkup-sa namespace: <target_namespace>1 - 1
- チェックアップの実行対象の namespace。
手順
ストレージチェックアップ用の
ServiceAccount、Role、およびRoleBindingマニフェストファイルを作成します。例12.2 サービスアカウント、ロール、ロールバインディングマニフェストの例
--- apiVersion: v1 kind: ServiceAccount metadata: name: storage-checkup-sa --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: storage-checkup-role rules: - apiGroups: [ "" ] resources: [ "configmaps" ] verbs: ["get", "update"] - apiGroups: [ "kubevirt.io" ] resources: [ "virtualmachines" ] verbs: [ "create", "delete" ] - apiGroups: [ "kubevirt.io" ] resources: [ "virtualmachineinstances" ] verbs: [ "get" ] - apiGroups: [ "subresources.kubevirt.io" ] resources: [ "virtualmachineinstances/addvolume", "virtualmachineinstances/removevolume" ] verbs: [ "update" ] - apiGroups: [ "kubevirt.io" ] resources: [ "virtualmachineinstancemigrations" ] verbs: [ "create" ] - apiGroups: [ "cdi.kubevirt.io" ] resources: [ "datavolumes" ] verbs: [ "create", "delete" ] - apiGroups: [ "" ] resources: [ "persistentvolumeclaims" ] verbs: [ "delete" ] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: storage-checkup-role subjects: - kind: ServiceAccount name: storage-checkup-sa roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: storage-checkup-roleターゲット namespace に
ServiceAccount、Role、RoleBindingマニフェストを適用します。$ oc apply -n <target_namespace> -f <storage_sa_roles_rolebinding>.yamlConfigMapとJobマニフェストファイルを作成します。この config map に、チェックアップジョブの入力パラメーターを含めます。入力 config map とジョブマニフェストの例
--- apiVersion: v1 kind: ConfigMap metadata: name: storage-checkup-config namespace: $CHECKUP_NAMESPACE data: spec.timeout: 10m spec.param.storageClass: ocs-storagecluster-ceph-rbd-virtualization spec.param.vmiTimeout: 3m --- apiVersion: batch/v1 kind: Job metadata: name: storage-checkup namespace: $CHECKUP_NAMESPACE spec: backoffLimit: 0 template: spec: serviceAccount: storage-checkup-sa restartPolicy: Never containers: - name: storage-checkup image: quay.io/kiagnose/kubevirt-storage-checkup:main imagePullPolicy: Always env: - name: CONFIGMAP_NAMESPACE value: $CHECKUP_NAMESPACE - name: CONFIGMAP_NAME value: storage-checkup-configターゲット namespace に
ConfigMapとJobマニフェストファイルを適用し、チェックアップを実行します。$ oc apply -n <target_namespace> -f <storage_configmap_job>.yamlジョブが完了するまで待ちます。
$ oc wait job storage-checkup -n <target_namespace> --for condition=complete --timeout 10m次のコマンドを実行して、チェックアップの結果を確認します。
$ oc get configmap storage-checkup-config -n <target_namespace> -o yaml出力 config map の例 (成功)
apiVersion: v1 kind: ConfigMap metadata: name: storage-checkup-config labels: kiagnose/checkup-type: kubevirt-storage data: spec.timeout: 10m status.succeeded: "true"1 status.failureReason: ""2 status.startTimestamp: "2023-07-31T13:14:38Z"3 status.completionTimestamp: "2023-07-31T13:19:41Z"4 status.result.cnvVersion: 4.16.25 status.result.defaultStorageClass: trident-nfs6 status.result.goldenImagesNoDataSource: <data_import_cron_list>7 status.result.goldenImagesNotUpToDate: <data_import_cron_list>8 status.result.ocpVersion: 4.16.09 status.result.pvcBound: "true"10 status.result.storageProfileMissingVolumeSnapshotClass: <storage_class_list>11 status.result.storageProfilesWithEmptyClaimPropertySets: <storage_profile_list>12 status.result.storageProfilesWithSmartClone: <storage_profile_list>13 status.result.storageProfilesWithSpecClaimPropertySets: <storage_profile_list>14 status.result.storageProfilesWithRWX: |- ocs-storagecluster-ceph-rbd ocs-storagecluster-ceph-rbd-virtualization ocs-storagecluster-cephfs trident-iscsi trident-minio trident-nfs windows-vms status.result.vmBootFromGoldenImage: VMI "vmi-under-test-dhkb8" successfully booted status.result.vmHotplugVolume: |- VMI "vmi-under-test-dhkb8" hotplug volume ready VMI "vmi-under-test-dhkb8" hotplug volume removed status.result.vmLiveMigration: VMI "vmi-under-test-dhkb8" migration completed status.result.vmVolumeClone: 'DV cloneType: "csi-clone"' status.result.vmsWithNonVirtRbdStorageClass: <vm_list>15 status.result.vmsWithUnsetEfsStorageClass: <vm_list>16 - 1
- チェックアップが成功したか (
true)、失敗したか (false) を示します。 - 2
- チェックアップが失敗した場合の失敗の理由。
- 3
- チェックアップが開始した時刻 (RFC 3339 時刻形式)。
- 4
- チェックアップが完了した時刻 (RFC 3339 時刻形式)。
- 5
- OpenShift Virtualization のバージョン。
- 6
- デフォルトのストレージクラスがあるかどうかを指定します。
- 7
- データソースの準備ができていないゴールデンイメージのリスト。
- 8
- データインポート cron が最新ではないゴールデンイメージのリスト。
- 9
- OpenShift Container Platform のバージョン。
- 10
- 10 Mi の PVC が作成され、プロビジョナーによってバインドされているかどうかを指定します。
- 11
- スナップショットベースのクローンを使用しているが、VolumeSnapshotClass が欠落しているストレージプロファイルのリスト。
- 12
- 不明なプロビジョナーを持つストレージプロファイルのリスト。
- 13
- スマートクローン (CSI/スナップショット) をサポートするストレージプロファイルのリスト。
- 14
- ストレージプロファイル spec でオーバーライドされる claimPropertySets のリスト。
- 15
- 仮想化ストレージクラスが存在する場合に Ceph RBD ストレージクラスを使用する仮想マシンのリスト。
- 16
- GID と UID がストレージクラスに設定されていない Elastic File Store (EFS) ストレージクラスを使用する仮想マシンのリスト。
以下のコマンドを実行して、以前に作成したジョブおよび config map を削除します。
$ oc delete job -n <target_namespace> storage-checkup$ oc delete config-map -n <target_namespace> storage-checkup-configオプション: 別のチェックアップを実行する予定がない場合は、
ServiceAccount、Role、RoleBindingマニフェストを削除します。$ oc delete -f <storage_sa_roles_rolebinding>.yaml
12.2.2.4. 失敗したストレージチェックアップのトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
ストレージチェックアップに失敗した場合は、失敗の理由を特定するための手順があります。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 -
must-gatherツールが提供するディレクトリーをダウンロードしている。
手順
次のコマンドを実行して、出力を確認し、
storage-checkup-configconfig map のstatus.failureReasonフィールドを確認します。$ oc get configmap storage-checkup-config -n <namespace> -o yaml出力 config map の例
apiVersion: v1 kind: ConfigMap metadata: name: storage-checkup-config labels: kiagnose/checkup-type: kubevirt-storage data: spec.timeout: 10m status.succeeded: "false"1 status.failureReason: "ErrNoDefaultStorageClass"2 # ...-
must-gatherツールによって提供されるディレクトリーで、data.status.failureReasonフィールドの値で、エラーに関連するログ、イベント、または用語を検索します。
12.2.2.5. Storage checkup error code リンクのコピーリンクがクリップボードにコピーされました!
ストレージチェックアップに失敗した後、次のエラーコードが storage-checkup-config config map に表示される場合があります。
| エラーコード | 意味 |
|---|---|
|
| デフォルトのストレージクラスは設定されていません。 |
|
| 1 つ以上の永続ボリューム要求(PVC)がバインドに失敗しました。 |
|
| 複数のデフォルトのストレージクラスが設定されます。 |
|
|
空の |
|
|
GID および UID が |
|
|
1 つ以上のゴールデンイメージには、最新ではない、または準備ができていない |
|
|
ゴールデンイメージの |
|
| 一部の仮想マシンは、予想される時間内に起動できませんでした。 |
12.2.3. 定義済みの DPDK チェックアップを実行する リンクのコピーリンクがクリップボードにコピーされました!
DPDK チェックアップを使用すると、ノードが Data Plane Development Kit (DPDK) ワークロードを使用して仮想マシンをパケットロスなしで実行できることを確認できます。
12.2.3.1. コマンドラインを使用した DPDK 検査の実行 リンクのコピーリンクがクリップボードにコピーされました!
事前定義されたチェックアップを使用して、OpenShift Container Platform クラスターノードが Data Plane Development Kit (DPDK) ワークロードがある仮想マシン (VM) をパケット損失ゼロで実行できるか確認します。DPDK チェックアップは、トラフィックジェネレーターと、テスト DPDK アプリケーションを実行している仮想マシン間でトラフィックを実行します。
次の手順で DPDK チェックアップを実行します。
- DPDK チェック用のサービスアカウント、ロール、およびロールバインディングを作成します。
- config map を作成し、チェックアップを実行して結果を保存するための入力を行います。
- チェックアップを実行するジョブを作成します。
- config map で結果を確認します。
- オプション: チェックアップを再実行するには、既存の config map とジョブを削除し、新しい config map とジョブを作成します。
- 完了したら、DPDK チェックリソースを削除します。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 - クラスターは DPDK アプリケーションを実行するように設定されています。
- プロジェクトは DPDK アプリケーションを実行するように設定されています。
手順
DPDK チェック用の
ServiceAccount、Role、およびRoleBindingマニフェストを作成します。例12.3 サービスアカウント、ロール、ロールバインディングマニフェストファイルの例
--- apiVersion: v1 kind: ServiceAccount metadata: name: dpdk-checkup-sa --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: kiagnose-configmap-access rules: - apiGroups: [ "" ] resources: [ "configmaps" ] verbs: [ "get", "update" ] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: kiagnose-configmap-access subjects: - kind: ServiceAccount name: dpdk-checkup-sa roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: kiagnose-configmap-access --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: kubevirt-dpdk-checker rules: - apiGroups: [ "kubevirt.io" ] resources: [ "virtualmachineinstances" ] verbs: [ "create", "get", "delete" ] - apiGroups: [ "subresources.kubevirt.io" ] resources: [ "virtualmachineinstances/console" ] verbs: [ "get" ] - apiGroups: [ "" ] resources: [ "configmaps" ] verbs: [ "create", "delete" ] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: kubevirt-dpdk-checker subjects: - kind: ServiceAccount name: dpdk-checkup-sa roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: kubevirt-dpdk-checkerServiceAccount、Role、RoleBindingマニフェストを適用します。$ oc apply -n <target_namespace> -f <dpdk_sa_roles_rolebinding>.yamlチェックアップの入力パラメーターを含む
ConfigMapマニフェストを作成します。入力 config map の例
apiVersion: v1 kind: ConfigMap metadata: name: dpdk-checkup-config labels: kiagnose/checkup-type: kubevirt-dpdk data: spec.timeout: 10m spec.param.networkAttachmentDefinitionName: <network_name>1 spec.param.trafficGenContainerDiskImage: "quay.io/kiagnose/kubevirt-dpdk-checkup-traffic-gen:v0.4.02 spec.param.vmUnderTestContainerDiskImage: "quay.io/kiagnose/kubevirt-dpdk-checkup-vm:v0.4.0"3 ターゲット namespace に
ConfigMapマニフェストを適用します。$ oc apply -n <target_namespace> -f <dpdk_config_map>.yamlチェックアップを実行する
Jobマニフェストを作成します。ジョブマニフェストの例
apiVersion: batch/v1 kind: Job metadata: name: dpdk-checkup labels: kiagnose/checkup-type: kubevirt-dpdk spec: backoffLimit: 0 template: spec: serviceAccountName: dpdk-checkup-sa restartPolicy: Never containers: - name: dpdk-checkup image: registry.redhat.io/container-native-virtualization/kubevirt-dpdk-checkup-rhel9:v4.16.0 imagePullPolicy: Always securityContext: allowPrivilegeEscalation: false capabilities: drop: ["ALL"] runAsNonRoot: true seccompProfile: type: "RuntimeDefault" env: - name: CONFIGMAP_NAMESPACE value: <target-namespace> - name: CONFIGMAP_NAME value: dpdk-checkup-config - name: POD_UID valueFrom: fieldRef: fieldPath: metadata.uidJobマニフェストを適用します。$ oc apply -n <target_namespace> -f <dpdk_job>.yamlジョブが完了するまで待ちます。
$ oc wait job dpdk-checkup -n <target_namespace> --for condition=complete --timeout 10m次のコマンドを実行して、チェックアップの結果を確認します。
$ oc get configmap dpdk-checkup-config -n <target_namespace> -o yaml出力 config map の例 (成功)
apiVersion: v1 kind: ConfigMap metadata: name: dpdk-checkup-config labels: kiagnose/checkup-type: kubevirt-dpdk data: spec.timeout: 10m spec.param.NetworkAttachmentDefinitionName: "dpdk-network-1" spec.param.trafficGenContainerDiskImage: "quay.io/kiagnose/kubevirt-dpdk-checkup-traffic-gen:v0.4.0" spec.param.vmUnderTestContainerDiskImage: "quay.io/kiagnose/kubevirt-dpdk-checkup-vm:v0.4.0" status.succeeded: "true"1 status.failureReason: ""2 status.startTimestamp: "2023-07-31T13:14:38Z"3 status.completionTimestamp: "2023-07-31T13:19:41Z"4 status.result.trafficGenSentPackets: "480000000"5 status.result.trafficGenOutputErrorPackets: "0"6 status.result.trafficGenInputErrorPackets: "0"7 status.result.trafficGenActualNodeName: worker-dpdk18 status.result.vmUnderTestActualNodeName: worker-dpdk29 status.result.vmUnderTestReceivedPackets: "480000000"10 status.result.vmUnderTestRxDroppedPackets: "0"11 status.result.vmUnderTestTxDroppedPackets: "0"12 - 1
- チェックアップが成功したか (
true)、失敗したか (false) を示します。 - 2
- チェックアップが失敗した場合の失敗の理由。
- 3
- チェックアップが開始した時刻 (RFC 3339 時刻形式)。
- 4
- チェックアップが完了した時刻 (RFC 3339 時刻形式)。
- 5
- トラフィックジェネレーターから送信されたパケットの数。
- 6
- トラフィックジェネレーターから送信されたエラーパケットの数。
- 7
- トラフィックジェネレーターが受信したエラーパケットの数。
- 8
- トラフィックジェネレーター仮想マシンがスケジュールされたノード。
- 9
- テスト対象の仮想マシンがスケジュールされたノード。
- 10
- テスト対象の仮想マシンで受信したパケットの数。
- 11
- DPDK アプリケーションによって破棄された入力トラフィックパケット。
- 12
- DPDK アプリケーションから破棄された出力トラフィックパケット。
以下のコマンドを実行して、以前に作成したジョブおよび config map を削除します。
$ oc delete job -n <target_namespace> dpdk-checkup$ oc delete config-map -n <target_namespace> dpdk-checkup-configオプション: 別のチェックアップを実行する予定がない場合は、
ServiceAccount、Role、RoleBindingマニフェストを削除します。$ oc delete -f <dpdk_sa_roles_rolebinding>.yaml
12.2.3.1.1. DPDK チェックアップ config map パラメーター リンクのコピーリンクがクリップボードにコピーされました!
次の表は、クラスター DPDK 準備状況チェックを実行するときに、入力 ConfigMap マニフェストの data スタンザに設定できる必須パラメーターとオプションパラメーターを示しています。
| パラメーター | 説明 | 必須かどうか |
|---|---|---|
|
| チェックアップが失敗するまでの時間 (分単位)。 | True |
|
|
接続されている SR-IOV NIC の | True |
|
| トラフィックジェネレーターのコンテナーディスクイメージ。 | True |
|
| トラフィックジェネレーター仮想マシンがスケジュールされるノード。DPDK トラフィックを許可するようにノードを設定する必要があります。 | False |
|
| 1 秒あたりのパケット数 (キロ (k) または 100 万 (m) 単位)。デフォルト値は 8m です。 | False |
|
| テスト対象の仮想マシンのコンテナーディスクイメージ。 | True |
|
| テスト対象の仮想マシンがスケジュールされるノード。DPDK トラフィックを許可するようにノードを設定する必要があります。 | False |
|
| トラフィックジェネレーターが実行される期間 (分単位)。デフォルト値は 5 分です。 | False |
|
| SR-IOV NIC の最大帯域幅。デフォルト値は 10Gbps です。 | False |
|
|
| False |
12.2.3.1.2. RHEL 仮想マシン用コンテナーディスクイメージのビルド リンクのコピーリンクがクリップボードにコピーされました!
カスタムの Red Hat Enterprise Linux (RHEL) 8 OS イメージを qcow2 形式でビルドし、それを使用してコンテナーディスクイメージを作成できます。クラスターからアクセス可能なレジストリーにコンテナーディスクイメージを保存し、DPDK チェック config map の spec.param.vmContainerDiskImage 属性でイメージの場所を指定できます。
コンテナーディスクイメージをビルドするには、Image Builder 仮想マシン (VM) を作成する必要があります。Image Builder 仮想マシン は、カスタム RHEL イメージのビルドに使用できる RHEL 8 仮想マシンです。
前提条件
-
Image Builder 仮想マシンは RHEL 8.7 を実行でき、
/varディレクトリーに少なくとも 2 つの CPU コア、4 GiB RAM、20 GB の空き領域がある。 -
Image Builder ツールとその CLI (
composer-cli) が仮想マシンにインストールされている。 virt-customizeツールがインストールされている。# dnf install libguestfs-tools-
Podman CLI ツール (
podman) がインストールされている。
手順
RHEL 8.7 イメージをビルドできることを確認します。
# composer-cli distros list注記非 root として
composer-cliコマンドを実行するには、ユーザーをweldrまたはrootグループに追加します。# usermod -a -G weldr user$ newgrp weldr次のコマンドを入力して、インストールするパッケージ、カーネルのカスタマイズ、起動時に無効化するサービスを含むイメージブループリントファイルを TOML 形式で作成します。
$ cat << EOF > dpdk-vm.toml name = "dpdk_image" description = "Image to use with the DPDK checkup" version = "0.0.1" distro = "rhel-87" [[customizations.user]] name = "root" password = "redhat" [[packages]] name = "dpdk" [[packages]] name = "dpdk-tools" [[packages]] name = "driverctl" [[packages]] name = "tuned-profiles-cpu-partitioning" [customizations.kernel] append = "default_hugepagesz=1GB hugepagesz=1G hugepages=1" [customizations.services] disabled = ["NetworkManager-wait-online", "sshd"] EOF次のコマンドを実行して、ブループリントファイルを Image Builder ツールにプッシュします。
# composer-cli blueprints push dpdk-vm.tomlブループリント名と出力ファイル形式を指定して、システムイメージを生成します。作成プロセスを開始すると、イメージのユニバーサル一意識別子 (UUID) が表示されます。
# composer-cli compose start dpdk_image qcow2作成プロセスが完了するまで待ちます。作成ステータスが
FINISHEDになると次のステップに進めます。# composer-cli compose status次のコマンドを入力し、UUID を指定して
qcow2イメージファイルをダウンロードします。# composer-cli compose image <UUID>次のコマンドを実行して、カスタマイズスクリプトを作成します。
$ cat <<EOF >customize-vm #!/bin/bash # Setup hugepages mount mkdir -p /mnt/huge echo "hugetlbfs /mnt/huge hugetlbfs defaults,pagesize=1GB 0 0" >> /etc/fstab # Create vfio-noiommu.conf echo "options vfio enable_unsafe_noiommu_mode=1" > /etc/modprobe.d/vfio-noiommu.conf # Enable guest-exec,guest-exec-status on the qemu-guest-agent configuration sed -i '/^BLACKLIST_RPC=/ { s/guest-exec-status//; s/guest-exec//g }' /etc/sysconfig/qemu-ga sed -i '/^BLACKLIST_RPC=/ { s/,\+/,/g; s/^,\|,$//g }' /etc/sysconfig/qemu-ga EOFvirt-customizeツールを使用して、Image Builder ツールによって生成されたイメージをカスタマイズします。$ virt-customize -a <UUID>-disk.qcow2 --run=customize-vm --selinux-relabelコンテナーディスクイメージのビルドに必要なすべてのコマンドを含む Dockerfile を作成するには、次のコマンドを入力します。
$ cat << EOF > Dockerfile FROM scratch COPY --chown=107:107 <UUID>-disk.qcow2 /disk/ EOFここでは、以下のようになります。
- <UUID>-disk.qcow2
-
カスタムイメージの名前を
qcow2形式で指定します。
次のコマンドを実行し、コンテナーをビルドしてタグを追加します。
$ podman build . -t dpdk-rhel:latest次のコマンドを実行して、クラスターからアクセスできるレジストリーにコンテナーディスクイメージをプッシュします。
$ podman push dpdk-rhel:latest-
DPDK チェックアップ config map の
spec.param.vmUnderTestContainerDiskImage属性で、コンテナーディスクイメージへのリンクを指定します。