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


8.3.1. コマンドラインからの仮想マシンの作成

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

注記

8.3.1.1. virtctl ツールを使用したマニフェストの作成

virtctl CLI ユーティリティーを使用すると、仮想マシン、仮想マシンインスタンスタイプ、および仮想マシン設定のマニフェストの作成を簡素化できます。詳細は、仮想マシンマニフェスト作成コマンド を参照してください。

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

VirtualMachine マニフェストから仮想マシンを作成できます。

手順

  1. 仮想マシンの VirtualMachine マニフェストを編集します。次の例では、Red Hat Enterprise Linux (RHEL) 仮想マシンを設定します。

    注記

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

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

     apiVersion: kubevirt.io/v1
     kind: VirtualMachine
     metadata:
      name: rhel-9-minimal
     spec:
      dataVolumeTemplates:
        - metadata:
            name: rhel-9-minimal-volume
          spec:
            sourceRef:
              kind: DataSource
              name: rhel9 1
              namespace: openshift-virtualization-os-images 2
            storage: {}
      instancetype:
        name: u1.medium 3
      preference:
        name: rhel.9 4
      running: true
      template:
        spec:
          domain:
            devices: {}
          volumes:
            - dataVolume:
                name: rhel-9-minimal-volume
              name: rootdisk

    1
    rhel9 ゴールデンイメージは、RHEL 9 をゲストオペレーティングシステムとしてインストールするために使用されます。
    2
    ゴールデンイメージは、openshift-virtualization-os-images namespace に保存されます。
    3
    u1.medium インスタンスタイプは、仮想マシンに 1 つの vCPU と 4Gi のメモリーを要求します。これらのリソース値は仮想マシン内で上書きできません。
    4
    rhel.9 設定は、RHEL 9 ゲストオペレーティングシステムをサポートする追加属性を指定します。
  2. マニフェストファイルを使用して仮想マシンを作成します。

    $ oc create -f <vm_manifest_file>.yaml
  3. オプション: 仮想マシンを起動します。

    $ virtctl start <vm_name> -n <namespace>

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 イメージを使用して結果を保存します。

    $ 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. コンテナーをビルドし、これにタグ付けします。

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

    $ podman push <registry>/<container_disk_name>:latest

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

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

前提条件

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

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
  2. セキュアでないレジストリーのリストを 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 コンソールを使用してコンテナーレジストリーからコンテナーディスクをインポートすることで、仮想マシンを作成できます。

前提条件

  • コンテナーディスクが含まれるコンテナーレジストリーにアクセスできる必要があります。

手順

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

8.3.2.4. コマンドラインを使用したコンテナーディスクからの仮想マシンの作成

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

仮想マシンが作成されると、コンテナーディスクを含むデータボリュームが永続ストレージにインポートされます。

前提条件

  • コンテナーディスクを含むコンテナーレジストリーへのアクセス認証情報が必要です。

手順

  1. VirtualMachine マニフェストを編集し、vm-rhel-datavolume.yaml ファイルとして保存します。

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      creationTimestamp: null
      name: vm-rhel-datavolume 1
      labels:
        kubevirt.io/vm: vm-rhel-datavolume
    spec:
      dataVolumeTemplates:
      - metadata:
          creationTimestamp: null
          name: rhel-dv 2
        spec:
          sourceRef:
            kind: DataSource
            name: rhel9
            namespace: openshift-virtualization-os-images
          storage:
            resources:
              requests:
                storage: 10Gi 3
      instancetype:
        name: u1.small 4
      preference:
        inferFromVolume: datavolumedisk1
      runStrategy: Always
      template:
        metadata:
          creationTimestamp: null
          labels:
            kubevirt.io/vm: vm-rhel-datavolume
        spec:
          domain:
            devices: {}
            resources: {}
          terminationGracePeriodSeconds: 180
          volumes:
          - dataVolume:
              name: rhel-dv
            name: datavolumedisk1
    status: {}
    1
    仮想マシンの名前を指定します。
    2
    データボリュームの名前を指定します。
    3
    データボリュームに要求されるストレージのサイズを指定します。
    4
    オプション: 仮想マシンのリソースサイズを制御するために使用するインスタンスタイプを指定します。
  2. 次のコマンドを実行して VM を作成します。

    $ oc create -f vm-rhel-datavolume.yaml

    oc create コマンドは、データボリュームと仮想マシンを作成します。CDI コントローラーは適切なアノテーションを使用して基礎となる PVC を作成し、インポートプロセスが開始されます。インポートが完了すると、データボリュームのステータスが Succeeded に変わります。仮想マシンを起動できます。

    データボリュームのプロビジョニングはバックグランドで実行されるため、これをプロセスをモニターする必要はありません。

検証

  1. インポーター Pod は、指定された URL からコンテナーディスクをダウンロードし、プロビジョニングされた永続ボリュームに保存します。以下のコマンドを実行してインポーター Pod のステータスを確認します。

    $ oc get pods
  2. 次のコマンドを実行して、ステータスが Succeeded になるまでデータボリュームを監視します。

    $ oc describe dv rhel-dv 1
    1
    VirtualMachine マニフェストで定義したデータボリューム名を指定します。
  3. プロビジョニングが完了し、シリアルコンソールにアクセスして仮想マシンが起動したことを確認します。

    $ virtctl console vm-rhel-datavolume

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

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 コンソールを使用してコンテナーレジストリーからコンテナーディスクをインポートすることで、仮想マシンを作成できます。OpenShift Container Platform Web コンソールを使用して永続ボリューム要求 (PVC) のクローンを作成することにより、仮想マシンを作成できます。

