0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

KubeVirtで色々な方法でVMを作る

Last updated at Posted at 2025-02-22

この記事の内容

KubeVirtでVMを作成する方法として、以下があると思います。

  • マシンイメージとcloud-initでVM作成
  • インストーラISOファイルでVM作成
  • 他のKVM環境で作ったVMの仮想ディスクからVM作成

1つ目の方法は、以下の記事の通り確認済みなので、本記事では、2つ目、3つ目の方法を試します。

環境

マシン一覧

image.png

  • 物理PCを2台使用。KVMの仮想化環境を作成。
  • KVMで3VM(AlmaLinux 9.5)作り、Masterノードx1、Workerノードx2にしてk8sクラスタを構成。
  • KubeVirtで1VM(RockyLinux 9.5)作成。これは、マシンイメージとcloud-initで作成。

k8sクラスタ環境(192.168.11.0/24の線の右側)

image.png

k8sクラスタに対し、以下をインストール済み。
-- MetalLB(ロードバランサ用)
-- kubernetes-dashboard(k8sクラスタの各リソース表示確認など)
-- NFS Subdir External Provisioner(NFSのStorageClass用。名前はnfs-client)
-- KubeVirt(VM作成用)

また、k8sクラスタ内のMasterノード、k8sクラスタ外のwindows11とAlmaLinux9.5(al9host)には、kubectlコマンドとkubectl virtコマンドをインストール済みであり、k8sクラスタの操作が可能。

1. インストーラISOファイルでVM作成

LinuxをインストーラISOファイルからVM作成するガイドはありません。以下の、Windows11をISOからVM作成するガイドがあるので、これを参考にして、やってみます。

(1) ISOファイルをPVにアップロード

ガイドのコマンドを適当に読み替えて実行しましたが、Waiting forで止まり、5分くらいでtime outを出して終わりました。

[root@al9host kvm_images]# kubectl virt image-upload pvc rocky-iso-9.5 --size 15Gi --image-path=/var/lib/libvirt/images/Rocky-9.5-x86_64-dvd.iso --insecure
PVC default/rocky-iso-9.5 not found
PersistentVolumeClaim default/rocky-iso-9.5 created
Waiting for PVC rocky-iso-9.5 upload pod to be ready...
timed out waiting for the condition
[root@al9host kvm_images]#

PVCは一覧に出ますが、Pendingです。

[root@master1 kubevirt]# kubectl get pvc,pv
NAME                                       STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
~
persistentvolumeclaim/rocky-iso-9.5        Pending                                                                                       <unset>                 3m49s
~
[root@master1 kubevirt]#

describeで詳細を見ると、

[root@master1 kubevirt]# kubectl describe pvc rocky-iso-9.5
Name:          rocky-iso-9.5
Namespace:     default
StorageClass:
Status:        Pending
Volume:
Labels:        <none>
Annotations:   cdi.kubevirt.io/storage.contentType: kubevirt
               cdi.kubevirt.io/storage.upload.target:
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:
Access Modes:
VolumeMode:    Filesystem
Used By:       <none>
Events:
  Type    Reason         Age                  From                         Message
  ----    ------         ----                 ----                         -------
  Normal  FailedBinding  5s (x24 over 5m47s)  persistentvolume-controller  no persistent volumes available for this claim and no storage class is set
[root@master1 kubevirt]#

となっており、StorageClassが指定されていない、と出ています。サンプルコマンドは、Rook/Cephがあることを前提とするためか、そのままやってもエラーになるようです。

本環境はnfs-clientのStorageClassにPVCを作りたいので、それを指定するオプション(--storage-class nfs-client)を指定します。

[root@al9host kvm_images]# kubectl virt image-upload pvc rocky-iso-9.5 --storage-class nfs-client --size 15Gi --image-path=/var/lib/libvirt/images/Rocky-9.5-x86_64-dvd.iso --insecure
PVC default/rocky-iso-9.5 not found
PersistentVolumeClaim default/rocky-iso-9.5 created
Waiting for PVC rocky-iso-9.5 upload pod to be ready...
Pod now ready
uploadproxy URL not found
[root@al9host kvm_images]#

