Skip to content

Part 3: Deploy VM

What Will You Do

In this part of the self-paced exercise, you will deploy a virtual machine workload to your cluster running KubeVirt.


Step 1: Create Workload Namespace

In this step, you will create a namespace for the virtual machine. The "namespace.yaml" file in the "/getstarted/kubevirt/workload" directory of the forked repository contains the declarative specification for the namespace resource.

  • Open a Terminal (macOS/Linux) or Command Prompt (Windows) and navigate to the folder where you forked the Git repository
  • Navigate to the folder "/getstarted/kubevirt/workload"
  • Type the command
rctl create namespace -f namespace.yaml

If you did not encounter any errors, you can optionally verify if everything was created correctly on the controller.

  • In your project, select Infrastructure -> Namespaces
  • You should see a namespace called vm

Workload Namespace

Next, you will publish the namespace to the cluster.

  • Type the command below
rctl publish namespace vm

Workload Namespace


Step 2: Deploy Virtual Machine Workload

In this step, you will create a workload resource for the virtual machine. The "vm-workload.yaml" file in the "/getstarted/kubevirt/workload" directory of the forked repository contains the declarative specification for the workload.

The following items may need to be updated/customized if you used alternate names.

  • project: defaultproject
  • clusters: kubevirt-cluster
name: vm
namespace: vm
project: defaultproject
type: NativeYaml
clusters: kubevirt-cluster
payload: ./vm.yaml

Note that the workload's name is "vm" and it is of type "k8s YAML". The actual k8s YAML file for the VM is in the payload "vm.yaml" file.

rctl create workload vm-workload.yaml

If there were no errors, you should see a message like below

Workload created successfully

Now, let us publish the newly created VM workload to the cluster. The workload can be deployed to multiple clusters as per the configured "placement policy". In this case, you are deploying to a single cluster with the name "kubevirt-cluster".

rctl publish workload vm

Step 3: Verify Workload

In the web console, click on Applications -> Workloads. You should see something like the following.

Published Workload

Now, let us verify the virtual machine is running

  • Click on the kubectl link in the cluster card and type the following command
kubectl get vm -n vm

You should see something like the following showing the VM in a running state.

NAME     AGE   STATUS    READY
testvm   50s   Running   True

Step 4: Download KubeVirt's virtctl CLI

The virtctl CLI is needed for the use of advanced features to interact with virtual machines

  • On your machine, run the following commands
VERSION=$(kubectl get kubevirt.kubevirt.io/kubevirt -n kubevirt -o=jsonpath="{.status.observedKubeVirtVersion}")
ARCH=$(uname -s | tr A-Z a-z)-$(uname -m | sed 's/x86_64/amd64/') || windows-amd64.exe
echo ${ARCH}
curl -L -o virtctl https://github.com/kubevirt/kubevirt/releases/download/${VERSION}/virtctl-${VERSION}-${ARCH}
chmod +x virtctl
sudo install virtctl /usr/local/bin

Step 5: Access Virtual Machine

In this step, you will access the virtual machine using the previously installed virtctl CLI.

  • Run the below command to access the VM
virtctl console testvm -n vm
  • Login to the VM using the onscreen credentials

You are now able to use the VM terminal.


Recap

Congratulations! At this point, you have successfuly deployed a virtual machine to the kubernetes cluster and accessed the VM's terminal.