第7章 仮想マシン

7.1. 仮想マシンの作成

以下のいずれかの手順を使用して、仮想マシンを作成します。

警告

openshift-* namespace に仮想マシンを作成しないでください。代わりに、openshift 接頭辞なしの新規 namespace を作成するか、または既存 namespace を使用します。

7.1.1. 仮想マシンウィザードの実行による仮想マシンの作成

Web コンソールは、GeneralNetworkingStorageAdvanced、および Review ステップに移動し、仮想マシンの作成プロセスを単純化するインタラクティブなウィザードを特長としています。すべての必須フィールドには * のマークが付けられます。必要なフィールドが完了したら、仮想マシンを確認し、これを作成することができます。

Network Interface Controller (NIC) およびストレージディスクを作成し、それらの作成後に仮想マシンに割り当てることができます。

起動可能なディスク

URL または Container のいずれかが General ステップで Source として選択される場合、rootdisk ディスクが作成され、Bootable Disk として仮想マシンに割り当てられます。rootdisk を変更できますが、これを削除することはできません。

Bootable Disk は、仮想マシンにディスクが割り当てられていない場合、PXE ソースからプロビジョニングされる仮想マシンには不要です。1 つ以上のディスクが仮想マシンに割り当てられている場合、Bootable Disk を 1 つを選択する必要があります。

前提条件

  • ウィザードを使用して仮想マシンを作成する場合、仮想マシンのストレージメディアは Read-Write-Many(RWX)PVC をサポートする必要があります。

手順

  1. サイドメニューから WorkloadsVirtualization をクリックします。
  2. Virtual Machines タブをクリックします。
  3. Create Virtual Machine をクリックし、New with Wizard を選択します。
  4. General ステップで必要なすべてのフィールドに入力します。Template を選択すると、これらのフィールドへの入力が自動的に行われます。
  5. Next をクリックして Networking ステップに進みます。デフォルトで nic0 NIC が割り当てられます。

    1. オプション: Add Network Interface をクリックし、追加の NIC を作成します。
    2. オプション: すべての NIC の削除は、Options メニュー kebab をクリックし、Delete を選択して実行できます。仮想マシンの作成において、NIC が割り当てられている必要はありません。NIC は仮想マシンの作成後に作成することができます。
  6. Next をクリックして Storage 画面に進みます。

    1. オプション: Add Disk をクリックして追加のディスクを作成します。これらのディスクの削除は、Options メニュー kebab をクリックし、Delete を選択して実行できます。
    2. オプション: Options メニュー kebab をクリックし、ディスクを編集して変更内容を保存します。
  7. Review and Create をクリックします。Results 画面には、仮想マシンの JSON 設定ファイルが表示されます。

仮想マシンは Virtual Machines タブに一覧表示されます。

Web コンソールウィザードを実行する際は、仮想マシンウィザードのフィールドを参照します。

7.1.1.1. 仮想マシンウィザードのフィールド

名前パラメーター説明

Template

 

仮想マシンの作成に使用するテンプレート。テンプレートを選択すると、他のフィールドが自動的に入力されます。

ソース

PXE

PXE メニューから仮想マシンをプロビジョニングします。クラスターに PXE 対応の NIC が必要になります。

URL

HTTP または S3 エンドポイントで利用できるイメージから仮想マシンをプロビジョニングします。

コンテナー

クラスターからアクセスできるレジストリーの起動可能なオペレーティングシステムコンテナーから仮想マシンをプロビジョニングします。例: kubevirt/cirros-registry-disk-demo

Disk

ディスクから仮想マシンをプロビジョニングします。

Operating System

 

仮想マシン用に選択される主なオペレーティングシステム。

Flavor

small、medium、large、tiny、Custom

仮想マシンに割り当てられる CPU およびメモリーの量を決定するプリセット。Flavor に設定される Preset はオペレーティングシステムによって決まります。

Memory

 

仮想マシンに割り当てられるメモリーのサイズ (GiB 単位)。

CPU

 

仮想マシンに割り当てられる CPU の量。

Workload Profile

High Performance

高パフォーマンスのワークロードに対して最適化された仮想マシン設定。

Server

サーバーワークロードの実行に最適化されたプロファイル。

Desktop

デスクトップで使用するための仮想マシン設定。

名前

 