が、これもエラーで終わりました。uploadproxy URLをオプション指定する必要がある、と出ています。以下のcdi-uploadproxyのPodのIPアドレスか、cdi-uploadproxyのServiceのIPアドレスを指定する必要があるようです。

[root@master1 kubevirt]# kubectl get pod -n cdi -o wide
NAME                               READY   STATUS    RESTARTS   AGE     IP             NODE               NOMINATED NODE   READINESS GATES
cdi-apiserver-cb54d6865-4dvwh      1/1     Running   3          6d22h   10.244.3.105   worker2.internal   <none>           <none>
cdi-deployment-788b9948f8-5b9d8    1/1     Running   5          6d22h   10.244.3.98    worker2.internal   <none>           <none>
cdi-operator-7f6b8ddb4f-mqqkf      1/1     Running   5          6d22h   10.244.3.111   worker2.internal   <none>           <none>
cdi-uploadproxy-6cf85fc475-pbt5k   1/1     Running   3          6d22h   10.244.3.102   worker2.internal   <none>           <none>
[root@master1 kubevirt]#
[root@master1 kubevirt]# kubectl get service -n cdi
NAME                     TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
cdi-api                  ClusterIP   10.110.82.60   <none>        443/TCP    10d
cdi-prometheus-metrics   ClusterIP   10.105.9.213   <none>        8080/TCP   10d
cdi-uploadproxy          ClusterIP   10.104.14.2    <none>        443/TCP    10d
[root@master1 kubevirt]#

ServiceのIPアドレスを指定した「--uploadproxy-url=10.104.14.2」を追加したところ、アップロードできました。インストーラISOファイルが10.72GiBなので、収まる適当なサイズ(15GiB)を指定しています。

[root@master1 kubevirt]# kubectl virt image-upload pvc rocky-iso-9.5 --storage-class nfs-client --size 15Gi --uploadproxy-url=10.104.14.2 --image-path=/tmp/Rocky-9.5-x86_64-dvd.iso --insecure
Using existing PVC default/rocky-iso-9.5
Uploading data to https://10.104.14.2

10.72 GiB / 10.72 GiB [----------------------------] 100.00% 55.48 MiB p/s 3m18s

Uploading data completed successfully, waiting for processing to complete, you can hit ctrl-c without interrupting the progress
Processing completed successfully
Uploading /tmp/Rocky-9.5-x86_64-dvd.iso completed successfully
[root@master1 kubevirt]#

こういう状態です。
image.png

PVは15GiBです。

[root@master1 kubevirt]# kubectl get pvc,pv | grep -e NAME -e rocky-iso-9.5
NAME                                            STATUS   VOLUME                                     CAPACITY      ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
persistentvolumeclaim/rocky-iso-9.5             Bound    pvc-d02a3efe-c6b7-4ea7-8ee4-0d14268615b0   15Gi          RWO            nfs-client     <unset>                 3h6m
NAME                                                        CAPACITY      ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                             STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
persistentvolume/pvc-d02a3efe-c6b7-4ea7-8ee4-0d14268615b0   15Gi          RWO            Delete           Bound    default/rocky-iso-9.5             nfs-client     <unset>                          3h6m
[root@master1 kubevirt]#

インストーラISOファイル(Rocky-9.5-x86_64-dvd.iso)は10.7GiBでしたが、CDIによって14.2GiBのdisk.imgというファイルに変換されて格納されています。

[root@al9host sc-nfs]# qemu-img info ./default-rocky-iso-9.5-pvc-d02a3efe-c6b7-4ea7-8ee4-0d14268615b0/disk.img
image: ./default-rocky-iso-9.5-pvc-d02a3efe-c6b7-4ea7-8ee4-0d14268615b0/disk.img
file format: raw
virtual size: 14.2 GiB (15220080640 bytes)
disk size: 10.7 GiB
Child node '/file':
    filename: ./default-rocky-iso-9.5-pvc-d02a3efe-c6b7-4ea7-8ee4-0d14268615b0/disk.img
    protocol type: file
    file length: 14.2 GiB (15220080640 bytes)
    disk size: 10.7 GiB
