機械翻訳について

3 KubeVirtの使用

この章では、KubeVirtモジュールを使用して、Oracle Cloud Native Environmentで仮想マシンを作成する方法について説明します。

仮想マシン・イメージの作成

KubeVirtは、コンテナ・レジストリからコンテナ化されたイメージをプルして、仮想マシン・インスタンスを作成します。 これらのイメージは、KubeVirtとともに使用する前に準備する必要があります。 この項では、KubeVirt仮想マシンを作成するために使用できるOracle Linuxのコンテナ・イメージを作成する方法の例を示します。

この例では、次からQCOW形式のOracle Linuxクラウド・イメージを使用します:

https://yum.oracle.com/oracle-linux-templates.html

たとえば、ローカル・コンテナ・レジストリに接続できる任意のホストで、Oracle Linux 9 QCOWイメージをダウンロードします:

wget https://yum.oracle.com/templates/OracleLinux/OL9/u2/x86_64/OL9U2_x86_64-kvm-b197.qcow

Dockerfileを作成して、イメージをローカル・コンテナ・レジストリにロードできるようにします。 たとえば、QCOWイメージが存在するディレクトリと同じディレクトリに、次を含むDockerfileというファイルを作成します:

FROM scratch
ADD --chown=107:107 OL9U2_x86_64-kvm-b197.qcow  /disk/

QCOWイメージからコンテナ化されたイメージを構築します。 たとえば:

podman build . -t myregistry.example.com/kubevirt/oraclelinux:ol9.2 

次のような出力が表示されます:

STEP 1: FROM scratch
STEP 2: ADD --chown=107:107 OL9U2_x86_64-kvm-b197.qcow  /disk/
STEP 3: COMMIT myregistry.example.com/kubevirt/oraclelinux:ol9.2
--> 09b0b23bb66
Successfully tagged myregistry.example.com/kubevirt/oraclelinux:ol9.2
09b0b23bb6673bdfd1481d81dace0b6008c6ab25e1d156c525b9abaaf8d9f30e

コンテナ化されたイメージはローカルに格納されます。 コンテナ・レジストリにアップロードする必要があります。 必要に応じて、コンテナ・レジストリにログインします:

podman login myregistry.example.com

コンテナ化されたイメージをローカル・レジストリにプッシュします。 たとえば:

podman push myregistry.example.com/kubevirt/oraclelinux:ol9.2

次のような出力が表示されます:

Getting image source signatures
Copying blob 8a8b1918f588 done  
Copying config 09b0b23bb6 done  
Writing manifest to image destination
Storing signatures

これで、KubeVirt仮想マシン・インスタンスの作成に使用できるOracle Linuxのコンテナ化されたイメージが作成されました。 この例のコンテナ・イメージのロケーションは次のとおりです:

myregistry.example.com/kubevirt/oraclelinux:ol9.2

KubeVirtインスタンスの作成

この項では、KubeVirtを使用して仮想マシンを作成できることを確認するための基本的なテストについて説明します。

この例では、「仮想マシン・イメージの作成」で作成されたOracle Linux 9コンテナ・イメージを使用します。

