🖥️

KubeVirt を試してみた

2023/01/08に公開

下準備

今回検証に使った Kubernetes クラスターは Hyper-V 環境上の仮想マシンなので、あらかじめ Nested Virtualizaiton をオンにしておきます。

Set-VMProcessor -VMName dualstack_k8s_worker -ExposeVirtualizationExtensions $true

Get-VMProcessor -VMName dualstack_k8s_worker | Format-List VMName,ExposeVirtualizationExtensions
VMName                         : dualstack_k8s_worker
ExposeVirtualizationExtensions : True

KubeVirt のセットアップ

Installation - KubeVirt User-Guide に沿ってセットアップをしていきます。
2023/1/8 時点の最新バージョンは v0.58.0 でした。

$ export RELEASE=$(curl https://storage.googleapis.com/kubevirt-prow/release/kubevirt/kubevirt/stable.txt)

$ echo $RELEASE
v0.58.0

$ curl -O -s -L https://github.com/kubevirt/kubevirt/releases/download/${RELEASE}/kubevirt-operator.yaml
$ curl -O -s -L https://github.com/kubevirt/kubevirt/releases/download/${RELEASE}/kubevirt-cr.yaml

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

$ kubectl -n kubevirt wait kv kubevirt --for condition=Available --timeout 300s

$ kubectl -n kubevirt get pod
NAME                               READY   STATUS    RESTARTS   AGE
virt-api-598b86c466-b4mdv          1/1     Running   0          2m50s
virt-api-598b86c466-lmrkc          1/1     Running   0          2m50s
virt-controller-5d7747c4d9-z5bkr   1/1     Running   0          2m25s
virt-controller-5d7747c4d9-z779n   1/1     Running   0          2m25s
virt-handler-2mf5g                 1/1     Running   0          2m25s
virt-operator-66c966d959-2pjj9     1/1     Running   0          3m26s
virt-operator-66c966d959-fzk4t     1/1     Running   0          3m26s

ついでに virtctl コマンドを Krew 経由で入れておきます。
( Krew のインストール方法は [Installing &#183 Krew](https://krew.sigs.k8s.io/docs/user-guide/setup/install/#bash を参照)

$ kubectl krew install virt

$ kubectl virt
Available Commands:
  addvolume         add a volume to a running VM
  completion        generate the autocompletion script for the specified shell
  console           Connect to a console of a virtual machine instance.
  expose            Expose a virtual machine instance, virtual machine, or virtual machine instance replica set as a new service.
  fslist            Return full list of filesystems available on the guest machine.
  guestfs           Start a shell into the libguestfs pod
  guestosinfo       Return guest agent info about operating system.
  help              Help about any command
  image-upload      Upload a VM image to a DataVolume/PersistentVolumeClaim.
  memory-dump       Dump the memory of a running VM to a pvc
  migrate           Migrate a virtual machine.
  migrate-cancel    Cancel migration of a virtual machine.
  pause             Pause a virtual machine
  permitted-devices List the permitted devices for vmis.
  port-forward      Forward local ports to a virtualmachine or virtualmachineinstance.
  removevolume      remove a volume from a running VM
  restart           Restart a virtual machine.
  scp               SCP files from/to a virtual machine instance.
  soft-reboot       Soft reboot a virtual machine instance
  ssh               Open a SSH connection to a virtual machine instance.
  start             Start a virtual machine.
  stop              Stop a virtual machine.
  unpause           Unpause a virtual machine
  usbredir          Redirect a usb device to a virtual machine instance.
  userlist          Return full list of logged in users on the guest machine.
  version           Print the client and server version information.
  vnc               Open a vnc connection to a virtual machine instance.

Use "kubectl virt <command> --help" for more information about a given command.
Use "kubectl virt options" for a list of global command-line options (applies to all commands).

テスト用の VM を起動してみる

KubeadmでKubernetesクラスターを作ってKubeVirtでVMを動かす - 仮想化通信 を参考にさせてもらい、CirrOS というテスト用の仮想マシンを起動してみます。

まずは仮想マシンを作ります。

$ curl -O -s -L https://raw.githubusercontent.com/kubevirt/kubevirt.github.io/master/labs/manifests/vm.yaml

$ kubectl apply -f vm.yaml
virtualmachine.kubevirt.io/testvm created

$ kubectl get vm
NAME     AGE   STATUS    READY
testvm   7s    Stopped   False

仮想マシンを作っただけだと起動していないので kubectl virt = virtctl コマンドで起動してみます。

$ kubectl virt start testvm
VM testvm was scheduled to start

$ kubectl get vm
NAME     AGE   STATUS     READY
testvm   48s   Starting   False

$ kubectl get vm
NAME     AGE   STATUS    READY
testvm   64s   Running   True

$ kubectl get vmi
NAME     AGE   PHASE     IP             NODENAME     READY
testvm   55s   Running   172.24.2.145   dsk8snode1   True

起動してきたらおもむろに SSH 接続してみます。

$ ssh cirros@172.24.2.145
cirros@172.24.2.145's password: gocubsgo

$ uname -a
Linux testvm 4.4.0-28-generic #47-Ubuntu SMP Fri Jun 24 10:09:13 UTC 2016 x86_64 GNU/Linux

$ uptime
 08:05:46 up 1 min,  1 users,  load average: 0.00, 0.00, 0.00

出来ましたヽ(^。^)丿

CDI はまた次のタイミングで……

とりあえずはここまで。
続きは別記事にまとめておきます。

参考にしている URL

次にやること

Discussion