[root@al9host sc-nfs]#

(2) ゲストOSのルートディスクのPV作成

VMは、インストーラISOファイルと、ゲストOSのインストール先にする仮想ディスク(=ルートディスク)を接続して起動します。続いて、インストール先にする仮想ディスクのPVを作ります。

StorageClassから18GiBくらい切り出して、rl95vm-2-rootdiskという名前のPVCリソース(PVあり)にするマニフェストファイルを作成します。

rl95vm-2-rootdisk.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: "rl95vm-2-rootdisk"
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 18Gi
  storageClassName: nfs-client

適用してPVCを作成します。

[root@master1 kubevirt]# kubectl apply -f ./rl95vm-2-rootdisk.yaml
persistentvolumeclaim/rl95vm-2-rootdisk created
[root@master1 kubevirt]#

作られました。

[root@master1 kubevirt]# kubectl get pvc,pv | grep -e NAME -e rl95vm-2-rootdisk
NAME                                       STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
persistentvolumeclaim/rl95vm-2-rootdisk    Bound     pvc-e6774427-e7b7-48de-921d-f04604076125   18Gi       RWO            nfs-client     <unset>                 49s
NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                        STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
persistentvolume/pvc-e6774427-e7b7-48de-921d-f04604076125   18Gi       RWO            Delete           Bound    default/rl95vm-2-rootdisk    nfs-client     <unset>                          49s
[root@master1 kubevirt]#

(3) VMの起動

ガイドのサンプルはVmiリソースのマニフェストファイルの例ですが、サンプル目的であって、本来はVmリソースのマニフェストファイルを作るように、とあります。マシンイメージから作ったときの、Vmリソースのマニフェストファイルがありますので、これを複製して、cloud-initのISOファイルの代わりに、OSインストーラISOファイルに変えて、Vmリソースのマニフェストファイルを作ります。

[root@master1 kubevirt]# cp rl95vm-1.yaml rl95vm-2iso.yaml
[root@master1 kubevirt]# 
[root@master1 kubevirt]# vim rl95vm-2iso.yaml
[root@master1 kubevirt]#

これでVMを起動し、VMのVNC画面のプロキシを起動し、VNCビューアで接続してみましたが、以下のように、「No bootable device.」となり、インストーラが起動しません。

image.png

多分、ISOファイルより先に、空の仮想ディスクからOSを起動しようとしてるのだろう、ということで、yamlファイルのdisk:の順番を逆にしてみましたがダメでした。

Copilotによると、bootOrder:を指定すると良い、ということで、やってみたところ上手くいきました。

ということで、上手くいったVmリソースのマニフェストファイルは、以下でした。

rl95vm-2iso.yaml
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  creationTimestamp: 2018-07-04T15:03:08Z
  generation: 1
  labels:
    kubevirt.io/os: linux
  name: rl95vm-2iso
spec:
  runStrategy: Always
  template:
    metadata:
      creationTimestamp: null
      labels:
        kubevirt.io/domain: rl95vm-2iso
    spec:
      domain:
        cpu:
          cores: 4
        devices:
          disks:
          - disk:
              bus: virtio
            name: rootdisk
            bootOrder: 2
          - cdrom:
              bus: sata
              readonly: true
            name: isodisk
            bootOrder: 1
        machine:
          type: q35
        resources:
          requests:
            memory: 4096M
      volumes:
      - name: rootdisk
        persistentVolumeClaim:
          claimName: rl95vm-2-rootdisk
      - name: isodisk
        persistentVolumeClaim:
          claimName: rocky-iso-9.5

コピー元のrl95vm-1.yaml(マシンイメージからVM作成したもの)とのdiffは以下です。

