8.3. CLI を使用した仮想マシンの作成


8.3.1. CLI から仮想マシンを作成する

VirtualMachine マニフェストを編集または作成することで、コマンドラインから仮想マシン (VM) を作成できます。仮想マシンマニフェストで インスタンスタイプ を使用すると、仮想マシン設定を簡素化できます。

注記

8.3.1.1. VirtualMachine マニフェストからの仮想マシンの作成

VirtualMachine マニフェストから仮想マシンを作成できます。これらのマニフェストの作成を簡素化するには、virtctl コマンドラインツールを使用できます。

前提条件

  • virtctl クライアントをインストールしている。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. 仮想マシンの VirtualMachine マニフェストを作成し、YAML ファイルとして保存します。たとえば、最小限の Red Hat Enterprise Linux (RHEL) 仮想マシンを作成するには、次のコマンドを実行します。

    Copy to Clipboard Toggle word wrap
    $ virtctl create vm --name rhel-9-minimal --volume-import type:ds,src:openshift-virtualization-os-images/rhel9
  2. 仮想マシンの VirtualMachine マニフェストを確認します。

    注記

    このサンプルマニフェストでは、仮想マシン認証は設定されません。

    RHEL 仮想マシンのマニフェストの例

    Copy to Clipboard Toggle word wrap
    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: rhel-9-minimal 
    1
    
    spec:
      dataVolumeTemplates:
      - metadata:
          name: imported-volume-mk4lj
        spec:
          sourceRef:
            kind: DataSource
            name: rhel9 
    2
    
            namespace: openshift-virtualization-os-images 
    3
    
          storage:
            resources: {}
      instancetype:
        inferFromVolume: imported-volume-mk4lj 
    4
    
        inferFromVolumeFailurePolicy: Ignore
      preference:
        inferFromVolume: imported-volume-mk4lj 
    5
    
        inferFromVolumeFailurePolicy: Ignore
      runStrategy: Always
      template:
        spec:
          domain:
            devices: {}
            memory:
              guest: 512Mi
            resources: {}
          terminationGracePeriodSeconds: 180
          volumes:
          - dataVolume:
              name: imported-volume-mk4lj
            name: imported-volume-mk4lj

    1
    仮想マシン名。
    2
    ゲストオペレーティングシステムのブートソース。
    3
    ブートソースの namespace。ゴールデンイメージは、openshift-virtualization-os-images namespace に保存されます。
    4
    インスタンスタイプは、選択した DataSource オブジェクトから推測されます。
    5
    設定は、選択した DataSource オブジェクトから推測されます。
  3. マニフェストファイルを使用して仮想マシンを作成します。

    Copy to Clipboard Toggle word wrap
    $ oc create -f <vm_manifest_file>.yaml
  4. オプション: 仮想マシンを起動します。

    Copy to Clipboard Toggle word wrap
    $ virtctl start <vm_name>

8.3.2. コンテナーディスクを使用した仮想マシンの作成

オペレーティングシステムイメージから構築されたコンテナーディスクを使用して、仮想マシンを作成できます。

コンテナーディスクの自動更新を有効にすることができます。詳細は、ブートソースの自動更新の管理 を参照してください。

重要

コンテナーディスクが大きい場合は、I/O トラフィックが増加し、ワーカーノードが使用できなくなる可能性があります。この問題を解決するには、次のタスクを実行できます。

次の手順を実行して、コンテナーディスクから仮想マシンを作成します。

  1. オペレーティングシステムイメージをコンテナーディスクに構築し、それをコンテナーレジストリーにアップロードします
  2. コンテナーレジストリーに TLS がない場合は、レジストリーの TLS を無効にするように環境を設定します
  3. Web コンソール または コマンドライン を使用して、コンテナーディスクをディスクソースとして使用する仮想マシンを作成します。
重要

Red Hat が提供していないオペレーティングシステムイメージから作成された仮想マシンには、QEMU ゲストエージェント をインストールする必要があります。

8.3.2.1. コンテナーディスクの構築とアップロード

仮想マシンイメージをコンテナーディスクに構築し、レジストリーにアップロードできます。

コンテナーディスクのサイズは、コンテナーディスクがホストされているレジストリーの最大レイヤーサイズによって制限されます。

注記

Red Hat Quay の場合、Red Hat Quay の初回デプロイ時に作成される YAML 設定ファイルを編集して、最大レイヤーサイズを変更できます。

前提条件

  • podman がインストールされている必要があります。
  • QCOW2 または RAW イメージファイルが必要です。