この名前には、小文字 (a-z)、数字 (0-9)、およびハイフン (-) を含めることができ、最大 253 文字を使用できます。最初と最後の文字は英数字にする必要があります。この名前には、大文字、スペース、ピリオド (.)、または特殊文字を使用できません。

説明

 

オプションの説明フィールド。

Start virtual machine on creation

 

これを選択すると、作成時に仮想マシンが自動的に起動します。

7.1.1.2. Cloud-init フィールド

名前説明

Hostname

仮想マシンの特定のホスト名を設定します。

Authenticated SSH Keys

仮想マシンの ~/.ssh/authorized_keys にコピーされるユーザーの公開鍵。

カスタムスクリプト

他のオプションを、カスタム cloud-init スクリプトを貼り付けるフィールドに置き換えます。

7.1.1.3. CD-ROM フィールド

ソース説明

Container

コンテナーのパスを指定します。例: kubevirt/fedora-registry-disk: latest

URL

URL パスおよびサイズ (GiB 単位) を指定します。次に、ドロップダウンリストからこの URL のストレージクラスを選択します。

Attach Disk

割り当てる仮想マシンディスクを選択します。

7.1.1.4. ネットワークフィールド

名前説明

名前

ネットワークインターフェイスコントローラーの名前。

モデル

ネットワークインターフェイスコントローラーのモデルを示します。サポートされる値は e1000e および virtio です。

ネットワーク

利用可能なネットワーク接続定義の一覧。

Type

利用可能なバインディングメソッドの一覧。デフォルトの Pod ネットワークについては、masquerade が唯一の推奨されるバインディングメソッドになります。セカンダリーネットワークの場合は、 bridge バインディングメソッドを使用します。masquerade メソッドは、デフォルト以外のネットワークではサポートされません。

MAC Address

ネットワークインターフェイスコントローラーの MAC アドレス。MAC アドレスが指定されていない場合、これは自動的に割り当てられます。

7.1.1.5. ストレージフィールド

名前説明

ソース

仮想マシンの空のディスクを選択するか、または URLContainerAttach Cloned Disk、または Attach Disk などの選択可能なオプションから選択します。既存ディスクを選択し、これを仮想マシンに割り当てるには、利用可能な Persistent Volume Claim (永続ボリューム要求、PVC) の一覧から Attach Cloned Disk または Attach Disk を選択します。

名前

ディスクの名前。この名前には、小文字 (a-z)、数字 (0-9)、ハイフン (-) およびピリオド (.) を含めることができ、最大 253 文字を使用できます。最初と最後の文字は英数字にする必要があります。この名前には、大文字、スペース、または特殊文字を使用できません。

Size (GiB)

ディスクのサイズ (GiB)。

Interface

ディスクデバイスのタイプ。サポートされるインターフェイスは、virtIOSATA、および SCSI です。

Storage Class

ディスクの作成に使用されるストレージクラス。

Advanced → Volume Mode

永続ボリュームがフォーマットされたファイルシステムまたは raw ブロック状態を使用するかどうかを定義します。デフォルトは Filesystem です。

Advanced → Access Mode

永続ボリュームのアクセスモード。サポートされるアクセスモードは ReadWriteOnceReadOnlyMany、および ReadWriteMany です。

ストレージの詳細設定

以下のストレージの詳細設定は、BlankImport via URLURL、および Clone existing PVC ディスクで利用できます。これらのパラメーターはオプションです。これらのパラメーターを指定しない場合、システムは kubevirt-storage-class-defaults 設定マップのデフォルト値を使用します。

名前パラメーター説明

ボリュームモード

Filesystem

ファイルシステムベースのボリュームで仮想ディスクを保存します。

Block

ブロックボリュームで仮想ディスクを直接保存します。基礎となるストレージがサポートしている場合は、 Block を使用します。

アクセスモード

Single User (RWO)

ディスクは単一ノードで読み取り/書き込みとしてマウントできます。

Shared Access (RWX)

ディスクは数多くのノードで読み取り/書き込みとしてマウントできます。

注記

これは、ノード間の仮想マシンのライブマイグレーションなどの、一部の機能で必要になります。

Read Only (ROX)

ディスクは数多くのノードで読み取り専用としてマウントできます。

kubevirt-storage-class-defaults 設定マップについての詳細は、データボリュームのストレージのデフォルト について参照してください。

7.1.1.6. 仮想マシンウィザードの作成用の事前に設定された YAML ファイルの貼り付け

