Sett opp en lab med Proxmox

Av Torkild

Screenshot

Av og til trenger man en ganske heftig rigg for å teste ut og prøve greier. Greier som man rett og slett ikke får til å dra opp f.eks. selv på en relativt kraftig MacBook Air som jeg vanligvis bruker. Til tross for at den har 32GiB RAM er det litt i underkant til Chrome, Teams, Slack, Theia og noen virtuelle maskiner. Jobber man med Kubernetes fungerer mye greit med f.eks. Minikube. Men ofte er ikke den tilstrekkelig.

Denne artikkelen går derfor i gjennom det som trengs for å sette opp en lab med virtuelle maskiner. Kravene til laben er som følger:

  • Må kunne nås fra (.*)kontoret og ellers hvor man jobber fra
  • Virtuelle maskiner må kunne organiseres og startes opp i grupper
  • Det må være enkelt å ta sikkerhetskopier, øyeblikksbilder, samt kopiere maskiner
  • Må kunne orkestrere og kjøre f.eks. Kubernetes
  • Må være åpen kildekode

Uten å egentlig bruke særlig tid på å evaluere alternativer har jeg landet på Proxmox VE (PVE). Den oppfyller alle kravene og virker som en god løsning. Alternativer er f.eks. XCP-ng, men den virker som en lettvekter sammenlignet med Proxmox. Harvester virker også som en god løsning men ser ut til å være i overkant fokusert på Kubernetes.

Proxmox VE er en virtualiseringsplattform som kombinerer Kernel Virtual Machine (KVM) for virtuelle maskiner og Linux Container Runtime (LXC) for lettvektskonteinere i ett og samme system med et relativt intuitivt webgrensesnitt. Løsningen ser ut til å passe bra godt for lab-er og testing, da det går kjapt å opprette VM-er, nettverk, og annen infrastruktur man skulle trenge. Dette gjør det «enkelt» å simulere komplekse produksjonsmiljøer, inkludert Kubernetes-klynger. PVE er basert på Debian Bookworm og man kan derfor legge til ekstra pakker etter behov.

I webgrensenittet får man også et bash-skall om man kan bruke til å gjøre endringer på systemet. Dette er superhendig for å reprodusere oppsett da man kan skripte det meste for å sikre at det blir reproduserbart uten å måtte klikke rundt i brukergrensesnittet.

Alt etter hvilken operativsystem man installerer i VMene kan man også få et grafisk grensesnitt basert på VNC. Dette lugger litt, men kan også være svært hendig.

Forberedelser

PC-en jeg har tenkt å bruke er en gammel AMD-basert x86_64 med 48GiB RAM og 12 fysiske kjerner med hyperthreading. Så den har plenty med CPU. Men vil komme til å slite med f.eks. full pakke OpenShift/OKD som trenger minst 16GiB RAM for hver av de tre påkrevde control plane nodene. I tillegg skal man jo ha worker-noder, som gjør den faktiske jobben. Erfaringsmessig er det sjelden at tjenester trenger mye CPU, det er som regel mangel på RAM som er problemet når man setter opp applikasjoner i Kubernetes. Og dessverre er grensen på RAM absolutt, går man over hva man faktisk har får man en OOMKilled, og applikasjonen eller til og med hele noden kan få problemer. For lite CPU gjør bare at applikasjonen throttles – bremses ned – hvilket er et betydelig mindre problem. Heldigvis finnes det alternativer til full pakke OpenShift som skal utforskes etter hvert.

Dette trenger man:

  • Maskin med mye RAM og CPU (VT-x/AMD-V må være aktivert i BIOS/UEFI)
  • USB-pinne med minst 1GiB ledig plass
  • Egen disk til Proxmox og virtuelle maskiner
  • Proxmox trenger minst 16GiB i følge dokumentasjonen. I praksis en god del mindre.
  • Alt etter bruken vil man trenge 2-32GiB per virtuelle maskin
  • Router med DHCP

Jeg tar utgangspunkt i at nettverket maskina står på er på 10.0.0.0, mens Proxmox-verten er på fast IP-adresse 10.0.0.14. Jeg har tre forskjellige operativsystemer på den maskina jeg bruker, men hvis man har en maskin som dedikeres til Proxmox, trenger man ikke utføre punktene 6, 7 og 8 under installasjon for å justere på GRUB (Grand Unified Boot loader).