[root@master1 kubevirt]# diff -U1 rl95vm-1.yaml rl95vm-2iso.yaml
--- rl95vm-1.yaml       2025-02-16 17:13:30.193986273 +0900
+++ rl95vm-2iso.yaml    2025-02-22 09:36:44.145428897 +0900
@@ -7,3 +7,3 @@
     kubevirt.io/os: linux
-  name: rl95vm-1
+  name: rl95vm-2iso
 spec:
@@ -14,3 +14,3 @@
       labels:
-        kubevirt.io/domain: rl95vm-1
+        kubevirt.io/domain: rl95vm-2iso
     spec:
@@ -23,3 +23,4 @@
               bus: virtio
-            name: disk0
+            name: rootdisk
+            bootOrder: 2
           - cdrom:
@@ -27,3 +28,4 @@
               readonly: true
-            name: cloudinitdisk
+            name: isodisk
+            bootOrder: 1
         machine:
@@ -34,17 +36,7 @@
       volumes:
-      - name: disk0
+      - name: rootdisk
         persistentVolumeClaim:
-          claimName: rocky-9.5-20241118
-      - cloudInitNoCloud:
-          userData: |
-            #cloud-config
-            hostname: rl95vm-1
-            users:
-              - name: myuser
-            ssh_pwauth: true
-            chpasswd:
-              list: |
-                root:al9host!
-                myuser:al9host!
-              expire: False
-        name: cloudinitdisk
+          claimName: rl95vm-2-rootdisk
+      - name: isodisk
+        persistentVolumeClaim:
+          claimName: rocky-iso-9.5
[root@master1 kubevirt]#

これでVmリソースを作成すると、VMが起動します。

[root@master1 kubevirt]# kubectl apply -f ./rl95vm-2iso.yaml
virtualmachine.kubevirt.io/rl95vm-2iso created
[root@master1 kubevirt]#
[root@master1 kubevirt]# kubectl get vm,vmi
NAME                                     AGE     STATUS    READY
virtualmachine.kubevirt.io/rl95vm-1      5d15h   Running   True
virtualmachine.kubevirt.io/rl95vm-2iso   31s     Running   True

NAME                                             AGE    PHASE     IP             NODENAME           READY
virtualmachineinstance.kubevirt.io/rl95vm-1      146m   Running   10.244.1.79    worker1.internal   True
virtualmachineinstance.kubevirt.io/rl95vm-2iso   30s    Running   10.244.3.116   worker2.internal   True
[root@master1 kubevirt]#

(4) VMのVNC画面の接続(画面表示)

これでVMが、インストーラISOファイルから起動していますので、画面を表示して、画面操作して対話的にインストールを行うことができます。そのために、以下でやったように、al9hostでVNC画面のプロキシを立ち上げ、windows11のVNCビューアから接続して画面を表示します。

図にすると、こうやります。

image.png

  • kubectl virt vncコマンドを実行し、al9host上に、rl95vm-2isoのVM画面を表示するための、VNCサーバのプロキシを作る。
  • 192.168.11.103:5900で待ち受けるよう指定したので、Windows11上で、192.168.11.103:5900を宛先にVNCビューアで接続し、rl95vm-2isoのVMの画面を表示する。

al9hostでVNC画面のプロキシを立ち上げます。VM名として「rl95vm-2iso」を指定しています。

[root@al9host kvm_images]# kubectl virt vnc --address=192.168.11.103 --port 5900 --proxy-only rl95vm-2iso
{"port":5900}
{"component":"portforward","level":"info","msg":"connection timeout: 1m0s","pos":"vnc.go:159","timestamp":"2025-02-21T23:42:17.733147Z"}

windows11のVNCビューアから、プロキシに対して接続します。
Description

これで、RockyLinux 9.5のインストーラ画面が表示でき、インストールできるようになりました。
Description

(5) ゲストOSのインストール

最初のEnterを押した後、VMの画面が一度消えるのか、一回、VNC接続が切れますが、再度開けば、インストールは最後までできました。
Description

インストールが一通り行われ、再起動画面となります。
image.png

ここで、「システムの再起動」を押すと、VMが再起動しますが、また、この画面になります。
image.png