YAML 設定ファイルを作成し、解析して仮想マシンを作成します。YAML 編集画面を開くと、常に有効な example 仮想マシン設定がデフォルトで提供されます。

Create をクリックする際に YAML 設定が無効な場合、エラーメッセージでエラーが発生したパラメーターが示唆されます。エラーは一度に 1 つのみ表示されます。

注記

編集中に YAML 画面から離れると、設定に対して加えた変更が取り消されます。

手順

  1. サイドメニューから WorkloadsVirtualization をクリックします。
  2. Virtual Machines タブをクリックします。
  3. Create Virtual Machine をクリックし、New from YAML を選択します。
  4. 編集可能なウィンドウで仮想マシンの設定を作成するか、またはこれを貼り付けます。

    1. または、YAML 画面にデフォルトで提供される example 仮想マシンを使用します。
  5. オプション: Download をクリックして YAML 設定ファイルをその現在の状態でダウンロードします。
  6. Create をクリックして仮想マシンを作成します。

仮想マシンは Virtual Machines タブに一覧表示されます。

7.1.2. CLI の使用による仮想マシンの作成

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

手順

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

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

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        app: <vm_name> 1
      name: <vm_name>
    spec:
      dataVolumeTemplates:
      - apiVersion: cdi.kubevirt.io/v1beta1
        kind: DataVolume
        metadata:
          name: <vm_name>
        spec:
          sourceRef:
            kind: DataSource
            name: rhel9
            namespace: openshift-virtualization-os-images
          storage:
            resources:
              requests:
                storage: 30Gi
      running: false
      template:
        metadata:
          labels:
            kubevirt.io/domain: <vm_name>
        spec:
          domain:
            cpu:
              cores: 1
              sockets: 2
              threads: 1
            devices:
              disks:
              - disk:
                  bus: virtio
                name: rootdisk
              - disk:
                  bus: virtio
                name: cloudinitdisk
              interfaces:
              - masquerade: {}
                name: default
              rng: {}
            features:
              smm:
                enabled: true
            firmware:
              bootloader:
                efi: {}
            resources:
              requests:
                memory: 8Gi
          evictionStrategy: LiveMigrate
          networks:
          - name: default
            pod: {}
          volumes:
          - dataVolume:
              name: <vm_name>
            name: rootdisk
          - cloudInitNoCloud:
              userData: |-
                #cloud-config
                user: cloud-user
                password: '<password>' 2
                chpasswd: { expire: False }
            name: cloudinitdisk
    1
    仮想マシンの名前を指定します。
    2
    cloud-user のパスワードを指定します。
  2. マニフェストファイルを使用して仮想マシンを作成します。

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

    $ virtctl start <vm_name>

7.1.3. 仮想マシンのストレージボリュームタイプ

ストレージボリュームタイプ説明

ephemeral

ネットワークボリュームを読み取り専用のバッキングストアとして使用するローカルの copy-on-write (COW) イメージ。バッキングボリュームは PersistentVolumeClaim である必要があります。一時イメージは仮想マシンの起動時に作成され、すべての書き込みをローカルに保存します。一時イメージは、仮想マシンの停止、再起動または削除時に破棄されます。バッキングボリューム (PVC) はいずれの方法でも変更されません。

persistentVolumeClaim

利用可能な PV を仮想マシンに割り当てます。PV の割り当てにより、仮想マシンデータのセッション間での永続化が可能になります。

CDI を使用して既存の仮想マシンディスクを PVC にインポートし、PVC を仮想マシンインスタンスに割り当てる方法は、既存の仮想マシンを OpenShift Container Platform にインポートするための推奨される方法です。ディスクを PVC 内で使用できるようにするためのいくつかの要件があります。

dataVolume

データボリュームは、インポート、クローンまたはアップロード操作で仮想マシンディスクの準備プロセスを管理することによって persistentVolumeClaim ディスクタイプにビルドされます。このボリュームタイプを使用する仮想マシンは、ボリュームが準備できるまで起動しないことが保証されます。

type: dataVolume または type: "" を指定します。persistentVolumeClaim などの type に他の値を指定すると、警告が表示され、仮想マシンは起動しません。

cloudInitNoCloud

参照される cloud-init NoCloud データソースが含まれるディスクを割り当て、ユーザーデータおよびメタデータを仮想マシンに提供します。cloud-init インストールは仮想マシンディスク内で必要になります。