手順

  1. Dockerfile を作成して、仮想マシンイメージをコンテナーイメージにビルドします。仮想マシンイメージは、UID 107 を持つ QEMU によって所有され、コンテナー内の /disk/ ディレクトリーに配置される必要があります。次に、/disk/ ディレクトリーのパーミッションは 0440 に設定する必要があります。

    以下の例では、Red Hat Universal Base Image (UBI) を使用して最初の段階でこれらの設定変更を処理し、2 番目の段階で最小の scratch イメージを使用して結果を保存します。

    Copy to Clipboard Toggle word wrap
    $ 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 に置き換えます。
  2. コンテナーをビルドし、これにタグ付けします。

    Copy to Clipboard Toggle word wrap
    $ podman build -t <registry>/<container_disk_name>:latest .
  3. コンテナーイメージをレジストリーにプッシュします。

    Copy to Clipboard Toggle word wrap
    $ podman push <registry>/<container_disk_name>:latest

8.3.2.2. コンテナーレジストリーの TLS を無効にする

HyperConverged カスタムリソースの insecureRegistries フィールドを編集して、1 つ以上のコンテナーレジストリーの TLS(トランスポート層セキュリティー) を無効にできます。

前提条件

  • OpenShift CLI (oc) がインストールされている。

手順

  1. 以下のコマンドを実行して、デフォルトのエディターで HyperConverged CR を開きます。

    Copy to Clipboard Toggle word wrap
    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
  2. セキュアでないレジストリーのリストを spec.storageImport.insecureRegistries フィールドに追加します。

    HyperConverged カスタムリソースの例

    Copy to Clipboard Toggle word wrap
    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 コンソールを使用してコンテナーレジストリーからコンテナーディスクをインポートすることで、仮想マシンを作成できます。

手順

  1. Web コンソールで Virtualization Catalog に移動します。
  2. 使用可能なブートソースのないテンプレートタイルをクリックします。
  3. Customize VirtualMachine をクリックします。
  4. Customize template parameters ページで、Storage を展開し、Disk source リストから Registry (creates PVC) を選択します。
  5. コンテナーイメージの URL を入力します。例: https://mirror.arizona.edu/fedora/linux/releases/38/Cloud/x86_64/images/Fedora-Cloud-Base-38-1.6.x86_64.qcow2
  6. ディスクサイズを設定します。
  7. Next をクリックします。
  8. Create VirtualMachine をクリックします。

8.3.2.4. CLI を使用してコンテナーディスクから仮想マシンを作成する

コマンドラインを使用して、コンテナーディスクから仮想マシンを作成できます。

前提条件

  • コンテナーディスクを含むコンテナーレジストリーへのアクセス認証情報が必要です。
  • virtctl クライアントをインストールしている。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. 仮想マシンの VirtualMachine マニフェストを作成し、YAML ファイルとして保存します。たとえば、コンテナーディスクから最小限の Red Hat Enterprise Linux (RHEL) 仮想マシンを作成するには、次のコマンドを実行します。

    Copy to Clipboard Toggle word wrap
    $ 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
  2. 仮想マシンの VirtualMachine マニフェストを確認します。

    Copy to Clipboard Toggle word wrap
    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: vm-rhel-9 
    1
    
    spec:
      instancetype:
        name: u1.small 
    2
    
      preference:
        name: rhel.9 
    3
    
      runStrategy: Always
      template:
        metadata:
          creationTimestamp: null
        spec:
          domain:
            devices: {}
            resources: {}
          terminationGracePeriodSeconds: 180
          volumes:
          - containerDisk:
              image: registry.redhat.io/rhel9/rhel-guest-image:9.5 
    4
    
            name: vm-rhel-9-containerdisk-0
    1
    仮想マシン名。
    2
    仮想マシンのリソースサイズを制御するために使用するインスタンスタイプ。
    3
    使用する設定。
    4
    コンテナーディスクの URL。
  3. 次のコマンドを実行して VM を作成します。

    Copy to Clipboard Toggle word wrap
    $ oc create -f <vm_manifest_file>.yaml

検証

  1. 仮想マシンのステータスを監視します。

    Copy to Clipboard Toggle word wrap
    $ oc get vm <vm_name>

    プロビジョニングが成功すると、仮想マシンのステータスが Running になります。

    出力例

    Copy to Clipboard Toggle word wrap
    NAME        AGE   STATUS    READY
    vm-rhel-9   18s   Running   True

  2. プロビジョニングが完了し、シリアルコンソールにアクセスして仮想マシンが起動したことを確認します。

    Copy to Clipboard Toggle word wrap
    $ virtctl console <vm_name>

    仮想マシンが実行中でシリアルコンソールにアクセスできる場合、出力は次のようになります。

    出力例

    Copy to Clipboard Toggle word wrap
    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) クローンメソッドのいずれかを選択します。

  • CSI ボリュームのクローン作成
  • スマートクローン作成

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 ターゲットアノテーションの例

