Virtualizzazione

Cos'è KVM?

Conosciuto anche come: Kernel-based Virtual Machine
Definizione

KVM is full hardware virtualisation built into the Linux kernel, giving each guest its own kernel and hardware-enforced isolation from other tenants. Because a KVM guest runs its own kernel, it can load kernel modules, run non-Linux operating systems, use real swap and support nested virtualisation.

Perché KVM è importante

Poiché un guest KVM esegue il proprio kernel, può caricare moduli del kernel, eseguire sistemi operativi non Linux, utilizzare swap reale e supportare la virtualizzazione annidata. La memoria allocata a un guest KVM è realmente riservata, che è la differenza pratica rispetto alla virtualizzazione basata su container.

KVM in pratica

Quando gestisci un server KVM, la prima cosa che controlli è /proc/cpuinfo nell'ospite—se non corrisponde ai flag dell'host, probabilmente stai vedendo scorciatoie paravirtualizzate, non KVM completo. Imposti l'allocazione di memoria con prenotazioni reali: l'overcommit farà scattare l'OOM killer dell'ospite mentre l'host sembra inattivo. Se configuri male la virtualizzazione annidata, perdi il paging assistito da hardware e gli ospiti girano a una frazione della velocità. Sbagliare ti costa prestazioni che non puoi recuperare senza un riavvio.

Errori comuni su KVM

La gente presume che KVM sia uguale a OpenVZ o LXC perché entrambi usano il kernel Linux. La correzione è che KVM dà a ogni ospite il proprio kernel, mentre i container condividono il kernel dell'host. Puoi caricare moduli del kernel ed eseguire sistemi operativi non Linux solo su KVM. L'isolamento con namespace condiviso non è imposto dall'hardware.

KVM — domande frequenti

Cosa significa KVM per le prestazioni?

La virtualizzazione hardware di KVM significa che ogni ospite ha il proprio kernel, quindi le prestazioni sono quasi native per CPU e memoria. La memoria è realmente prenotata, non condivisa. Puoi aspettarti un throughput prevedibile e isolato rispetto ai container.

Posso eseguire Windows su KVM?

Sì, un ospite KVM esegue il proprio kernel, quindi può eseguire sistemi operativi non Linux come Windows. Dovrai caricare un ISO e collegare una console VNC. Una licenza Windows Server è disponibile come extra opzionale in alcune regioni.

Altro da virtualizzazione

OpenVZ
OpenVZ è una virtualizzazione basata su container in cui ogni istanza condivide il kernel dell'host, quindi i guest non possono caricare moduli del kernel o eseguire un sistema operativo diverso.
LXC
LXC è una containerizzazione nativa di Linux che isola i processi con namespace e cgroups condividendo il kernel dell'host.
Hypervisor
Un hypervisor è il livello software che crea ed esegue macchine virtuali, allocando CPU fisica, memoria e I/O tra di esse.
Virtualizzazione annidata
La virtualizzazione annidata consente a una macchina virtuale di eseguire a sua volta macchine virtuali, esponendo le estensioni di virtualizzazione del processore al guest.
vCPU
Una vCPU è un processore virtuale presentato a un guest, supportato da tempo di pianificazione su un core o thread fisico.
cloud-init
cloud-init è il meccanismo standard per configurare una macchina virtuale al primo avvio, usando metadati forniti dalla piattaforma.