Host Setup: SUSE Virtualization Workshop¶
This workshop deploys on a bare metal Linux host with KVM. These steps cover host prep and initial deploy. Automation is entirely rodeo-cli; this repo ships the plan and the lab exercises. Same topology as suse-virt-rodeo.
No spare bare-metal host? See Deploy on AWS instead in the README. Same lab, an EC2 host does the work.
Requirements¶
baremetal/rodeo-plan.yaml ships one fixed sizing: 3× Harvester at 16 GiB/8 vCPU/320 GB, plus Rancher at 8 GiB/4 vCPU/60 GB. That's 56 GiB / 28 vCPU / 1020 GB guest total, and there's no separate tier system like AWS's budget/recommended/performance.
"Minimum" below is that config with host overhead. "Recommended" is the same config with comfortable margin for the host OS, buffer/cache, and not fighting for CPU during the cluster phase's nested-KVM install.
| Resource | Minimum | Recommended |
|---|---|---|
| OS | SLES 16 / Leap 16 (Ubuntu 22.04+ and Fedora also work via install-deps) |
same |
| RAM | 64 GiB available | 80-96 GiB available |
| vCPU | ~32 free | ~40+ free |
| Disk | ~1050 GiB free in /var/lib/libvirt/images (320 GB × 3 Harvester + Rancher + ISO cache) |
same, or more if you'll create many extra VMs during the exercises |
| KVM | /dev/kvm present. Nested virt only needed if the host itself is a VM |
same |
| Network | Internet access during deploy | same |
If your host has real headroom above the minimum, raise resources.harvester.memory_mib in rodeo-plan.yaml from 16384 toward 24576 (24 GiB/node) before your first rodeo up. That's the exact sizing the AWS variant uses once it has RAM to spare, live-verified to leave a comfortable margin instead of just barely fitting.
Confirm readiness:
You want a recommendation of harvester (or enough RAM to run it).
Install rodeo-cli¶
This clones the CLI, sets up its Python environment, and links rodeo as a system command. No venv to activate, no PATH tweaks, no sudo prefix on day-2 commands. rodeo up self-escalates when it needs root.
To pin a release:
curl -fsSL https://raw.githubusercontent.com/avaleror/rodeo-cli/main/install.sh | bash -s -- --ref v0.14.2
Deploy this workshop¶
git clone https://github.com/avaleror/suse-virt-workshop.git
cd suse-virt-workshop/baremetal
rodeo up
Because you are inside a directory that already contains rodeo-plan.yaml, rodeo up auto-detects the lab. It will:
- Wrap itself in a tmux session so a dropped SSH does not kill the deploy
- Re-run host checks and offer to install missing packages
- Generate
~/.rodeo/secrets.yamlwith random credentials - Drive the pipeline:
kvm_host → vms → pxe_server → cluster → rancher → finalise - Print Harvester / Rancher URLs and where to find passwords
Typical time: 90-150 minutes. The cluster phase (iPXE install of Harvester inside nested KVM) is the long pole.
Survive disconnects¶
tmux attach -t rodeo-harvester # session name matches the profile / lab
# Detach without stopping: Ctrl+b d
Watch progress¶
From a second shell on the host:
rodeo watch # phases + serial consoles
rodeo logs harvester1 # one node's serial log
rodeo status # VM state + VIP reachability
harvester_auto_import stays false¶
rodeo-plan.yaml sets harvester_auto_import: false on purpose. Importing Harvester into Rancher is Exercise 1. Do not import it before handing the lab to students.
Verify before students start¶
# All 3 Harvester nodes Ready
sudo rodeo ssh harvester1 -c 'export KUBECONFIG=/etc/rancher/rke2/rke2.yaml; sudo -E /var/lib/rancher/rke2/bin/kubectl get nodes'
# Rancher + Harvester APIs reachable
curl -sk https://192.168.122.9:30002/v3 | jq -r '.type'
curl -sk https://192.168.122.10/v1 | jq -r '.apiVersion'
# Only "local" in Rancher - Harvester not imported yet
curl -sk -u admin:$(grep rancher_admin_password ~/.rodeo/secrets.yaml | cut -d'"' -f2) \
https://192.168.122.9:30002/v3/clusters | jq -r '.data[].name'
External DNAT (from a laptop on the same network):
curl -sk https://<host-ip>:8443/v1 | jq -r '.apiVersion'
curl -sk https://<host-ip>:30002/v3 | jq -r '.type'
See the pre-lab checklist for the full gate.
Hand students¶
| Item | Value |
|---|---|
| Harvester UI | https://<host-ip>:8443 |
| Rancher UI | https://<host-ip>:30002 |
| Username | admin |
| Passwords | harvester_admin_password and rancher_admin_password in ~/.rodeo/secrets.yaml |
| Lab guide | https://avaleror.github.io/suse-virt-workshop/ |
Both UIs use self-signed certificates. Students must accept the browser warning.
Tear down / redeploy¶
rodeo clean --yes # destroy this lab's VMs and disks
rodeo up # fresh deploy (reuses secrets)
rodeo clean --all --yes --secrets # full host reset, wipe credentials
rodeo up # new secrets + fresh deploy
Resume a failed deploy¶
rodeo status
rodeo deploy --from cluster # resume from the failed phase
# or
rodeo deploy --force # redo every phase
Optional: dedicated data disk¶
If the host has a second disk for lab images:
# in rodeo-plan.yaml
storage:
device: /dev/nvme1n1 # verify with lsblk first
mount_point: /var/lib/libvirt/images
image_dir: /var/lib/libvirt/images
fs_type: xfs
The kvm_host phase partitions, formats, and mounts it before creating VMs.
Further reading¶
- rodeo-cli Harvester guide
- Bare-metal example
- Lab overview
- Deploy on AWS instead, no bare-metal host needed