Goal: spin up practice stands, including a bare Kubernetes cluster.
- multi-VM:
k8s-cluster-up NAME [WORKERS]— control plane + N workers, ansible inventory inclusters/NAME/inventory.ini;k8s-cluster-rmto tear down - static IPs:
dhcp-host(MAC → IP) viavirsh net-update,vm-rmremoves the reservation together with the VM - user-data profile for k8s nodes:
vm-up-k8s-node— containerd (SystemdCgroup), br_netfilter + sysctls, swap off, kubeadm/kubelet/kubectl (pkgs.k8s.io,K8S_VERSION, held);vm-upstays generic - RAM budget: guard on MemAvailable in the k8s scripts (
VM_FORCE=1to bypass); rough layout: cp + 2 workers @ 2048 MiB ≈ 6 GiB (see README) - shared VM creation path:
lib/vm.sh(vm_create),lib/net.sh(dhcp-host reservations),profiles/*.sh— cloud-config separate from the mechanics;vm-up/vm-up-k8s-nodebecame wrappers -
VM_HOSTNAME: libvirt domain name separate from the guest hostname - KTHW stand:
kthwprofile (no containerd/kubeadm,manage_etc_hosts: false,ip_forward),kthw-stand-up/kthw-stand-rm— 4 machines to the lab 01 spec,machines.txtinclusters/NAME/ - kubeadm init/join: ansible playbook on top of inventory.ini (CNI, join tokens) — manual for now
- KTHW run-through: the tutorial walked end to end on the stand, all thirteen labs, by hand. The boundary holds — the stand hands over machines, lab 03 stays manual, and nothing in labs 02–13 needed the stand changed. Byproduct: 768 MiB and a 10G disk per node are enough for the whole run (see README)