bootOrderが、ISOファイルが1、ルートディスクが2のままのためです。そのため、一度、VMを停止して、bootOrderを変えてVMを起動する、ということをします。

まず、VMを停止します。

[root@master1 kubevirt]# kubectl virt stop rl95vm-2iso
VM rl95vm-2iso was scheduled to stop
[root@master1 kubevirt]#

すぐには停止しませんでした。1分くらいで、VNC画面が消え、確認すると、VmリソースがStoppedになり、Vmiリソースが消えていました。

[root@master1 kubevirt]# kubectl get vm
NAME          AGE     STATUS    READY
rl95vm-1      5d16h   Running   True
rl95vm-2iso   39m     Stopped   False
[root@master1 kubevirt]#
[root@master1 kubevirt]# kubectl get vmi
NAME       AGE     PHASE     IP            NODENAME           READY
rl95vm-1   3h18m   Running   10.244.1.79   worker1.internal   True
[root@master1 kubevirt]#

bootOrderを変えました。rootdiskが1、isodiskが2です。(isodiskは消してもいいですが)

[root@master1 kubevirt]# vim rl95vm-2iso.yaml
[root@master1 kubevirt]#
rl95vm-2iso.yaml
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  creationTimestamp: 2018-07-04T15:03:08Z
  generation: 1
  labels:
    kubevirt.io/os: linux
  name: rl95vm-2iso
spec:
  runStrategy: Always
  template:
    metadata:
      creationTimestamp: null
      labels:
        kubevirt.io/domain: rl95vm-2iso
    spec:
      domain:
        cpu:
          cores: 4
        devices:
          disks:
          - disk:
              bus: virtio
            name: rootdisk
            bootOrder: 1
          - cdrom:
              bus: sata
              readonly: true
            name: isodisk
            bootOrder: 2
        machine:
          type: q35
        resources:
          requests:
            memory: 4096M
      volumes:
      - name: rootdisk
        persistentVolumeClaim:
          claimName: rl95vm-2-rootdisk
      - name: isodisk
        persistentVolumeClaim:
          claimName: rocky-iso-9.5

適用して、VMを起動します。

[root@master1 kubevirt]# kubectl apply -f ./rl95vm-2iso.yaml
virtualmachine.kubevirt.io/rl95vm-2iso configured
[root@master1 kubevirt]#

なお、kubectl virt startをせずとも、applyでVMが起動します。

[root@master1 kubevirt]# kubectl get vm
NAME          AGE     STATUS    READY
rl95vm-1      5d16h   Running   True
rl95vm-2iso   45m     Running   True
[root@master1 kubevirt]#
[root@master1 kubevirt]# kubectl get vmi
NAME          AGE     PHASE     IP             NODENAME           READY
rl95vm-1      3h24m   Running   10.244.1.79    worker1.internal   True
rl95vm-2iso   40s     Running   10.244.3.121   worker2.internal   True
[root@master1 kubevirt]#

これで、VNC画面のプロキシを立ち上げて、

[root@al9host kvm_images]# kubectl virt vnc --address=192.168.11.103 --port 5900 --proxy-only rl95vm-2iso
{"port":5900}
{"component":"portforward","level":"info","msg":"connection timeout: 1m0s","pos":"vnc.go:159","timestamp":"2025-02-22T00:39:52.882675Z"}

VNCビューアで接続すると、ゲストOSが起動した状態となりました。
image.png

2. 他のKVM環境で作成したVMの仮想ディスクをインポートしてVM作成

そもそも、KubeVirtって、既存システムのアプリケーションをコンテナ化/マイクロサービス化して、k8sの高可用な環境に移行したいけど、いきなりはハードルが高すぎる、というときに、とりあえず既存システムのVMをk8sクラスタ内に持ってきて、アプリをVM稼働からコンテナ稼働に徐々に移していくハードルを下げる、が、想定される利用ケースの1つ、かと思います。

よって、既存のVMをインポートする、という使い方が、KubeVirtでVMを作るときに、最も使われる可能性の高い方法ではないかと思います。

