14.2. OpenShift Virtualization クラスターチェックアップフレームワーク
チェックアップ は、特定のクラスター機能が期待どおりに機能するかどうかを確認できる自動テストワークロードです。クラスターチェックアップフレームワークは、ネイティブの Kubernetes リソースを使用してチェックアップを設定および実行します。
OpenShift Virtualization クラスターチェックアップフレームワークは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、以下のリンクを参照してください。
開発者またはクラスター管理者は、事前定義されたチェックアップを使用して、クラスターの保守性を向上させ、予期しない動作をトラブルシューティングし、エラーを最小限に抑え、時間を節約できます。チェックアップの結果を確認し、専門家と共有してさらに分析することができます。ベンダーは、提供する機能やサービスのチェックアップを作成して公開し、顧客環境が正しく設定されていることを確認できます。
14.2.1. 定義済みのレイテンシーチェックアップを実行する リンクのコピーリンクがクリップボードにコピーされました!
レイテンシーチェックアップを使用すると、ネットワーク接続を確認し、セカンダリーネットワークインターフェイスに接続された 2 つの仮想マシン (VM) 間のレイテンシーを測定できます。事前定義されたレイテンシーチェックアップでは、ping ユーティリティーが使用されます。
レイテンシーチェックアップを実行する前に、まずクラスターノードに ブリッジインターフェイスを作成 して、仮想マシンのセカンダリーインターフェイスをノード上の任意のインターフェイスに接続する必要があります。ブリッジインターフェイスを作成しないと、仮想マシンが起動せず、ジョブが失敗します。
既存の namespace で事前定義されたチェックアップを実行するには、チェックアップ用のサービスアカウントの設定、サービスアカウント用の Role および RoleBinding オブジェクトの作成、チェックアップのパーミッションの有効化、入力 config map とチェックアップジョブの作成が含まれます。チェックアップは複数回実行できます。
以下が常に必要になります。
- チェックアップイメージを適用する前に、信頼できるソースからのものであることを確認します。
-
RoleおよびRoleBindingオブジェクトを作成する前に、チェックアップパーミッションを確認してください。
14.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 リストに移動します。チェックアップ名をクリックして詳細を確認します。
14.2.1.2. CLI を使用したレイテンシーチェックアップの実行 リンクのコピーリンクがクリップボードにコピーされました!
CLI を使用してレイテンシーチェックアップを実行できます。
以下の手順を実行します。
- サービスアカウント、ロール、ロールバインディングを作成して、レイテンシーチェックアップへのクラスターアクセス権を提供します。
- config map を作成し、チェックアップを実行して結果を保存するための入力を行います。
- チェックアップを実行するジョブを作成します。
- config map で結果を確認します。
- オプション: チェックアップを再実行するには、既存の config map とジョブを削除し、新しい config map とジョブを作成します。
- 完了したら、レイテンシーチェックアップリソースを削除します。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 - クラスターには少なくとも 2 つのワーカーノードがある。
- namespace の Network Attachment Definition を設定している。
手順
レイテンシーチェックアップ用の
ServiceAccount、Role、RoleBindingマニフェストを作成します。ロールマニフェストファイルの例:
--- 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.20.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
14.2.2. 定義済みのストレージチェックアップを実行する リンクのコピーリンクがクリップボードにコピーされました!
ストレージチェックアップを使用して、クラスターストレージが OpenShift Virtualization に対して最適に設定されていることを確認できます。
既存の namespace で事前定義されたチェックアップを実行するには、チェックアップ用のサービスアカウントの設定、サービスアカウント用の Role および RoleBinding オブジェクトの作成、チェックアップのパーミッションの有効化、入力 config map とチェックアップジョブの作成が含まれます。チェックアップは複数回実行できます。
以下が常に必要になります。
- チェックアップイメージを適用する前に、信頼できるソースからのものであることを確認します。
-
RoleおよびRoleBindingオブジェクトを作成する前に、チェックアップパーミッションを確認してください。
14.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>
14.2.2.2. Web コンソールを使用したストレージチェックアップの実行 リンクのコピーリンクがクリップボードにコピーされました!
ストレージチェックアップを実行して、仮想マシンのストレージが正しく動作していることを検証できます。
手順
-
Web コンソールで Virtualization
Checkups に移動します。 - Storage タブをクリックします。
- Install permissions をクリックします。
- Run checkup をクリックします。
- Name フィールドにチェックアップの名前を入力します。
- Timeout (minutes) フィールドにチェックアップのタイムアウト値を入力します。
- Run をクリックします。
結果
ストレージチェックアップのステータスは、Storage タブの Checkups リストで確認できます。チェックアップ名をクリックして詳細を確認します。
14.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マニフェストファイルを作成します。サービスアカウント、ロール、およびロールバインディングマニフェストの例:
--- 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.20.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.20.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
14.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フィールド値のエラーに関連するログ、イベント、または用語を検索します。
14.2.2.5. ストレージチェックアップのエラーコード リンクのコピーリンクがクリップボードにコピーされました!
ストレージチェックアップが失敗すると、次のエラーコードが storage-checkup-config config map 内に表示される場合があります。
| エラーコード | 意味 |
|---|---|
|
| デフォルトのストレージクラスが設定されていません。 |
|
| 1 つ以上の永続ボリューム要求 (PVC) のバインドに失敗しました。 |
|
| 複数のデフォルトのストレージクラスが設定されています。 |
|
|
空の |
|
|
Elastic File System (EFS) ストレージクラスを使用する仮想マシンがあり、そのストレージクラスにおいて GID と UID が |
|
|
1 つ以上のゴールデンイメージに、最新でない |
|
|
ゴールデンイメージの |
|
| 一部の仮想マシンが予想時間内に起動できませんでした。 |