11.3. ブートソースの自動更新の管理
次のブートソースの自動更新を管理できます。
ブートソースにより、ユーザーは仮想マシン (VM) をよりアクセスしやすく効率的に作成できるようになります。ブートソースの自動更新が有効になっている場合、コンテナー化データインポーター (CDI) はイメージをインポート、ポーリング、更新して、新しい仮想マシン用にクローンを作成できるようにします。デフォルトでは、CDI は Red Hat ブートソースを自動的に更新します。
11.3.1. Red Hat ブートソースの更新の管理 リンクのコピーリンクがクリップボードにコピーされました!
enableCommonBootImageImport フィールドの値を false に設定することで、すべてのシステム定義のブートソースの自動更新をオプトアウトできます。値を false に設定すると、すべての DataImportCron オブジェクトが削除されます。ただし、これによって、オペレーティングシステムイメージを格納する、以前にインポートされたブートソースオブジェクトが削除されるわけではありません。管理者は、これらを手動で削除できます。
enableCommonBootImageImport フィールドの値が false に設定されている場合、DataSource オブジェクトはリセットされ、元のブートソースをポイントしなくなります。管理者は、DataSource オブジェクトの新しい永続ボリューム要求 (PVC) またはボリュームスナップショットを作成し、それにオペレーティングシステムイメージを設定することで、ブートソースを手動で提供できます。
11.3.1.1. すべてのシステム定義のブートソースの自動更新の管理 リンクのコピーリンクがクリップボードにコピーされました!
ブートソースの自動インポートと更新を無効にすると、リソースの使用量が削減される可能性があります。切断された環境では、ブートソースの自動更新を無効にすると、CDIDataImportCronOutdated アラートがログをいっぱいにするのを防ぎます。
すべてのシステム定義のブートソースの自動更新を無効にするには、enableCommonBootImageImport フィールドの値を false に設定します。この値を true に設定すると、自動更新が再びオンになります。
カスタムブートソースは、この設定の影響を受けません。
前提条件
-
OpenShift CLI (
oc) がインストールされている。
手順
HyperConvergedカスタムリソース (CR) を編集して、自動ブートソース更新を有効または無効にします。自動ブートソース更新を無効にするには、
HyperConvergedCR のspec.enableCommonBootImageImportフィールド値をfalseに設定します。以下に例を示します。$ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op": "replace", "path": \ "/spec/enableCommonBootImageImport", \ "value": false}]'自動ブートソース更新を再度有効にするには、
HyperConvergedCR のspec.enableCommonBootImageImportフィールド値をtrueに設定します。以下に例を示します。$ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op": "replace", "path": \ "/spec/enableCommonBootImageImport", \ "value": true}]'
11.3.2. カスタムブートソースの更新の管理 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Virtualization によって提供されていない カスタム ブートソースは、機能ゲートによって制御されません。HyperConverged カスタムリソース (CR) を編集して、それらを個別に管理する必要があります。
ストレージクラスを設定する必要があります。そうしないと、クラスターはカスタムブートソースの自動更新を受信できません。詳細は、ストレージクラスの定義 を参照してください。
11.3.2.1. デフォルトおよび virt-default ストレージクラスの設定 リンクのコピーリンクがクリップボードにコピーされました!
ストレージクラスは、ワークロードに対して永続ストレージをプロビジョニングする方法を決定します。OpenShift Virtualization では、virt-default ストレージクラスがクラスターのデフォルトストレージクラスよりも優先され、仮想化ワークロード専用に使用されます。
virt-default またはクラスターのデフォルトとして一度に設定できるストレージクラスは 1 つだけです。複数のストレージクラスがデフォルトとしてマークされている場合、virt-default ストレージクラスがクラスターのデフォルトをオーバーライドします。一貫した動作を確保するには、仮想化ワークロードのデフォルトとして 1 つのストレージクラスのみを設定します。
ブートソースは、デフォルトのストレージクラスを使用して作成されます。デフォルトのストレージクラスが変更されると、古いブートソースは新しいデフォルトのストレージクラスを使用して自動的に更新されます。クラスターにデフォルトのストレージクラスがない場合は、定義する必要があります。
ブートソースイメージがボリュームスナップショットとして保存され、クラスターのデフォルトと virt-default ストレージクラスの両方が設定解除されている場合、ボリュームスナップショットはクリーンアップされ、新しいデータボリュームが作成されます。ただし、新しく作成されたデータボリュームは、デフォルトのストレージクラスが設定されるまでインポートを開始しません。
前提条件
-
OpenShift CLI (
oc) がインストールされている。
手順
現在の virt-default またはクラスターのデフォルトストレージクラスを false にパッチします。
次のコマンドを実行して、現在 virt-default としてマークされているすべてのストレージクラスを識別します。
$ oc get sc -o json| jq '.items[].metadata|select(.annotations."storageclass.kubevirt.io/is-default-virt-class"=="true")|.name'返されたストレージクラスごとに、次のコマンドを実行して virt-default アノテーションを削除します。
$ oc patch storageclass <storage_class_name> -p '{"metadata": {"annotations": {"storageclass.kubevirt.io/is-default-virt-class": "false"}}}'次のコマンドを実行して、現在クラスターのデフォルトとしてマークされているすべてのストレージクラスを識別します。
$ oc get sc -o json| jq '.items[].metadata|select(.annotations."storageclass.kubernetes.io/is-default-class"=="true")|.name'返されたストレージクラスごとに、次のコマンドを実行してクラスターのデフォルトアノテーションを削除します。
$ oc patch storageclass <storage_class_name> -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "false"}}}'
新しいデフォルトのストレージクラスを設定します。
次のコマンドを実行して、virt-default ロールをストレージクラスに割り当てます。
$ oc patch storageclass <storage_class_name> -p '{"metadata": {"annotations": {"storageclass.kubevirt.io/is-default-virt-class": "true"}}}'または、次のコマンドを実行して、クラスターのデフォルトロールをストレージクラスに割り当てます。
$ oc patch storageclass <storage_class_name> -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "true"}}}'
11.3.2.2. ブートソースイメージのストレージクラスの設定 リンクのコピーリンクがクリップボードにコピーされました!
HyperConverged リソースで特定のストレージクラスを設定できます。
安定した動作を確保し、不要な再インポートを回避するには、HyperConverged リソースの dataImportCronTemplates セクションで storageClassName を指定します。
前提条件
-
OpenShift CLI (
oc) がインストールされている。
手順
以下のコマンドを実行して、デフォルトのエディターで
HyperConvergedCR を開きます。$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnvHyperConvergedリソースの spec セクションにdataImportCronTemplateを追加し、storageClassNameを設定します。apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged spec: dataImportCronTemplates: - metadata: name: rhel9-image-cron spec: template: spec: storage: storageClassName: <storage_class>1 schedule: "0 */12 * * *"2 managedDataSource: <data_source>3 # ...For the custom image to be detected as an available boot source, the value of the `spec.dataVolumeTemplates.spec.sourceRef.name` parameter in the VM template must match this value.- HyperConverged Operator (HCO) と Scheduling、Scale、および Performance (SSP) リソースのリコンシリエーションが完了するまで待ちます。
次のコマンドを実行して、
openshift-virtualization-os-imagesnamespace から古くなったDataVolumeおよびVolumeSnapshotオブジェクトを削除します。$ oc delete DataVolume,VolumeSnapshot -n openshift-virtualization-os-images --selector=cdi.kubevirt.io/dataImportCronすべての
DataSourceオブジェクトが "Ready - True" ステータスに達するまで待機します。データソースは、PersistentVolumeClaim (PVC) または VolumeSnapshot のいずれかを参照できます。予想されるソース形式を確認するには、次のコマンドを実行します。$ oc get storageprofile <storage_class_name> -o json | jq .status.dataImportCronSourceFormat
11.3.2.3. カスタムブートソースの自動更新を有効にする リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Virtualization は、デフォルトでシステム定義のブートソースを自動的に更新しますが、カスタムブートソースは自動的に更新しません。HyperConverged カスタムリソース (CR) を編集して、自動更新を手動で有効にする必要があります。
前提条件
- クラスターにはデフォルトのストレージクラスがあります。
-
OpenShift CLI (
oc) がインストールされている。
手順
以下のコマンドを実行して、デフォルトのエディターで
HyperConvergedCR を開きます。$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv適切なテンプレートおよびブートソースを
dataImportCronTemplatesセクションで追加して、HyperConvergedCR を編集します。以下に例を示します。apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged spec: dataImportCronTemplates: - metadata: name: centos-stream9-image-cron annotations: cdi.kubevirt.io/storage.bind.immediate.requested: "true"1 spec: schedule: "0 */12 * * *"2 template: spec: source: registry:3 url: docker://quay.io/containerdisks/centos-stream:9 storage: resources: requests: storage: 30Gi garbageCollect: Outdated managedDataSource: centos-stream94 - 1
- このアノテーションは、
volumeBindingModeがWaitForFirstConsumerに設定されたストレージクラスに必要です。 - 2
- cron 形式で指定されるジョブのスケジュール。
- 3
- レジストリーソースからデータボリュームを作成するのに使用します。
nodedocker キャッシュに基づくデフォルトのnodepullMethodではなく、デフォルトのpodpullMethodを使用します。nodedocker キャッシュはレジストリーイメージがContainer.Imageで利用可能な場合に便利ですが、CDI インポーターはこれにアクセスすることは許可されていません。 - 4
- 利用可能なブートソースとして検出するカスタムイメージの場合、イメージの
managedDataSourceの名前が、仮想マシンテンプレート YAML ファイルのspec.dataVolumeTemplates.spec.sourceRef.nameにあるテンプレートのDataSourceの名前に一致する必要があります。
- ファイルを保存します。
11.3.2.4. ボリュームスナップショットのブートソースを有効にする リンクのコピーリンクがクリップボードにコピーされました!
オペレーティングシステムのベースイメージを格納するストレージクラスに関連付けられている StorageProfile でパラメーターを設定することで、ボリュームスナップショットのブートソースを有効にできます。
DataImportCron は、元々 PVC ソースのみを維持するように設計されていましたが、特定のストレージタイプでは VolumeSnapshot ソースの方が PVC ソースよりも拡張性に優れています。
ストレージプロファイルでは、単一のスナップショットからクローンを作成する場合により適切に拡張できることが証明されているボリュームスナップショットを使用してください。
前提条件
- オペレーティングシステムイメージを含むボリュームスナップショットにアクセスできる。
- ストレージはスナップショットをサポートしている。
-
OpenShift CLI (
oc) がインストールされている。
手順
次のコマンドを実行して、ブートソースのプロビジョニングに使用されるストレージクラスに対応するストレージプロファイルオブジェクトを開きます。
$ oc edit storageprofile <storage_class>-
StorageProfileのdataImportCronSourceFormat仕様を確認して、仮想マシンがデフォルトで PVC またはボリュームスナップショットを使用しているか確認します。 必要に応じて、
dataImportCronSourceFormat仕様をsnapshotに更新して、ストレージプロファイルを編集します。ストレージプロファイルの例:
apiVersion: cdi.kubevirt.io/v1beta1 kind: StorageProfile metadata: # ... spec: dataImportCronSourceFormat: snapshot
検証
ブートソースのプロビジョニングに使用されるストレージクラスに対応するストレージプロファイルオブジェクトを開きます。
$ oc get storageprofile <storage_class> -oyaml-
StorageProfileのdataImportCronSourceFormat仕様が 'snapshot' に設定されていること、およびDataImportCronが指すDataSourceオブジェクトがボリュームスナップショットを参照していることを確認します。
これで、これらのブートソースを使用して仮想マシンを作成できるようになりました。
11.3.3. 単一ブートソースの自動更新を無効にする リンクのコピーリンクがクリップボードにコピーされました!
HyperConverged カスタムリソース (CR) を編集することで、カスタムブートソースかシステム定義ブートソースかに関係なく、個々のブートソースの自動更新を無効にできます。
前提条件
-
OpenShift CLI (
oc) がインストールされている。
手順
以下のコマンドを実行して、デフォルトのエディターで
HyperConvergedCR を開きます。$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnvspec.dataImportCronTemplatesフィールドを編集して、個々のブートソースの自動更新を無効にします。- カスタムブートソース
-
spec.dataImportCronTemplatesフィールドからブートソースを削除します。カスタムブートソースの自動更新はデフォルトで無効になっています。
-
- システム定義のブートソース
ブートソースを
spec.dataImportCronTemplatesに追加します。注記システム定義のブートソースの自動更新はデフォルトで有効になっていますが、これらのブートソースは追加しない限り CR にリストされません。
dataimportcrontemplate.kubevirt.io/enableアノテーションの値を'false'に設定します。以下に例を示します。
apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged spec: dataImportCronTemplates: - metadata: annotations: dataimportcrontemplate.kubevirt.io/enable: 'false' name: rhel8-image-cron # ...
- ファイルを保存します。
11.3.4. ブートソースのステータスの確認 リンクのコピーリンクがクリップボードにコピーされました!
HyperConverged カスタムリソース (CR) を表示することで、ブートソースがシステム定義であるかカスタムであるかを判断できます。
前提条件
-
OpenShift CLI (
oc) がインストールされている。
手順
次のコマンドを実行して、
HyperConvergedCR の内容を表示します。$ oc get hyperconverged kubevirt-hyperconverged -n openshift-cnv -o yaml出力例:
apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged spec: # ... status: # ... dataImportCronTemplates: - metadata: annotations: cdi.kubevirt.io/storage.bind.immediate.requested: "true" name: centos-9-image-cron spec: garbageCollect: Outdated managedDataSource: centos-stream9 schedule: 55 8/12 * * * template: metadata: {} spec: source: registry: url: docker://quay.io/containerdisks/centos-stream:9 storage: resources: requests: storage: 30Gi status: {} status: commonTemplate: true1 # ... - metadata: annotations: cdi.kubevirt.io/storage.bind.immediate.requested: "true" name: user-defined-dic spec: garbageCollect: Outdated managedDataSource: user-defined-centos-stream9 schedule: 55 8/12 * * * template: metadata: {} spec: source: registry: pullMethod: node url: docker://quay.io/containerdisks/centos-stream:9 storage: resources: requests: storage: 30Gi status: {} status: {}2 # ...status.dataImportCronTemplates.statusフィールドを確認して、ブートソースのステータスを確認します。-
フィールドに
commonTemplate: trueが含まれている場合、それはシステム定義のブートソースです。 -
status.dataImportCronTemplates.statusフィールドの値が{}の場合、それはカスタムブートソースです。
-
フィールドに