KubeVirt
Quickstart
bash
# create image template
kubectl apply -f https://kubevirt.io/labs/manifests/vm.yaml
kubectl get vms
# start vm
virtctl start testvm # it would show up as `pod`
kubectl get vmis # running instances
# access vm
virtctl console testvm
virtctl ssh -i ~/.ssh/kubevirt-debian ubuntu@vmi/debian-vm -n vms # tty
virtctl vnc testvm # gui
# teardown
virtctl stop testvm
kubectl delete vm testvmExample config
bash
---
apiVersion: v1
kind: Service
metadata:
name: debian-vm-ssh
namespace: vms
spec:
type: NodePort
selector:
kubevirt.io/vm: debian-vm
ports:
- protocol: TCP
port: 22
targetPort: 22
nodePort: 30200
---
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
name: debian-vm
namespace: vms
spec:
runStrategy: Halted
template:
spec:
metadata:
labels:
kubevirt.io/vm: debian-vm
architecture: amd64
domain:
devices:
disks:
- name: debian-boot-volume
disk:
bus: virtio
- name: cloudinitdisk
disk:
bus: virtio
interfaces:
- name: default
masquerade: {}
resources:
requests:
memory: 512Mi
cpu: 1
cpu:
cores: 2
networks:
- name: default
pod: {}
volumes:
- name: debian-boot-volume
dataVolume:
name: debian-boot-volume
- name: cloudinitdisk
cloudInitNoCloud:
userData: |
#cloud-config
hostname: debian-vm
users:
- name: debian
sudo: ALL=(ALL) NOPASSWD:ALL
shell: /bin/bash
ssh_authorized_keys:
- ssh-ed25519 xxx
ssh_pwauth: true
disable_root: false
chpasswd:
list: |
debian:debian
expire: false
package_update: true
packages:
- qemu-guest-agent
runcmd:
- systemctl enable ssh
- systemctl start ssh
networkData: |-
network:
version: 2
ethernets:
enp1s0:
match:
name: e*
dhcp4: true
dhcp6: true
set-name: "enp1s0"
dataVolumeTemplates:
- metadata:
name: debian-boot-volume
spec:
source:
registry:
url: "docker://quay.io/containerdisks/debian:latest"
platform:
architecture: amd64
storage:
resources:
requests:
storage: 8Gi
accessModes:
- ReadWriteOnceMonitoring
https://github.com/kubevirt/monitoring
Cookbooks
Fix no internet on reboot
sudo vi /etc/netplan/50-cloud-init.yaml
yaml
network:
version: 2
ethernets:
enp1s0:
match:
# macaddress: "xx:xx:xx:xx:xx:xx"
name: e* # add this line
dhcp4: true
dhcp6: true
set-name: "enp1s0"Then sudo netplan apply
Use cloud-init image for data volume
yaml
spec:
source:
http:
url: "https://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-amd64.img"Patch storageprofile for headlamp kubevirt gui wizard when on k3s
bash
kubectl patch storageprofile local-path --type=merge -p '{
"spec": {
"claimPropertySets": [
{
"accessModes": ["ReadWriteOnce"],
"volumeMode": "Filesystem"
}
]
}
}'