既存のVMをインポートする方法は、以下にガイドがありますので、これを参考にして、やってみます。

(1) KVMでのVM作成

インポート確認のために、k8sクラスタとは関係のない、al9host(AlmaLinux9.5)のKVM環境でVMを作ります。Web UI(cockpit)から操作し、「rl95vm-3cockpit」のVM(RockyLinux9.5)を1つ作りました。

「仮想マシンの作成」から、
image.png

ウイザードが表示されるので、適当に入力します。
image.png

これで、VMが作られます。コンソールの欄を見ると、ISOファイルからOSインストーラが起動していることがわかります。
image.png

選択肢を適当に選択して、OSのインストールを行いました。
image.png

ログイン画面が表示されましたので、ゲストOSは構築できた、とし、VMをシャットダウンします。
image.png

作成したVMが、停止したことを確認します。

[root@al9host kvm_images]# virsh list --all
 Id   名前                                  状態
----------------------------------------------------------
~
-    rl95vm-3cockpit                       シャットオフ

[root@al9host kvm_images]#

(2) 仮想ディスクをインポートしたPV作成

作成したVMの仮想ディスクは、cockpitの画面にも表示されていましたが、/var/lib/libvirt/images/(デフォルトのストレージプール)の、rl95vm-3cockpit.qcow2というファイルです。
image.png

これを、Masterノード(master1)の/tmpにコピーしました。

[root@master1 tmp]# ls -lh
total 25G
-rw-------. 1 root root 25G Feb 22 10:08 rl95vm-3cockpit.qcow2
~
[root@master1 tmp]#

このimgファイルを、CDIを使ってPVにインポートします。コマンドとしては、インストーラISOファイルをPVにアップロードするのに使った、以下のコマンドをベースにします。

kubectl virt image-upload pvc rocky-iso-9.5 --storage-class nfs-client --size 15Gi --uploadproxy-url=10.104.14.2 --image-path=/tmp/Rocky-9.5-x86_64-dvd.iso --insecure

以下のコマンドを実行して、CDIを利用して仮想ディスクをPVにアップロードし、PVCを作成しました。

[root@master1 kubevirt]# kubectl virt image-upload pvc rl95vm-3cockpit --storage-class nfs-client --size 30Gi --uploadproxy-url=10.111.218.50 --image-path=/tmp/rl95vm-3cockpit.qcow2 --insecure
PVC default/rl95vm-3cockpit not found
PersistentVolumeClaim default/rl95vm-3cockpit created
Waiting for PVC rl95vm-3cockpit upload pod to be ready...
Pod now ready
Uploading data to https://10.111.218.50

24.00 GiB / 24.00 GiB [----------------------------] 100.00% 69.12 MiB p/s 5m56s

Uploading data completed successfully, waiting for processing to complete, you can hit ctrl-c without interrupting the progress
Processing completed successfully
Uploading /tmp/rl95vm-3cockpit.qcow2 completed successfully
[root@master1 kubevirt]#

ベースから変えたのは以下です。

  • PVC名
  • PVのサイズ
  • アップロードするファイル
  • CDIのIPアドレス

--uploadproxy-url=は、以下のCDIのServiceのIPアドレスを確認して指定しています(Serviceをtype: LoadBalancerに変えられないかなと試して上手くいかなかったので、作り直してIPが変わっています)。

[root@master1 kubevirt]# kubectl get service cdi-uploadproxy -n cdi
NAME              TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
cdi-uploadproxy   ClusterIP   10.111.218.50   <none>        443/TCP   50s
[root@master1 kubevirt]#

ガイドのコマンド例は「virtctl image-upload --pvc-name=cirros-vm-disk --pvc-size=500Mi --image-path=/home/shegde/images/cirros-0.4.0-x86_64-disk.img --uploadproxy-url=<url to upload proxy service>」ですが、特に、このコマンドから取り込むべきオプションはありません。

(3) VM作成

Vmリソースのマニフェストファイルも、流用して作ります。

