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を使用して仮想マシンを作成するには:
-
仮想マシンの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: {} 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
-
VirtualMachineを作成します:
kubectl apply -f vm.yaml virtualmachine.kubevirt.io/ol9-no-pvc created
-
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
-
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を使用して永続ストレージを使用する仮想マシンを作成するには:
-
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
-
Kubernetes PersistentVolumeClaimを作成します。
kubectl apply -f pvc-vm.yaml persistentvolumeclaim/ol9-migratable created
-
仮想マシンの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: {} 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
-
VirtualMachineを作成します:
kubectl apply -f vm.yaml virtualmachine.kubevirt.io/ol9 created
-
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
-
VirtualMachineは、次を使用して削除できます:
kubectl delete vm ol9 virtualmachine.kubevirt.io "ol9" deleted