containerDisk

コンテナーイメージレジストリーに保存される、仮想マシンディスクなどのイメージを参照します。イメージはレジストリーからプルされ、仮想マシンの起動時にディスクとして仮想マシンに割り当てられます。

containerDisk ボリュームは、単一の仮想マシンに制限されず、永続ストレージを必要としない多数の仮想マシンのクローンを作成するのに役立ちます。

RAW および QCOW2 形式のみがコンテナーイメージレジストリーのサポートされるディスクタイプです。QCOW2 は、縮小されたイメージサイズの場合に推奨されます。

注記

containerDisk ボリュームは一時的なボリュームです。これは、仮想マシンが停止されるか、再起動するか、または削除される際に破棄されます。containerDisk ボリュームは、CD-ROM などの読み取り専用ファイルシステムや破棄可能な仮想マシンに役立ちます。

emptyDisk

仮想マシンインターフェイスのライフサイクルに関連付けられるスパースの QCOW2 ディスクを追加で作成します。データは仮想マシンのゲストによって実行される再起動後も存続しますが、仮想マシンが Web コンソールから停止または再起動する場合には破棄されます。空のディスクは、アプリケーションの依存関係および一時ディスクの一時ファイルシステムの制限を上回るデータを保存するために使用されます。

ディスク 容量 サイズも指定する必要があります。

7.1.4. 仮想マシンの RunStrategy について

仮想マシンの RunStrategy は、一連の条件に応じて仮想マシンインスタンス (VMI) の動作を判別します。spec.runStrategy 設定は、spec.running 設定の代わりに仮想マシン設定プロセスに存在します。spec.runStrategy 設定を使用すると、true または false の応答のみを伴う spec.running 設定とは対照的に、VMI の作成および管理をより柔軟に行えます。ただし、2 つの設定は相互排他的です。spec.running または spec.runStrategy のいずれかを使用できます。両方を使用する場合は、エラーが発生します。

4 つ RunStrategy が定義されています。

Always
VMI は仮想マシンの作成時に常に表示されます。元の VMI が何らかの理由で停止する場合に、新規の VMI が作成されます。これは spec.running: true と同じ動作です。
RerunOnFailure
前のインスタンスがエラーが原因で失敗する場合は、VMI が再作成されます。インスタンスは、仮想マシンが正常に停止する場合 (シャットダウン時など) には再作成されません。
Manual (手動)
startstop、および restart virtctl クライアントコマンドは、 VMI の状態および存在を制御するために使用できます。
Halted
仮想マシンが作成される際に VMI は存在しません。これは spec.running: false と同じ動作です。

startstop、および restart の virtctl コマンドの各種の組み合わせは、どの RunStrategy が使用されるかに影響を与えます。

以下の表は、仮想マシンの各種の状態からの移行について示しています。最初の列には、仮想マシンの初期の RunStrategy が表示されます。それぞれの追加の列には、virtctl コマンドと、このコマンド実行後の新規 RunStrategy が表示されます。

初期 RunStrategystartstoprestart

Always

-

Halted

Always

RerunOnFailure

-

Halted

RerunOnFailure

Manual

Manual

Manual

Manual

Halted

Always

-

-

注記

インストーラーでプロビジョニングされるインフラストラクチャーを使用してインストールされた OpenShift Virtualization クラスターでは、ノードで MachineHealthCheck に失敗し、クラスターで利用できなくなると、RunStrategy が Always または RerunOnFailure の仮想マシンが新規ノードで再スケジュールされます。

apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachine
spec:
  RunStrategy: Always 1
  template:
...
1
VMI の現在の RunStrategy 設定。

7.1.5. 関連情報

  • KubeVirt v0.34.1 API リファレンスVirtualMachineSpec 定義は、仮想マシン仕様のパラメーターおよび階層のより範囲の広いコンテキストを提供します。

    注記

    KubeVirt API リファレンスはアップストリームのプロジェクトリファレンスであり、OpenShift Virtualization でサポートされていないパラメーターが含まれる場合があります。

  • コンテナーディスクを準備 してから、これを containerDisk ボリュームとして仮想マシンに追加します。
  • マシンヘルスチェックのデプロイおよび有効化についての詳細は、Deploying machine health checks を参照してください。
  • インストーラーでプロビジョニングされるインフラストラクチャーについての詳細は、Installer-provisioned infrastructure overview を参照してください。