[root@master1 kubevirt]# cp rl95vm-2iso.yaml rl95vm-3cockpit.yaml
[root@master1 kubevirt]#

以下の個所を変更しました。

[root@master1 kubevirt]# vim rl95vm-3cockpit.yaml
[root@master1 kubevirt]#
[root@master1 kubevirt]# diff -U1 rl95vm-2iso.yaml rl95vm-3cockpit.yaml
--- rl95vm-2iso.yaml    2025-02-22 09:36:44.145428897 +0900
+++ rl95vm-3cockpit.yaml        2025-02-22 19:58:33.304776052 +0900
@@ -7,3 +7,3 @@
     kubevirt.io/os: linux
-  name: rl95vm-2iso
+  name: rl95vm-3cockpit
 spec:
@@ -14,3 +14,3 @@
       labels:
-        kubevirt.io/domain: rl95vm-2iso
+        kubevirt.io/domain: rl95vm-3cockpit
     spec:
@@ -25,7 +25,2 @@
             bootOrder: 1
-          - cdrom:
-              bus: sata
-              readonly: true
-            name: isodisk
-            bootOrder: 2
         machine:
@@ -38,5 +33,2 @@
         persistentVolumeClaim:
-          claimName: rl95vm-2-rootdisk
-      - name: isodisk
-        persistentVolumeClaim:
-          claimName: rocky-iso-9.5
+          claimName: rl95vm-3cockpit
[root@master1 kubevirt]#

内容は以下です。

rl95vm-3cockpit.yaml
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  creationTimestamp: 2018-07-04T15:03:08Z
  generation: 1
  labels:
    kubevirt.io/os: linux
  name: rl95vm-3cockpit
spec:
  runStrategy: Always
  template:
    metadata:
      creationTimestamp: null
      labels:
        kubevirt.io/domain: rl95vm-3cockpit
    spec:
      domain:
        cpu:
          cores: 4
        devices:
          disks:
          - disk:
              bus: virtio
            name: rootdisk
            bootOrder: 1
        machine:
          type: q35
        resources:
          requests:
            memory: 4096M
      volumes:
      - name: rootdisk
        persistentVolumeClaim:
          claimName: rl95vm-3cockpit

VMを起動します。

[root@master1 kubevirt]# kubectl apply -f ./rl95vm-3cockpit.yaml
virtualmachine.kubevirt.io/rl95vm-3cockpit created
[root@master1 kubevirt]#
[root@master1 kubevirt]# kubectl get vm,vmi
NAME                                         AGE    STATUS    READY
virtualmachine.kubevirt.io/rl95vm-1          6d2h   Running   True
virtualmachine.kubevirt.io/rl95vm-2iso       11h    Running   True
virtualmachine.kubevirt.io/rl95vm-3cockpit   16s    Running   True

NAME                                                 AGE   PHASE     IP             NODENAME           READY
virtualmachineinstance.kubevirt.io/rl95vm-1          13h   Running   10.244.1.79    worker1.internal   True
virtualmachineinstance.kubevirt.io/rl95vm-2iso       10h   Running   10.244.3.121   worker2.internal   True
virtualmachineinstance.kubevirt.io/rl95vm-3cockpit   16s   Running   10.244.1.82    worker1.internal   True
[root@master1 kubevirt]#

rl95vm-3cockpitのVMの画面のVNCサーバのプロキシを立ち上げ、

[root@al9host sc-nfs]# kubectl virt vnc --address=192.168.11.103 --port 5900 --proxy-only rl95vm-3cockpit
{"port":5900}
{"component":"portforward","level":"info","msg":"connection timeout: 1m0s","pos":"vnc.go:159","timestamp":"2025-02-22T10:59:52.576159Z"}

VNCビューアで接続すると、VMの画面が表示されました。

image.png

まとめ

KubeVirtの環境で、ISOファイルからOSインストーラを起動してVMを作成する方法と、KVM環境で作成したVMのimgファイルをインポートしてVMを作成する方法を試しました。以前のマシンイメージから作成したVM含め、以下の3つのVMができました。

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?