KubeVirtを使用して仮想マシンを作成するには:

  1. 仮想マシンのVirtualMachineファイルを作成します。 containerDiskオプションは、仮想マシンを作成するためにコンテナ・イメージのロケーションを設定するロケーションです。 これは、ローカル・コンテナ・レジストリまたはDockerHubなどのパブリック・コンテナ・レジストリ内のコンテナ・イメージのロケーションである必要があります。 ファイルをvm.yamlとして保存します。

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: ol9-no-pvc
    spec:
      running: true
      template:
        spec:
          networks:
          - name: foo
            pod: {}
          domain:
            resources:
              requests:
                memory: 1024M
            firmware:
              bootloader:
                efi:
                  secureBoot: false
            features:
              smm:
                enabled: true
            devices:
              interfaces:
              - name: foo
                masquerade: {}
                ports:
                - port: 80
              disks:
              - name: containerdisk
                disk:
                  bus: virtio
          volumes:
          - name: containerdisk
            containerDisk:
              image: myregistry.example.com/kubevirt/oraclelinux:ol9.2
  2. VirtualMachineを作成します:

    kubectl apply -f vm.yaml 
    virtualmachine.kubevirt.io/ol9-no-pvc created
  3. VirtualMachineは、kubectl get vmコマンドを使用して作成されます:

    kubectl get vm
    NAME                           AGE     STATUS    READY
    ol9-no-pvc                     28s     Running   True

    kubectl get vmiコマンドを使用して、VirtualMachineInstanceに関する情報を確認できます:

    kubectl get vmi
    NAME                    AGE   PHASE     IP              NODENAME              READY
    ol9-no-pvc              48s   Running   10.244.3.19     worker1.example.com   True

    kubectl describe vmiコマンドを使用して、VirtualMachineInstanceに関する詳細情報を取得できます:

    kubectl describe vmi ol9-no-pvc
    Name:         ol9-no-pvc
    Namespace:    default
    Labels:       kubevirt.io/nodeName=worker1.example.com
    Annotations:  kubevirt.io/latest-observed-api-version: v1
                  kubevirt.io/storage-observed-api-version: v1alpha3
    API Version:  kubevirt.io/v1
    Kind:         VirtualMachineInstance
    ...
      Volumes:
        Container Disk:
          Image:              myregistry.example.com/kubevirt/oraclelinux:ol9.2
          Image Pull Policy:  IfNotPresent
        Name:                 containerdisk
    ...
      Virtual Machine Revision Name:  revision-start-vm-032efda3-040f-4dc0-941d-382daa5f926b-1
      Volume Status:
        Name:    containerdisk
        Target:  sda
    Events:
      Type    Reason            Age   From                       Message
      ----    ------            ----  ----                       -------
      Normal  SuccessfulCreate  94s   virtualmachine-controller  Created virtual machine pod virt-launcher-ol9-no-pvc-sz6hb
      Normal  Created           89s   virt-handler               VirtualMachineInstance defined.
      Normal  Started           89s   virt-handler               VirtualMachineInstance started.

    次を使用して、VirtualMachineInstanceにマップする実行中のポッドを確認できます:

    kubectl get pod
    NAME                             READY   STATUS    RESTARTS   AGE
    virt-launcher-ol9-no-pvc-....    2/2     Running   0          1h
  4. VirtualMachineは、次を使用して削除できます:

    kubectl delete vm ol9-no-pvc
    virtualmachine.kubevirt.io "ol9-no-pvc" deleted

永続ストレージを使用したKubeVirtインスタンスの作成

この項では、KubeVirtを使用して永続ストレージを使用して仮想マシンを作成できることを確認するための基本的なテストについて説明します。 このタイプの仮想マシンはライブ移行が可能で、状態は維持されます。

この例では、「仮想マシン・イメージの作成」で作成されたOracle Linux 9コンテナ・イメージを使用します。

この例では、rook-cephfsという名前のStorageClassを介して使用可能なCephFilesystemも使用します。 CephFilesystemはReadWriteManyファイル・システムであり、仮想マシン・ファイルシステムに書き込むことで、状態を維持し、再起動およびライブ移行で永続化できるようにするのに役立ちます。 Rookモジュールを使用したCephFilesystemの設定に関する情報は、「Rookモジュール」を参照してください。

