demo
demo copied to clipboard
Easy to use KubeVirt demo based on minikube.
KubeVirt Demo
This demo will guide you through setting up KubeVirt on
- minikube 1.2+
- kind 0.4+
- CRC 1.18+
Quickstart
Deploy KubeVirt
This demo assumes that minikube
or minishift
is configured and running as described
below and that kubectl
available on your system. If not, then
please take a look at the guide below.
The first step is to start minikube
:
$ minikube config set vm-driver kvm2
$ minikube start --memory 4096
๐ minikube v1.0.1 on linux (amd64)
๐ฟ Downloading Minikube ISO ...
142.88 MB / 142.88 MB [============================================] 100.00% 0s
๐คน Downloading Kubernetes v1.14.1 images in the background ...
๐ฅ Creating kvm2 VM (CPUs=2, Memory=2048MB, Disk=20000MB) ...
๐ถ "minikube" IP address is 192.168.39.47
๐ณ Configuring Docker as the container runtime ...
๐ณ Version of container runtime is 18.06.3-ce
โ Waiting for image downloads to complete ...
โจ Preparing Kubernetes environment ...
๐พ Downloading kubelet v1.14.1
๐พ Downloading kubeadm v1.14.1
๐ Pulling images required by Kubernetes v1.14.1 ...
๐ Launching Kubernetes v1.14.1 using kubeadm ...
โ Waiting for pods: apiserver proxy etcd scheduler controller dns
๐ Configuring cluster permissions ...
๐ค Verifying component health .....
๐ kubectl is now configured to use "minikube"
๐ Done! Thank you for using minikube!
Before we can deploy KubeVirt we create a small config, to adjust KubeVirt to your environment. Specifically enabling software emulation for your VMs in case that no hardware virtualization support is present.
$ kubectl create namespace kubevirt
# Either nesting as described [below](#setting-up-minikube) will be used, or we configure emulation if
# no nesting is available:
$ minikube ssh -- test -e /dev/kvm \
|| kubectl create configmap -n kubevirt kubevirt-config --from-literal debug.useEmulation=true
Now you are finally ready to deploy KubeVirt using our operator (comparable to an installer):
$ kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/v0.34.2/kubevirt-operator.yaml
โฆ
deployment.apps/virt-operator created
$ kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/v0.34.2/kubevirt-cr.yaml
kubevirt.kubevirt.io/kubevirt created
The initial deployment can take a long time, because a number of pods have to be pulled from the internet. We'll watch the operator status to determine when the deployment is completed:
$ kubectl wait --timeout=180s --for=condition=Available -n kubevirt kv/kubevirt
kubevirt.kubevirt.io/kubevirt condition met
Congratulations, KubeVirt was successfully deployed.
Install virtctl
An additional binary is provided to get quick access to the serial and graphical ports of a VM, and handle start/stop operations.
The tool is called virtctl
and can be retrieved from the release page of KubeVirt:
$ curl -L -o virtctl https://github.com/kubevirt/kubevirt/releases/download/v0.34.2/virtctl-v0.34.2-linux-amd64
$ chmod +x virtctl
Installing with krew
If you installed krew, you can install virtctl as a kubectl plugin:
$ kubectl krew install virt
Starting and stopping a VirtualMachine
Once you deployed KubeVirt you are ready to launch a VM:
if virtctl
is installed via krew, please use kubectl virt ...
instead of ./virtctl ...
# Creating a virtual machine
$ kubectl apply -f https://raw.githubusercontent.com/kubevirt/demo/master/manifests/vm.yaml
# After deployment you can manage VMs using the usual verbs:
$ kubectl describe vm testvm
# To start a VM you can use, this will create a VM instance (VMI)
$ ./virtctl start testvm
# The interested reader can now optionally inspect the instance
$ kubectl describe vmi testvm
# To shut the VM down again:
$ ./virtctl stop testvm
# To delete
$ kubectl delete vm testvm
# To create your own
$ kubectl apply -f $YOUR_VM_SPEC
Accessing VMs (serial console & VNC)
if virtctl
is installed via krew, please use kubectl virt ...
instead of ./virtctl ...
# Connect to the serial console
$ ./virtctl console testvm
# Connect to the graphical display
# This requires remote-viewer from the virt-viewer package and a graphical desktop from where you run virtctl
$ ./virtctl vnc testvm
Next steps
User Guide
Now that KubeVirt is up an running, you can take a look at the user guide to understand how you can create and manage your own virtual machines.
Appendix
Setting up Minikube
-
(Optional) Minikube has support for nested virtualization, it can be enabled as described here.
-
If not installed, install minikube as described here:
- Install the kvm2 driver
- Download the
minikube
binary
-
Launch minikube with the desired memory
$ minikube start --vm-driver kvm2 --memory 4096
- Install
kubectl
via a package manager or download it
Setting up kind
-
If not installed, install kind as described here
-
Launch kind
$ tee cluster.yaml <<EOC
kind: Cluster
apiVersion: kind.sigs.k8s.io/v1alpha3
nodes:
- role: control-plane
- role: worker
- role: worker
EOC
$ kind create cluster --config cluster.yaml
Running on CRC
CRC is just another Kubernetes distribution, and you can also use kubectl
to interact with such a cluster.
However, the oc
tool is part of OKD and provides additional commands for managing your cluster.
-
Get the
crc
tool -
Follow the steps at https://github.com/code-ready/crc/releases to get and install CRC