前提条件

  • コンテナーディスクが含まれるコンテナーレジストリーにアクセスできる必要があります。
  • ソース PVC を含む namespace にアクセスできる。

手順

  1. Web コンソールで Virtualization Catalog に移動します。
  2. 使用可能なブートソースのないテンプレートタイルをクリックします。
  3. Customize VirtualMachine をクリックします。
  4. テンプレートパラメーターのカスタマイズ ページで、Storage を展開し、Disk source リストから PVC (clone PVC) を選択します。
  5. イメージの URL を入力します。例: https://access.redhat.com/downloads/content/69/ver=/rhel---7/7.9/x86_64/product-software
  6. コンテナーイメージの URL を入力します。例: https://mirror.arizona.edu/fedora/linux/releases/38/Cloud/x86_64/images/Fedora-Cloud-Base-38-1.6.x86_64.qcow2
  7. PVC プロジェクトと PVC 名を選択します。
  8. ディスクサイズを設定します。
  9. Next をクリックします。
  10. Create VirtualMachine をクリックします。

8.3.3.3. コマンドラインを使用した PVC からの仮想マシンの作成

コマンドラインを使用して既存の仮想マシンの永続ボリューム要求 (PVC) のクローンを作成することで、仮想マシンを作成できます。

次のオプションのいずれかを使用して、PVC のクローンを作成できます。

  • PVC を新しいデータボリュームに複製します。

    この方法では、ライフサイクルが元の仮想マシンから独立したデータボリュームが作成されます。元の仮想マシンを削除しても、新しいデータボリュームやそれに関連付けられた PVC には影響しません。

  • dataVolumeTemplates スタンザを含む VirtualMachine マニフェストを作成して、PVC を複製します。

    この方法では、ライフサイクルが元の仮想マシンに依存するデータボリュームが作成されます。元の仮想マシンを削除すると、クローン作成されたデータボリュームとそれに関連付けられた PVC も削除されます。

8.3.3.3.1. データボリュームへの PVC のクローン作成

コマンドラインを使用して、既存の仮想マシンディスクの永続ボリューム要求 (PVC) のクローンをデータボリュームに作成できます。

元のソース PVC を参照するデータボリュームを作成します。新しいデータボリュームのライフサイクルは、元の仮想マシンから独立しています。元の仮想マシンを削除しても、新しいデータボリュームやそれに関連付けられた PVC には影響しません。

異なるボリュームモード間のクローン作成は、ソース PV とターゲット PV が kubevirt コンテンツタイプに属している限り、ブロック永続ボリューム (PV) からファイルシステム PV へのクローン作成など、ホスト支援型クローン作成でサポートされます。

注記

スマートクローン作成は、スナップショットを使用して PVC のクローンを作成するため、ホスト支援型クローン作成よりも高速かつ効率的です。スマートクローン作成は、Red Hat OpenShift Data Foundation など、スナップショットをサポートするストレージプロバイダーによってサポートされています。

異なるボリュームモード間のクローン作成は、スマートクローン作成ではサポートされていません。

前提条件

  • ソース 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

手順

  1. 次の例に示すように、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: {}
    1
    新しいデータボリュームの名前を指定します。
    2
    ソース PVC の namespace を指定します。
    3
    ソース PVC の名前を指定します。
  2. 以下のコマンドを実行してデータボリュームを作成します。

    $ oc create -f <datavolume>.yaml
    注記

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

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

データボリュームテンプレートを使用して、既存の仮想マシンの永続ボリューム要求 (PVC) のクローンを作成する仮想マシンを作成できます。

この方法では、ライフサイクルが元の仮想マシンに依存するデータボリュームが作成されます。元の仮想マシンを削除すると、クローン作成されたデータボリュームとそれに関連付けられた PVC も削除されます。

前提条件

  • ソース PVC を含む仮想マシンの電源をオフにする必要があります。

手順

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

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: vm-dv-clone
      name: vm-dv-clone 1
    spec:
      running: false
      template:
        metadata:
          labels:
            kubevirt.io/vm: vm-dv-clone
        spec:
          domain:
            devices:
              disks:
              - disk:
                  bus: virtio
                name: root-disk
            resources:
              requests:
                memory: 64M
          volumes:
          - dataVolume:
              name: favorite-clone
            name: root-disk
      dataVolumeTemplates:
      - metadata:
          name: favorite-clone
        spec:
          storage:
            accessModes:
            - ReadWriteOnce
            resources:
              requests:
                storage: 2Gi
          source:
            pvc:
              namespace: <source_namespace> 2
              name: "<source_pvc>" 3
    1
    仮想マシンの名前を指定します。
    2
    ソース PVC の namespace を指定します。
    3
    ソース PVC の名前を指定します。
  2. PVC のクローンが作成されたデータボリュームで仮想マシンを作成します。

    $ oc create -f <vm-clone-datavolumetemplate>.yaml
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.