CODECAVE
Tempo di lettura: 3 min

Template di VM Proxmox e Cloud-Init

Template di macchine virtuali con Proxmox e Cloud-Init

Nel mondo della virtualizzazione efficienza e automazione sono tutto. È qui che entra in gioco Proxmox Virtual Environment (VE), che offre una soluzione solida per gestire senza fatica le macchine virtuali (VM). Una delle funzionalità più interessanti di Proxmox è la possibilità di usare template di macchine virtuali insieme a Cloud-Init: il deployment si semplifica e diventa fluido come nel cloud. Vediamo come funziona.

Che cos'è Proxmox?

Proxmox è una piattaforma di virtualizzazione gratuita e open source, quindi chiunque può usarla o modificarla senza costi. È una specie di cassetta degli attrezzi che ti permette di creare più computer isolati (le macchine virtuali) su una sola macchina fisica. Queste macchine virtuali possono eseguire in parallelo più sistemi operativi, come Windows o Linux, il che le rende adatte a test, sviluppo e persino ambienti di produzione.

Proxmox è il gestore di questi ambienti virtuali. Si basa su una tecnologia chiamata KVM (kernel-based virtual machine), che assicura a ogni macchina virtuale un funzionamento regolare senza interferire con le altre. Proxmox sa inoltre gestire i cosiddetti container tramite LXC (Linux Containers), ancora più leggeri delle VM e perfetti per eseguire singole applicazioni con un overhead minimo.

Puoi anche gestire le tue VM e i tuoi container dal browser. L'interfaccia web è pensata per essere semplice da usare, così anche chi si avvicina per la prima volta alla virtualizzazione riesce a partire senza troppe difficoltà.

Che cosa sono i template di VM di Proxmox?

I template di VM di Proxmox sono in sostanza macchine virtuali già configurate che fanno da modello per creare nuove istanze. Comprendono il sistema operativo, il software installato e le configurazioni di sistema. Il bello dei template è che fanno risparmiare tempo e garantiscono coerenza tra un deployment e l'altro. Puoi creare nuove VM in pochi istanti, senza ripetere ogni volta l'intera procedura di installazione e configurazione.

Il ruolo di Cloud-Init

Cloud-Init è un pacchetto versatile che supporta diverse distribuzioni e si occupa della configurazione iniziale di un'istanza VM, come la configurazione di rete e la distribuzione delle chiavi SSH. Al primo avvio della VM, Cloud-Init applica le impostazioni predefinite e permette così un provisioning delle VM completamente automatico https://pve.proxmox.com/wiki/Cloud-Init_Support.

Unire i template di Proxmox a Cloud-Init

Integrare Cloud-Init con i template di VM di Proxmox ti dà il meglio dei due mondi. Ecco come sfruttare questa combinazione a tuo vantaggio:

Passaggio 1: preparare il template

Parti preparando la tua VM con la configurazione che desideri. Installa il sistema operativo e tutti i pacchetti necessari, Cloud-Init compreso. Quando la VM è pronta, convertila in un template: sarà la base delle VM future.

Qui sotto trovi lo script che usiamo per creare il template:

#! /bin/bash

# Installa in Proxmox una VM Ubuntu con Cloud-Init abilitato

# Scarica la Ubuntu Cloud Image (Ubuntu 22.04 cloudimg)
wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img

# Installa qemu-guest-agent nella Ubuntu Cloud Image
# Il pacchetto libguestfs-tools deve essere installato sul sistema su cui viene modificata la cloudimg di Ubuntu.
apt-get update
apt-get install libguestfs-tools

# Questo passaggio installa qemu-guest-agent nella cloud image di Ubuntu tramite virt-customize.
virt-customize -a jammy-server-cloudimg-amd64.img --install qemu-guest-agent

# Installa git
virt-customize -a jammy-server-cloudimg-amd64.img --install git

# Imposta le variabili d'ambiente. Modificale secondo le tue esigenze.
export STORAGE_POOL="DATA"
export VM_ID="1000"
export VM_NAME="jammy-template"

# Crea l'immagine della VM Proxmox a partire dalla Ubuntu Cloud Image.
qm create $VM_ID --name $VM_NAME --memory 2048 --net0 virtio,bridge=vmbr2 --scsihw virtio-scsi-pci
qm set $VM_ID --scsi0 $STORAGE_POOL:0,import-from=/root/jammy-server-cloudimg-amd64.img

# Crea il disco Cloud-Init e configura il boot.
qm set $VM_ID --ide2 $STORAGE_POOL:cloudinit
qm set $VM_ID --boot order=scsi0
qm set $VM_ID --serial0 socket --vga serial0
# qm resize $VM_ID scsi0 +20G

# Converti la VM in template
qm template $VM_ID

# Pulizia
rm jammy-server-cloudimg-amd64.img

Passaggio 2: creare VM dal template

Con il template pronto, puoi creare rapidamente dei linked clone. Questi cloni sono leggeri e condividono l'immagine di base con il template, quindi il deployment è velocissimo. Prima di avviare la nuova VM, configura la rete e le chiavi SSH dall'interfaccia di Proxmox.

Passaggio 3: personalizzare con Cloud-Init

Quando avvii una VM creata dal template, entra in gioco Cloud-Init, che legge i dati di configurazione da un'immagine ISO collegata alla VM come CD-ROM. Questi dati comprendono le impostazioni di rete, gli account utente e le chiavi SSH. Proxmox genera automaticamente l'immagine ISO e Cloud-Init applica le impostazioni al primo avvio.

I passaggi 2 e 3 li eseguiamo con Terraform. In questo modo il processo diventa molto più rapido quando devi cambiare qualche parametro del template e creare più macchine identiche contemporaneamente.

Buone pratiche

  • Autenticazione con chiave SSH: per ragioni di sicurezza conviene usare le chiavi SSH al posto delle password. Proxmox può conservare le password cifrate, ma le chiavi restano l'alternativa più sicura.
  • Console seriale: molte immagini Cloud-Init si appoggiano a una console seriale, requisito indispensabile per OpenStack. Assicurati che il tuo template usi la console seriale come display.
  • Configurazione personalizzata: molte distribuzioni offrono immagini Cloud-Init pronte all'uso, ma creare la tua ti garantisce di sapere esattamente che cosa contiene, e la rende più facile da personalizzare in seguito.

Conclusioni

I template di VM di Proxmox uniti a Cloud-Init offrono un modo potente, efficiente e automatizzato di gestire il deployment delle macchine virtuali. Questa sinergia non solo fa risparmiare tempo, ma garantisce anche che ogni VM sia configurata in modo coerente con i tuoi standard.

Se vuoi approfondire, ti consiglio di partire dalla documentazione ufficiale di Proxmox e dai forum della community, dove trovi guide dettagliate e supporto

Buona virtualizzazione!