8.3. CLI を使用した仮想マシンの作成
8.3.1. CLI からの仮想マシンの作成 リンクのコピーリンクがクリップボードにコピーされました!
VirtualMachine マニフェストを編集または作成することで、コマンドラインから仮想マシン (VM) を作成できます。仮想マシンマニフェストで インスタンスタイプ を使用すると、仮想マシン設定を簡素化できます。
Web コンソールを使用してインスタンスタイプから仮想マシンを作成 することもできます。
8.3.1.1. VirtualMachine マニフェストからの仮想マシンの作成 リンクのコピーリンクがクリップボードにコピーされました!
VirtualMachine マニフェストから仮想マシンを作成できます。これらのマニフェストの作成を簡素化するには、virtctl コマンドラインツールを使用できます。
前提条件
-
virtctlCLI がインストールされている。 -
OpenShift CLI (
oc) がインストールされている。
手順
仮想マシンの
VirtualMachineマニフェストを作成し、YAML ファイルとして保存します。たとえば、最小限の Red Hat Enterprise Linux (RHEL) 仮想マシンを作成するには、次のコマンドを実行します。$ virtctl create vm --name rhel-9-minimal --volume-import type:ds,src:openshift-virtualization-os-images/rhel9仮想マシンの
VirtualMachineマニフェストを確認します。注記このサンプルマニフェストでは、仮想マシン認証は設定されません。
RHEL 仮想マシンのマニフェストの例
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: rhel-9-minimal1 spec: dataVolumeTemplates: - metadata: name: imported-volume-mk4lj spec: sourceRef: kind: DataSource name: rhel92 namespace: openshift-virtualization-os-images3 storage: resources: {} instancetype: inferFromVolume: imported-volume-mk4lj4 inferFromVolumeFailurePolicy: Ignore preference: inferFromVolume: imported-volume-mk4lj5 inferFromVolumeFailurePolicy: Ignore runStrategy: Always template: spec: domain: devices: {} memory: guest: 512Mi resources: {} terminationGracePeriodSeconds: 180 volumes: - dataVolume: name: imported-volume-mk4lj name: imported-volume-mk4ljマニフェストファイルを使用して仮想マシンを作成します。
$ oc create -f <vm_manifest_file>.yamlオプション: 仮想マシンを起動します。
$ virtctl start <vm_name>
次のステップ
8.3.2. コンテナーディスクを使用した仮想マシンの作成 リンクのコピーリンクがクリップボードにコピーされました!
オペレーティングシステムイメージから構築されたコンテナーディスクを使用して、仮想マシンを作成できます。
コンテナーディスクの自動更新を有効にすることができます。詳細は、ブートソースの自動更新の管理 を参照してください。
コンテナーディスクが大きい場合は、I/O トラフィックが増加し、ワーカーノードが使用できなくなる可能性があります。この問題を解決するには、次のタスクを実行できます。
次の手順を実行して、コンテナーディスクから仮想マシンを作成します。
- オペレーティングシステムイメージをコンテナーディスクに構築し、それをコンテナーレジストリーにアップロードします。
- コンテナーレジストリーに TLS がない場合は、レジストリーの TLS を無効にするように環境を設定します。
- Web コンソール または コマンドライン を使用して、コンテナーディスクをディスクソースとして使用する仮想マシンを作成します。
Red Hat が提供していないオペレーティングシステムイメージから作成された仮想マシンには、QEMU ゲストエージェント をインストールする必要があります。
8.3.2.1. コンテナーディスクの構築とアップロード リンクのコピーリンクがクリップボードにコピーされました!
仮想マシンイメージをコンテナーディスクに構築し、レジストリーにアップロードできます。
コンテナーディスクのサイズは、コンテナーディスクがホストされているレジストリーの最大レイヤーサイズによって制限されます。
Red Hat Quay の場合、Red Hat Quay の初回デプロイ時に作成される YAML 設定ファイルを編集して、最大レイヤーサイズを変更できます。
前提条件
-
podmanがインストールされている必要があります。 - QCOW2 または RAW イメージファイルが必要です。
手順
Dockerfile を作成して、仮想マシンイメージをコンテナーイメージにビルドします。仮想マシンイメージは、UID
107を持つ QEMU によって所有され、コンテナー内の/disk/ディレクトリーに配置される必要があります。次に、/disk/ディレクトリーのパーミッションは0440に設定する必要があります。以下の例では、Red Hat Universal Base Image (UBI) を使用して最初の段階でこれらの設定変更を処理し、2 番目の段階で最小の
scratchイメージを使用して結果を保存します。$ cat > Dockerfile << EOF FROM registry.access.redhat.com/ubi8/ubi:latest AS builder ADD --chown=107:107 <vm_image>.qcow2 /disk/1 RUN chmod 0440 /disk/* FROM scratch COPY --from=builder /disk/* /disk/ EOF- 1
<vm_image>は、QCOW2 または RAW 形式のイメージです。リモートイメージを使用する場合は、<vm_image>.qcow2を完全な URL に置き換えます。
コンテナーをビルドし、これにタグ付けします。
$ podman build -t <registry>/<container_disk_name>:latest .コンテナーイメージをレジストリーにプッシュします。
$ podman push <registry>/<container_disk_name>:latest
8.3.2.2. コンテナーレジストリーの TLS を無効にする リンクのコピーリンクがクリップボードにコピーされました!
HyperConverged カスタムリソースの insecureRegistries フィールドを編集して、1 つ以上のコンテナーレジストリーの TLS(トランスポート層セキュリティー) を無効にできます。
前提条件
-
OpenShift CLI (
oc) がインストールされている。
手順
以下のコマンドを実行して、デフォルトのエディターで
HyperConvergedCR を開きます。$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnvセキュアでないレジストリーのリストを
spec.storageImport.insecureRegistriesフィールドに追加します。HyperConvergedカスタムリソースの例:apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: storageImport: insecureRegistries:1 - "private-registry-example-1:5000" - "private-registry-example-2:5000"- 1
- このリストのサンプルを、有効なレジストリーホスト名に置き換えます。
8.3.2.3. Web コンソールを使用してコンテナーディスクから仮想マシンを作成する リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform Web コンソールを使用してコンテナーレジストリーからコンテナーディスクをインポートすることで、仮想マシンを作成できます。
手順
-
Web コンソールで Virtualization
Catalog に移動します。 - 使用可能なブートソースのないテンプレートタイルをクリックします。
- Customize VirtualMachine をクリックします。
- Customize template parameters ページで、Storage を展開し、Disk source リストから Registry (creates PVC) を選択します。
-
コンテナーイメージの URL を入力します。例:
https://mirror.arizona.edu/fedora/linux/releases/38/Cloud/x86_64/images/Fedora-Cloud-Base-38-1.6.x86_64.qcow2 - ディスクサイズを設定します。
- Next をクリックします。
- Create VirtualMachine をクリックします。
8.3.2.4. CLI を使用してコンテナーディスクから仮想マシンを作成する リンクのコピーリンクがクリップボードにコピーされました!
コマンドラインを使用して、コンテナーディスクから仮想マシンを作成できます。
前提条件
- コンテナーディスクを含むコンテナーレジストリーへのアクセス認証情報が必要です。
-
virtctlCLI がインストールされている。 -
OpenShift CLI (
oc) がインストールされている。
手順
仮想マシンの
VirtualMachineマニフェストを作成し、YAML ファイルとして保存します。たとえば、コンテナーディスクから最小限の Red Hat Enterprise Linux (RHEL) 仮想マシンを作成するには、次のコマンドを実行します。$ virtctl create vm --name vm-rhel-9 --instancetype u1.small --preference rhel.9 --volume-containerdisk src:registry.redhat.io/rhel9/rhel-guest-image:9.5仮想マシンの
VirtualMachineマニフェストを確認します。apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: vm-rhel-91 spec: instancetype: name: u1.small2 preference: name: rhel.93 runStrategy: Always template: metadata: creationTimestamp: null spec: domain: devices: {} resources: {} terminationGracePeriodSeconds: 180 volumes: - containerDisk: image: registry.redhat.io/rhel9/rhel-guest-image:9.54 name: vm-rhel-9-containerdisk-0次のコマンドを実行して VM を作成します。
$ oc create -f <vm_manifest_file>.yaml
検証
仮想マシンのステータスを監視します。
$ oc get vm <vm_name>プロビジョニングが成功すると、仮想マシンのステータスが
Runningになります。出力例:NAME AGE STATUS READY vm-rhel-9 18s Running Trueプロビジョニングが完了し、シリアルコンソールにアクセスして仮想マシンが起動したことを確認します。
$ virtctl console <vm_name>仮想マシンが実行中でシリアルコンソールにアクセスできる場合、出力は次のようになります。
Successfully connected to vm-rhel-9 console. The escape sequence is ^]
8.3.3. PVC のクローン作成による仮想マシンの作成 リンクのコピーリンクがクリップボードにコピーされました!
カスタムイメージを使用して既存の永続ボリューム要求 (PVC) のクローンを作成することで、仮想マシンを作成できます。
Red Hat が提供していないオペレーティングシステムイメージから作成された仮想マシンには、QEMU ゲストエージェント をインストールする必要があります。
PVC のクローンを作成するには、ソース PVC を参照するデータボリュームを作成します。
8.3.3.1. クローン作成について リンクのコピーリンクがクリップボードにコピーされました!
データボリュームのクローンを作成する際、Containerized Data Importer (CDI) は、Container Storage Interface (CSI) クローン方式のうちの 1 つ、つまり CSI ボリュームクローニングとスマートクローニングのどちらかを選択します。どちらの方法も効率的ですが、特定の要件があります。要件が満たされていない場合、CDI はホスト支援型クローン作成を使用します。
ホスト支援型クローン作成は、最も時間がかかり、最も効率の悪いクローン作成方法ですが、他の 2 つのクローン作成方法よりも要件の数が少ないです。
8.3.3.1.1. CSI ボリュームのクローン作成 リンクのコピーリンクがクリップボードにコピーされました!
Container Storage Interface (CSI) のクローン作成では、CSI ドライバー機能を使用して、ソースデータボリュームのクローンをより効率的に作成します。
CSI ボリュームのクローン作成には次の要件があります。
- 永続ボリューム要求 (PVC) のストレージクラスをサポートする CSI ドライバーは、ボリュームのクローン作成をサポートする必要があります。
-
CDI によって認識されないプロビジョナーの場合、対応するストレージプロファイルの
cloneStrategyが CSI Volume Cloning に設定されている必要があります。 - ソース PVC とターゲット PVC は、同じストレージクラスとボリュームモードを持つ必要があります。
-
データボリュームを作成する場合は、ソース namespace に
datavolumes/sourceリソースを作成するパーミッションが必要です。 - ソースボリュームは使用されていない状態である必要があります。
8.3.3.1.2. スマートクローン作成 リンクのコピーリンクがクリップボードにコピーされました!
スナップショット機能を備えた Container Storage Interface (CSI) プラグインが使用可能な場合、Containerized Data Importer (CDI) はスナップショットから永続ボリューム要求 (PVC) を作成し、これにより、追加の PVC の効率的なクローン作成を可能にします。
スマートクローン作成には次の要件があります。
- ストレージクラスに関連付けられたスナップショットクラスが存在する必要があります。
- ソース PVC とターゲット PVC は、同じストレージクラスとボリュームモードを持つ必要があります。
-
データボリュームを作成する場合は、ソース namespace に
datavolumes/sourceリソースを作成するパーミッションが必要です。 - ソースボリュームは使用されていない状態である必要があります。
8.3.3.1.3. ホスト支援型クローン作成 リンクのコピーリンクがクリップボードにコピーされました!
Container Storage Interface (CSI) ボリュームのクローン作成もスマートクローン作成の要件も満たされていない場合、ホスト支援型クローン作成がフォールバック方法として使用されます。ホスト支援型クローン作成は、他の 2 つのクローン作成方法と比べると効率が悪いです。
ホスト支援型クローン作成では、ソース Pod とターゲット Pod を使用して、ソースボリュームからターゲットボリュームにデータをコピーします。ターゲットの永続ボリューム要求 (PVC) には、ホスト支援型クローン作成が使用された理由を説明するフォールバック理由のアノテーションが付けられ、イベントが作成されます。
PVC ターゲットアノテーションの例:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
cdi.kubevirt.io/cloneFallbackReason: The volume modes of source and target are incompatible
cdi.kubevirt.io/clonePhase: Succeeded
cdi.kubevirt.io/cloneType: copy
イベントの例:
NAMESPACE LAST SEEN TYPE REASON OBJECT MESSAGE
test-ns 0s Warning IncompatibleVolumeModes persistentvolumeclaim/test-target The volume modes of source and target are incompatible
8.3.3.2. Web コンソールを使用した PVC からの仮想マシンの作成 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform Web コンソールを使用して永続ボリューム要求 (PVC) のクローンを作成することにより、仮想マシンを作成できます。
前提条件
- ソース PVC を含む namespace にアクセスできる。
手順
-
Web コンソールで Virtualization
Catalog に移動します。 - 使用可能なブートソースのないテンプレートタイルをクリックします。
- Customize VirtualMachine をクリックします。
- テンプレートパラメーターのカスタマイズ ページで、Storage を展開し、Disk source リストから PVC (clone PVC) を選択します。
- PVC プロジェクトと PVC 名を選択します。
- ディスクサイズを設定します。
- Next をクリックします。
- Create VirtualMachine をクリックします。
8.3.3.3. CLI を使用して PVC から仮想マシンを作成する リンクのコピーリンクがクリップボードにコピーされました!
コマンドラインを使用して既存の仮想マシンの永続ボリューム要求 (PVC) のクローンを作成することで、仮想マシンを作成できます。
次のオプションのいずれかを使用して、PVC のクローンを作成できます。
PVC を新しいデータボリュームに複製します。
この方法では、ライフサイクルが元の仮想マシンから独立したデータボリュームが作成されます。元の仮想マシンを削除しても、新しいデータボリュームやそれに関連付けられた PVC には影響しません。
dataVolumeTemplatesスタンザを含むVirtualMachineマニフェストを作成して、PVC を複製します。この方法では、ライフサイクルが元の仮想マシンに依存するデータボリュームが作成されます。元の仮想マシンを削除すると、クローン作成されたデータボリュームとそれに関連付けられた PVC も削除されます。
8.3.3.3.1. OpenShift Data Foundation における大規模なクローンパフォーマンスの最適化 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Data Foundation を使用する場合、ストレージプロファイルはデフォルトのクローン作成ストラテジーを csi-clone として設定します。ただし、次のリンクに示すように、この方法には制限があります。
永続ボリューム要求 (PVC) から一定数のクローンが作成されると、バックグラウンドでフラット化プロセスが開始され、大規模なクローン作成のパフォーマンスが大幅に低下する可能性があります。
単一のソース PVC から数百のクローンを作成する際のパフォーマンスを高めるためには、デフォルトの csi-clone ストラテジーの代わりに VolumeSnapshot クローン作成メソッドを使用します。
手順
次のコンテンツを使用して、ソースイメージの
VolumeSnapshotカスタムリソース (CR) を作成します。apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: golden-volumesnapshot namespace: golden-ns spec: volumeSnapshotClassName: ocs-storagecluster-rbdplugin-snapclass source: persistentVolumeClaimName: golden-snap-sourceVolumeSnapshotをDataVolume cloneのソースとして参照するためのspec.source.snapshotスタンザを追加します。spec: source: snapshot: namespace: golden-ns name: golden-volumesnapshot
8.3.3.3.2. データボリュームへの PVC のクローン作成 リンクのコピーリンクがクリップボードにコピーされました!
コマンドラインを使用して、既存の仮想マシンディスクの永続ボリューム要求 (PVC) のクローンをデータボリュームに作成できます。
元のソース PVC を参照するデータボリュームを作成します。新しいデータボリュームのライフサイクルは、元の仮想マシンから独立しています。元の仮想マシンを削除しても、新しいデータボリュームやそれに関連付けられた PVC には影響しません。
異なるボリュームモード間のクローン作成は、ソース PV とターゲット PV が kubevirt コンテンツタイプに属している限り、ブロック永続ボリューム (PV) からファイルシステム PV へのクローン作成など、ホスト支援型クローン作成でサポートされます。
スマートクローン作成は、スナップショットを使用して PVC のクローンを作成するため、ホスト支援型クローン作成よりも高速かつ効率的です。スマートクローン作成は、Red Hat OpenShift Data Foundation など、スナップショットをサポートするストレージプロバイダーによってサポートされています。
異なるボリュームモード間のクローン作成は、スマートクローン作成ではサポートされていません。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 - ソース PVC を含む仮想マシンの電源をオフにする必要があります。
- PVC を別の namespace に複製する場合は、ターゲットの namespace にリソースを作成するパーミッションが必要です。
スマートクローン作成の追加の前提条件:
- ストレージプロバイダーはスナップショットをサポートする必要がある。
- ソース PVC とターゲット PVC には、同じストレージプロバイダーとボリュームモードがある必要があります。
次の例に示すように、
VolumeSnapshotClassオブジェクトのdriverキーの値は、StorageClassオブジェクトのprovisionerキーの値と一致する必要があります。VolumeSnapshotClassオブジェクトの例:kind: VolumeSnapshotClass apiVersion: snapshot.storage.k8s.io/v1 driver: openshift-storage.rbd.csi.ceph.com # ...StorageClassオブジェクトの例:kind: StorageClass apiVersion: storage.k8s.io/v1 # ... provisioner: openshift-storage.rbd.csi.ceph.com
手順
次の例に示すように、
DataVolumeマニフェストを作成します。apiVersion: cdi.kubevirt.io/v1beta1 kind: DataVolume metadata: name: <datavolume>1 spec: source: pvc: namespace: "<source_namespace>"2 name: "<my_vm_disk>"3 storage: {}以下のコマンドを実行してデータボリュームを作成します。
$ oc create -f <datavolume>.yaml注記データ量により、PVC が準備される前に仮想マシンが起動できなくなります。PVC のクローン作成中に、新しいデータボリュームを参照する仮想マシンを作成できます。
8.3.3.3.3. データボリュームテンプレートを使用したクローン PVC からの仮想マシンの作成 リンクのコピーリンクがクリップボードにコピーされました!
データボリュームテンプレートを使用して、既存の仮想マシンの永続ボリューム要求 (PVC) のクローンを作成する仮想マシンを作成できます。この方法では、ライフサイクルが元の仮想マシンから独立したデータボリュームが作成されます。
前提条件
- ソース PVC を含む仮想マシンの電源をオフにする必要があります。
-
virtctlCLI がインストールされている。 -
OpenShift CLI (
oc) がインストールされている。
手順
仮想マシンの
VirtualMachineマニフェストを作成し、YAML ファイルとして保存します。次に例を示します。$ virtctl create vm --name rhel-9-clone --volume-import type:pvc,src:my-project/imported-volume-q5pr9仮想マシンの
VirtualMachineマニフェストを確認します。apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: rhel-9-clone1 spec: dataVolumeTemplates: - metadata: name: imported-volume-h4qn8 spec: source: pvc: name: imported-volume-q5pr92 namespace: my-project3 storage: resources: {} instancetype: inferFromVolume: imported-volume-h4qn84 inferFromVolumeFailurePolicy: Ignore preference: inferFromVolume: imported-volume-h4qn85 inferFromVolumeFailurePolicy: Ignore runStrategy: Always template: spec: domain: devices: {} memory: guest: 512Mi resources: {} terminationGracePeriodSeconds: 180 volumes: - dataVolume: name: imported-volume-h4qn8 name: imported-volume-h4qn8PVC のクローンが作成されたデータボリュームで仮想マシンを作成します。
$ oc create -f <vm_manifest_file>.yaml