KubeVirtを使用して永続ストレージを使用する仮想マシンを作成するには:

  1. StorageClassのKubernetes PersistentVolumeClaimファイルを作成します。 この例では、rook-cephfsという名前のCephFilesystem StorageClassです。 コントロール・プレーン・ノードで、pvc-vm.yamlという名前のファイルを作成します。 ファイルに次の内容をコピーします。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ol9-migratable
    spec:
      storageClassName: rook-cephfs
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 30Gi
  2. Kubernetes PersistentVolumeClaimを作成します。

    kubectl apply -f pvc-vm.yaml
    persistentvolumeclaim/ol9-migratable created
  3. 仮想マシンのVirtualMachineファイルを作成します。 この例では、PersistentVolumeClaimを使用して、仮想マシンへの書込みを有効にし、状態を維持します。 containerDiskオプションは、仮想マシンを作成するためにコンテナ・イメージのロケーションを設定するロケーションです。 これは、ローカル・コンテナ・レジストリまたはDockerHubなどのパブリック・コンテナ・レジストリ内のコンテナ・イメージのロケーションである必要があります。 ファイルをvm.yamlとして保存します。

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: ol9
    spec:
      running: true
      template:
        spec:
          evictionStrategy: LiveMigrate
          terminationGracePeriodSeconds: 30
          networks:
          - name: foo
            pod: {}
          domain:
            resources:
              requests:
                memory: 1024M
            firmware:
              bootloader:
                efi:
                  secureBoot: false
            features:
              smm:
                enabled: true
            devices:
              interfaces:
              - name: foo
                masquerade: {}
                ports:
                - port: 80
              disks:
              - name: containerdisk
                disk:
                  bus: virtio
              - name: installdisk
                disk:
                  bus: virtio
          volumes:
          - name: containerdisk
            containerDisk:
              image: myregistry.example.com/kubevirt/oraclelinux:ol9.2
          - name: installdisk
            persistentVolumeClaim:
              claimName: ol9-migratable
  4. VirtualMachineを作成します:

    kubectl apply -f vm.yaml 
    virtualmachine.kubevirt.io/ol9 created
  5. VirtualMachineは、kubectl get vmコマンドを使用して作成されます:

    kubectl get vm
    NAME                    AGE     STATUS    READY
    ol9                     41m     Running   True

    kubectl get vmiコマンドを使用して、VirtualMachineInstanceに関する情報を確認できます:

    kubectl get vmi
    NAME                    AGE     PHASE     IP            NODENAME              READY
    ol9                     42m     Running   10.244.3.29   worker1.example.com   True

    kubectl describe vmiコマンドを使用して、VirtualMachineInstanceに関する詳細情報を取得できます:

    kubectl describe vmi ol9
    Name:         ol9
    Namespace:    default
    Labels:       kubevirt.io/nodeName=worker1.example.com
    Annotations:  kubevirt.io/latest-observed-api-version: v1
                  kubevirt.io/storage-observed-api-version: v1alpha3
    API Version:  kubevirt.io/v1
    Kind:         VirtualMachineInstance
    ...
      Volumes:
        Container Disk:
          Image:              myregistry.example.com/kubevirt/oraclelinux:ol9.2
          Image Pull Policy:  IfNotPresent
        Name:                 containerdisk
        Name:                 installdisk
        Persistent Volume Claim:
          Claim Name:  ol9-migratable
    ...
      Virtual Machine Revision Name:  revision-start-vm-05252d81-e403-4e7b-9834-b9e03850ac7c-1
      Volume Status:
        Name:    containerdisk
        Target:  sda
        Name:    installdisk
        Persistent Volume Claim Info:
          Access Modes:
            ReadWriteMany
          Capacity:
            Storage:            30Gi
          Filesystem Overhead:  0.055
          Requests:
            Storage:    30Gi
          Volume Mode:  Filesystem
        Target:         vda
    Events:
      Type    Reason            Age   From                         Message
      ----    ------            ----  ----                         -------
      Normal  SuccessfulCreate  42m   disruptionbudget-controller  Created PodDisruptionBudget kubevirt-disruption-budget-rgh5f
      Normal  SuccessfulCreate  42m   virtualmachine-controller    Created virtual machine pod virt-launcher-ol9-6qvsh
      Normal  Created           42m   virt-handler                 VirtualMachineInstance defined.
      Normal  Started           42m   virt-handler                 VirtualMachineInstance started.

    次を使用して、VirtualMachineInstanceにマップする実行中のポッドを確認できます:

    kubectl get pod
    NAME                      READY   STATUS    RESTARTS   AGE
    virt-launcher-ol9-....    2/2     Running   0          1h
  6. VirtualMachineは、次を使用して削除できます:

    kubectl delete vm ol9
    virtualmachine.kubevirt.io "ol9" deleted