Installasjon

  1. Installer Proxmox på USB-pinne. Man trenger minst 1GiB ledig plass på denne. Oppskriften for macOS er litt utdatert da man ikke får lov til å kjøre dd mot USB-pinnen. Det er mye enklere å bruke balenaEtcher uansett hvilken plattform man kjører på.
  2. Sett pinnen i maskina du skal bruke som vert, skru den på, og om nødvendig gå inn i BIOS for å starte fra USB-pinnen.
  3. Følg installasjonsrutinen og velg en disk som ikke er i bruk! Jeg har forsøkt å bruke en ledig partisjon på en disk også brukt til annet, men det ser ikke ut til at det går. Proxmox tar hele disken.
  4. Når installasjonen er ferdig vil maskina starte på nytt. Den vil som forventet starte Proxmox sin GRUB.
  5. Om du hadde GRUB fra før av må du gå inn i BIOS igjen og sett den opprinnelige partisjonen med GRUB først. Reboot.
  6. Nå vil den gamle boot skjermen starte opp og man kan velge OS’et man hadde opprinnelig.
  7. Kjør sudo update-grub Dette vil legge til den nye disken med Proxmox VE. Reboot og start fra «Debian» for å starte Proxmox.
  8. Logg inn på https://10.0.0.14:8006/ som root og med passordet som ble satt ved installasjonen.

Tips
Vurder å sette Proxmox først i boot-rekkefølgen. Da kan du f.eks. bruke en bastion og derfra kjøre et lite skript for å vekke Proxmox-maskina om den ikke allerede er skrudd på.

Varselet om manglende abonnement kommer til å dukke opp hver gang du logger deg inn, men det er det bare å ignorere (evt. deaktivere). Det billigste abonnementet på €115 i året per CPU-sokkel gir tilgang til enterprise pakkedepoter som inneholder ekstra testede pakker oppdatert med CVE-fikser. Men for et laboppsett er dette neppe nødvendig.

Subscriptions

Konfigurasjon av pakkedepoter

  1. For å kunne installere noe som helst uten at det feiler, må vi gjøre noen grep. Først deaktiver enterprise repositoryer. Åpne et Bash-skall fra Datacenter > proxmox > Shell:
sed -i 's/^deb/#deb/' /etc/apt/sources.list.d/pve-enterprise.list
sed -i 's/^deb/#deb/' /etc/apt/sources.list.d/ceph.list
  1. Legg til gratis no subscription pakkekilde.
echo "deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
  1. Kjør en oppdatering av databasen.
apt update

Lag en Ubuntu server installasjon for testing

Nå som alt er på plass kan vi lage en enkel VM-konteiner for å teste. Vi kunne ha gjort alt dette fra det grafiske brukergrensesnittet. Men hvor kjekt er det ikke å kunne gjøre alt fra kommandolinja 1?

# 1. Last ned en ISO til ISO-lageret «local»
wget -P /var/lib/vz/template/iso \
  https://releases.ubuntu.com/noble/ubuntu-24.04.2-live-server-amd64.iso

# 2. Lag VM-ID 100 med 1 vCPU, 1 GiB RAM, 16 GiB disk i local-lvm
qm create 100 --name demo --memory 1024 --cores 1 --sockets 1
qm set 100 --scsihw virtio-scsi-pci --scsi0 local-lvm:16

# 3. Koble ISO på IDE-CD-stasjon og sett den som første boot
qm set 100 --ide2 local:iso/ubuntu-24.04.2-live-server-amd64.iso,media=cdrom
qm set 100 --boot order=ide2

# 4. Legg til én nettverks­adapter på standard nettverksbru vmbr0 (DHCP)
qm set 100 --net0 virtio,bridge=vmbr0

# 5. Start VM-en
qm start 100

Åpne konsollet i Proxmox og gjennomfør installasjonen. Dernest utføres:

qm set 100 --boot order=scsi0   # boote fra virtio-disk i stedet for ISO
qm set 100 --delete ide2        # fjern CD-stasjonen om ønskelig

Nå laben fra hvorsomhelst

Tailscale er en helt super VPN-løsning som både er fleksibel og er lett å bruke. Skal man nå Proxmox-maskina mens man f.eks. er på reise, kan det være greit å sette opp Tailscale på Proxmox. PS: Bruker man en kommersiell e-post adresse når man setter opp Tailscale-kontoen må man regne med å måtte betale lisens. En privat Google konto fungerer fint. Installer først Tailscale-klienten på arbeidsstasjonen om det ikke allerede gjort. Oppskriften for å installere på Debian Bookworm stemmer ikke helt for Proxmox, men det gjør denne:

# Legg inn signeringsnøkkel og pakkedepot
curl -fsSL https://pkgs.tailscale.com/stable/debian/bookworm.noarmor.gpg | tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
curl -fsSL https://pkgs.tailscale.com/stable/debian/bookworm.tailscale-keyring.list | tee /etc/apt/sources.list.d/tailscale.list
# Oppdater og installer
apt update
apt -y install tailscale
# Start applikasjonen
tailscale up

Nå må man autentisere maskina som vanlig. Og så kjøre tailscale serve --bg https+insecure://localhost:8006 for å starte Tailscale Serve i bakgrunnen. Den vi skrive ut en URL som f.eks. https://proxmox.tailad1f0.ts.net/ som man nå kan bruke til å nå Proxmox-verten. Merk at dette er ikke en offentlig adresse. Den vil kun fungere for klienter som kjører Tailscale-klienten og er logget inn i samme tailnet (eller har fått eksplisitt delingstillatelse – ja du kan dele laben din med andre!). Skru av proxyen med tailscale serve --https=443 off.

Legg til ekstra harddisk for mere plass

Proxmox vil lage seg en volume group på disken hvor den er installert. Denne vil ha følgende volumer:

Logisk volumRolle
pve-swapMellomlagring, swap for verten
pve-rootRotpartisjonen til operativsystemet
pve-data_*thin pool hvor diskene til de virtuelle maskinene vil ligge

Med thin pool kan man overprovisjonere, f.eks. sette opp tre virtuelle maskiner med 100GiB lagring hver på en 200GiB disk. Proxmox vil sette av minst 4GiB og maksimum 8GiB til swap, samt ¼ av lagringsmediets størrelse, men kun opp til 100GiB til rotvolumet. Resterende blir gitt til data-volumet (pve-data_*).

Jeg har en installert en gammel 256GiB SSD som jeg ønsker å bruke i tillegg, så den må konfigureres. Åpne et Bash-skall igjen (fra menyen til venstre: Datacenter > Proxmox > Shell) og kjør lsblk for å finne navnet til den disken vi skal bruke til lagring for VMene.

root@proxmox:~# lsblk
NAME                 MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda                    8:0    0 238.5G  0 disk 
├─sda1                 8:1    0  1007K  0 part 
├─sda2                 8:2    0     1G  0 part /boot/efi
└─sda3                 8:3    0 237.5G  0 part 
  ├─pve-swap         252:0    0     8G  0 lvm  [SWAP]
  ├─pve-root         252:1    0  69.4G  0 lvm  /
  ├─pve-data_tmeta   252:2    0   1.4G  0 lvm  
  │ └─pve-data-tpool 252:4    0 141.2G  0 lvm  
  │   └─pve-data     252:5    0 141.2G  1 lvm  
  └─pve-data_tdata   252:3    0 141.2G  0 lvm  
    └─pve-data-tpool 252:4    0 141.2G  0 lvm  
      └─pve-data     252:5    0 141.2G  1 lvm  
sdb                    8:16   0 238.5G  0 disk 
nvme0n1              259:0    0   1.8T  0 disk 
├─nvme0n1p1          259:1    0   704M  0 part 
├─nvme0n1p2          259:2    0   260M  0 part 
├─nvme0n1p3          259:3    0    16M  0 part 
├─nvme0n1p4          259:4    0   1.8T  0 part 
└─nvme0n1p5          259:5    0   796M  0 part 
nvme1n1              259:6    0 931.5G  0 disk 
├─nvme1n1p1          259:7    0   512M  0 part 
└─nvme1n1p2          259:8    0   931G  0 part 

Her ser jeg at sdb er en god kandidat(nvme0n1 og nvme1n1 brukes til de andre operativsystemene på maskina). Så den skal jeg bruke. Slenger på -ff da disken har vært brukt til annet tidligere, så jeg vi tvinge igjennom operasjonen.

pvcreate -ff /dev/sdb
vgcreate vmdata /dev/sdb
lvcreate -l 100%FREE --thinpool vmdata-thin vmdata
pvesm add lvmthin vmdata --vgname vmdata --thinpool vmdata-thin

Kontroller at disken er tilgjengelig:

root@proxmox:~# pvesm status
Name             Type     Status           Total            Used       Available        %
local             dir     active        71017632         4707908        62656504    6.63%
local-lvm     lvmthin     active       148086784         1777041       146309742    1.20%
vmdata        lvmthin     active       249810944               0       249810944    0.00%

Nå har vi plenty plass til virtuelle maskiner!

1 Riktig svar er: Veldig kjekt!

Relaterte artikler