🍣

KubeVirt を試してみた (2)

2023/01/09に公開

KubeVirt を試してみた の続きです。

CDI のインストール

$ export VERSION=$(basename $(curl -s -w %{redirect_url} https://github.com/kubevirt/containerized-data-importer/releases/latest))
$ echo $VERSION
v1.55.2

$ curl -O -s -L https://github.com/kubevirt/containerized-data-importer/releases/download/$VERSION/cdi-operator.yaml
$ curl -O -s -L https://github.com/kubevirt/containerized-data-importer/releases/download/$VERSION/cdi-cr.yaml

$ kubectl apply -f cdi-operator.yaml
$ kubectl apply -f cdi-cr.yaml

Ubuntu 22.10 のイメージをインポートしてみる

CDI のインストールが出来たので、早速 Ubuntu 22.10 (kinetic) の Cloud image を PVC としてインポートしてみます。

pvc_ubuntu-22.10.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ubuntu-22.10
  labels:
    app: containerized-data-importer
  annotations:
    cdi.kubevirt.io/storage.import.endpoint: "https://cloud-images.ubuntu.com/kinetic/current/kinetic-server-cloudimg-amd64.img"
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 8Gi

$ kubectl apply -f pvc_ubuntu-22.10.yaml

$ kubectl get pvc
NAME           STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS        AGE
ubuntu-22.10   Bound    pvc-14d5bee1-8dbe-4eb2-a213-6a71bfa5e005   8Gi        RWO            truenas-iscsi-csi   7s

$ kubectl get pod
NAME                         READY   STATUS    RESTARTS      AGE
importer-ubuntu-22.10        1/1     Running   0             32s
ubuntu                       1/1     Running   1 (19h ago)   2d21h
virt-launcher-testvm-6h44t   2/2     Running   0             18h
virt-launcher-ubuntu-mhxp5   2/2     Running   0             18h

PVC が確保されて、イメージのインポート処理用の Pod が作られています。
インポート処理の経過はログに出力されているので importer で始まる Pod の出力を眺めてみます。

$ kubectl logs -f importer-ubuntu-22.10
I0109 02:25:51.607169       1 importer.go:104] Starting importer
I0109 02:25:51.607195       1 importer.go:171] begin import process
I0109 02:25:57.564548       1 data-processor.go:379] Calculating available size
I0109 02:25:57.564586       1 data-processor.go:391] Checking out file system volume size.
I0109 02:25:57.564594       1 data-processor.go:399] Request image size not empty.
I0109 02:25:57.564603       1 data-processor.go:404] Target size 7904002048.
I0109 02:25:57.564674       1 util.go:39] deleting file: /data/lost+found
I0109 02:25:57.630760       1 nbdkit.go:303] Waiting for nbdkit PID.
I0109 02:25:58.131279       1 nbdkit.go:324] nbdkit ready.
I0109 02:25:58.131300       1 data-processor.go:282] New phase: Convert
I0109 02:25:58.131336       1 data-processor.go:288] Validating image
I0109 02:26:00.805783       1 qemu.go:259] 0.00

インポート処理には約2時間ぐらいかかりました。。。

永続化ボリュームを持った仮想マシンを立ててみる

インポートした PVC をそのまま使うと、また別な仮想マシンを立てるときに最初からインポート処理をし直さないと行けなくなるので、複製してから KubeVirt の仮想マシンを生成してみます。
参考: kubevirt を試す の 「追記 2022-09-29」のやり方

ubuntu-vm.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ubuntu-vm-root
spec:
  dataSource:
    name: ubuntu-22.10
    kind: PersistentVolumeClaim
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 8Gi
---
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  generation: 1
  labels:
    kubevirt.io/os: linux
  name: ubuntu-vm
spec:
  running: true
  template:
    spec:
      domain:
        cpu:
          cores: 2
        devices:
          disks:
          - disk:
              bus: virtio
            name: disk0
            cache: writethrough
          - cdrom:
              bus: sata
              readonly: true
            name: cloudinitdisk
        machine:
          type: q35
        resources:
          requests:
            memory: 1024M
      volumes:
      - dataVolume:
          name: ubuntu-vm-root
        name: disk0
      - cloudInitNoCloud:
          userData: |
            #cloud-config
            hostname: ubuntu-vm
            ssh_pwauth: true
            chpasswd:
              list: |
                ubuntu:ubuntu
              expire: false
        name: cloudinitdisk

仮想マシン画面に接続する

virtctl コマンドを用いると仮想マシンの画面に VNC 接続することが出来ます。

$ kubectl virt vnc [仮想マシン名] --proxy-only --address 0.0.0.0

実は、上記の手順で起動すると sshd が無効化されている & シリアルコンソール接続が使えない 状態になってるので、VNC 接続で一度手で直してあげる必要があるのでした。

仮想マシンのブートに時間がかかる

仮想マシンを起動すると qemu の SeaBIOS 画面で最初 1 分ぐらいタイムアウト待ちのような感じで止まってしまっています。この辺は、あとで原因を追いかけようと思います。

Discussion