Copy to Clipboard Toggle word wrap
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

イベント例

Copy to Clipboard Toggle word wrap
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 にアクセスできる。

手順

  1. Web コンソールで Virtualization Catalog に移動します。
  2. 使用可能なブートソースのないテンプレートタイルをクリックします。
  3. Customize VirtualMachine をクリックします。
  4. テンプレートパラメーターのカスタマイズ ページで、Storage を展開し、Disk source リストから PVC (clone PVC) を選択します。
  5. PVC プロジェクトと PVC 名を選択します。
  6. ディスクサイズを設定します。
  7. Next をクリックします。
  8. 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) を作成します。

Copy to Clipboard Toggle word wrap
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-source
  1. VolumeSnapshotDataVolume clone のソースとして参照するための spec.source.snapshot スタンザを追加します。
Copy to Clipboard Toggle word wrap
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 オブジェクトの例

      Copy to Clipboard Toggle word wrap
      kind: VolumeSnapshotClass
      apiVersion: snapshot.storage.k8s.io/v1
      driver: openshift-storage.rbd.csi.ceph.com
      # ...

      StorageClass オブジェクトの例

      Copy to Clipboard Toggle word wrap
      kind: StorageClass
      apiVersion: storage.k8s.io/v1
      # ...
      provisioner: openshift-storage.rbd.csi.ceph.com

手順

  1. 次の例に示すように、DataVolume マニフェストを作成します。

    Copy to Clipboard Toggle word wrap
    apiVersion: cdi.kubevirt.io/v1beta1
    kind: DataVolume
    metadata:
      name: <datavolume> 
    1
    
    spec:
      source:
        pvc:
          namespace: "<source_namespace>" 
    2
    
          name: "<my_vm_disk>" 
    3
    
      storage: {}
    1
    新しいデータボリュームの名前を指定します。
    2
    ソース PVC の namespace を指定します。
    3
    ソース PVC の名前を指定します。
  2. 以下のコマンドを実行してデータボリュームを作成します。

    Copy to Clipboard Toggle word wrap
    $ oc create -f <datavolume>.yaml
    注記

    データ量により、PVC が準備される前に仮想マシンが起動できなくなります。PVC のクローン作成中に、新しいデータボリュームを参照する仮想マシンを作成できます。

8.3.3.3.3. データボリュームテンプレートを使用したクローン PVC からの仮想マシンの作成

データボリュームテンプレートを使用して、既存の仮想マシンの永続ボリューム要求 (PVC) のクローンを作成する仮想マシンを作成できます。この方法では、ライフサイクルが元の仮想マシンから独立したデータボリュームが作成されます。

前提条件

  • ソース PVC を含む仮想マシンの電源をオフにする必要があります。
  • virtctl クライアントをインストールしている。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. 仮想マシンの VirtualMachine マニフェストを作成し、YAML ファイルとして保存します。次に例を示します。

    Copy to Clipboard Toggle word wrap
    $ virtctl create vm --name rhel-9-clone --volume-import type:pvc,src:my-project/imported-volume-q5pr9
  2. 仮想マシンの VirtualMachine マニフェストを確認します。

    Copy to Clipboard Toggle word wrap
    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: rhel-9-clone 
    1
    
    spec:
      dataVolumeTemplates:
      - metadata:
          name: imported-volume-h4qn8
        spec:
          source:
            pvc:
              name: imported-volume-q5pr9 
    2
    
              namespace: my-project 
    3
    
          storage:
            resources: {}
      instancetype:
        inferFromVolume: imported-volume-h4qn8 
    4
    
        inferFromVolumeFailurePolicy: Ignore
      preference:
        inferFromVolume: imported-volume-h4qn8 
    5
    
        inferFromVolumeFailurePolicy: Ignore
      runStrategy: Always
      template:
        spec:
          domain:
            devices: {}
            memory:
              guest: 512Mi
            resources: {}
          terminationGracePeriodSeconds: 180
          volumes:
          - dataVolume:
              name: imported-volume-h4qn8
            name: imported-volume-h4qn8
    1
    仮想マシン名。
    2
    ソース PVC の名前。
    3
    ソース PVC の namespace。
    4
    PVC ソースに適切なラベルがある場合、選択した DataSource オブジェクトからインスタンスタイプが推測されます。
    5
    PVC ソースに適切なラベルがある場合、選択した DataSource オブジェクトから設定が推測されます。
  3. PVC のクローンが作成されたデータボリュームで仮想マシンを作成します。

    Copy to Clipboard Toggle word wrap
    $ oc create -f <vm_manifest_file>.yaml
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat, Inc.