Detto questo, proviamo a configurare il nostro hypervisor KVM su un server Debian 9 .
Idealmente, avrai bisogno di un'installazione pulita della tua distribuzione Linux preferita su una macchina (non una VM) che ha una CPU abbastanza moderna. Le CPU Intel più moderne supportano le estensioni VT-X e, allo stesso modo, AMD ha le sue estensioni AMD-V. Queste estensioni sono "miglioramenti" costruiti proprio nel silicio della CPU che consente una virtualizzazione più veloce e più sicura. Devi abilitare queste estensioni dall'interno del menu BIOS/UEFI della scheda madre. Fare riferimento al manuale della scheda madre per ulteriori informazioni.
Se non vuoi imbronciare la tua workstation Linux perfettamente funzionante, puoi usare una macchina virtuale nel cloud per eseguire questi esperimenti. DigitalOcean, ad esempio, offre macchine virtuali che ha nidificato la virtualizzazione abilitata. Ciò consente di eseguire VM all'interno della VM ospitata dal cloud (questa è nota come virtualizzazione nidificata). Ovviamente, questo sarà un modo molto inefficiente per eseguire praticamente un hypervisor, ma come esperimento andrà bene. Assicurati di ottenere almeno 4 GB di memoria e più di 2 CPU.
Una volta che hai abilitato le dette estensioni, puoi verificarlo eseguendo LSCPU e cercando la voce di virtualizzazione:
$ LSCPU
.. .
Virtualizzazione: VT-X
.. .
Ora che abbiamo le estensioni abilitate il tempo di salire ulteriormente nello stack.
Installazione di KVM e QEMU
KVM (o macchina virtuale basata sul kernel) è costituito da alcuni moduli del kernel Linux che trarranno vantaggio dalle estensioni della CPU che abbiamo abilitato in precedenza. QEMU, d'altra parte, è costituito da un sacco di programmi Userland che ci fornisce capacità di emulazione. Come software autonomo, QEMU può essere utilizzato per eseguire programmi da un'architettura, come ARM, su un'altra come X86_64 e viceversa. Può essere utilizzato per eseguire qualsiasi cosa da un singolo file binario a un sistema operativo completo.
Ovviamente lo useremo solo per virtualizzare i sistemi operativi X86_64 sulla piattaforma X86_64. E per questo abbiamo bisogno di un solo pacchetto:
$ sudo apt install qemu-kvm
È possibile verificare che il pacchetto abbia caricato tutti i moduli richiesti, eseguendo:
$ lsmod | grep kvm
KVM_INTEL 200704 0
KVM 598016 1 KVM_INTEL
IrqByPass 16384 1 kvm
Questo è tutto ciò di cui hai bisogno, teoricamente. Ma presto ti renderai conto che è pratico. Le macchine virtuali sono enormemente complesse e abbiamo bisogno di un wrapper software per gestire tutte le varie richieste come networking, gestione del filesystem, ecc. In un modo abbastanza automatizzato (e scalabile). Per fare ciò abbiamo bisogno della libreria/demone di virtualizzazione libvirt.
Installazione di libvirt
Libvirt è una parte per antonomasia del tuo stack di virtualizzazione. Il demone libvirtd esegue i servizi relativi alla virtualizzazione in background. Servizi che ascoltano richieste come "Crea una VM", "Distruggi una VM", "Crea una rete", ecc. E le eseguono in esse utilizzando le utility di base Linux come Binarie QEMU, iptables, ecc.
Libvirt è molto generalizzato e può essere utilizzato per gestire ospiti KVM, contenitori LXC e stack di virtualizzazione XEN. Per ora ci concentreremo su Libvirt per gli ospiti KVM. Libvirtd espone un'API che può essere consumata da applicazioni GUI come virt-manager o ovirt o strumenti di comando come virt-install, virsh, ecc. Possiamo scrivere anche i nostri clienti personalizzati che utilizzano la stessa API standard. Useremo gli strumenti di comando, come virsh e virt-install, in modo da mantenere le cose standardizzate.
Installiamo tutti questi strumenti:
$ APT Installa Libvirt-Clienti Libvirt-Daemon-System Virtinst
Avremo anche bisogno di un altro pacchetto LibGuestfs-Tools, per aiutarci a modificare o modificare i dischi e i filesystem di VM Guest VM.
Grande! Ora abbiamo installato l'intero stack e sappiamo come viene stabilita l'architettura. Per utilizzare libvirt (e strumenti correlati) aggiungi il tuo utente ai gruppi Libvirt-Qemu e Libvirt.
$ sudo usermod -ag libvirt
$ sudo usermod -ag libvirt -qemu
O eseguire i comandi come utente root.
Virsh e avvio della rete predefinita
L'utilità della riga di comando virsh è qualcosa che userai molto, quando gestisci le VM. Puoi semplicemente digitare Virsh e cadere nell'interfaccia della riga di comando VIRSH o digitare Virsh [Opzioni] dalla shell normale. Passa attraverso l'output dell'aiuto di Virsh ogni volta che sei bloccato con alcune operazioni relative alla VM.
Il primo comando VIRSH che useremo invocherà la rete predefinita a cui una VM può connettersi:
$ VIRSH Net-Autostart Default
$ VIRSH Net-Start Default
Questo avverrà la rete predefinita e si assicurerà che venga avviata automaticamente quando l'host si riavvia. Per controllare i dettagli su questa rete predefinita, utilizzare il comando:
$ virsh net net-dumpxml predefinitopredefinito 3D723DC6-49A4-4F73-BF6D-623D6B46B099
Il file XML può mostrarti la gamma di possibili indirizzi IP e il modo in cui comunicheranno con il mondo esterno. Fondamentalmente, il traffico arriverà da loro tramite un NAT e non faranno parte della rete esterna del tuo host. È possibile utilizzare il networking a bridge per esporre ogni VM alla LAN della macchina host.
Per avviare una macchina virtuale
Per avviare una macchina virtuale abbiamo bisogno di un supporto di installazione (come l'installazione ISO per qualsiasi sistema operativo) e quante CPU e quanta memoria deve essere assegnata alla VM e se ha bisogno di VNC. Questo passaggio è dove puoi davvero apprezzare un programma di installazione della GUI come Virt-Manager, tuttavia, lo faremo usando un comando Virt-Install piuttosto complesso.
Mi piace mantenere tutti i miei supporti di avvio AT/var/lib/libvirt/boot e tutte le macchine virtuali e il loro disco rigido virtuale AT/var/lib/libvirt/immagini (la posizione predefinita) questo semplifica l'organizzazione.
$ cd/var/lib/libvirt/boot
$ wget http: // rilasci.Ubuntu.com/18.04.2/Ubuntu-18.04.2-Desktop-AMD64.iso
Il comando sopra recupera Ubuntu desktop iso, puoi ottenere altrettanto facilmente centesimi o qualsiasi altra distribuzione che desideri.
Per creare una nuova VM e per avviarlo in esecuzione:
$ Virt-Install --virt-type kvm \
--nome myvm \
--Memoria 2048 --vcpus = 2 \
--cdrom/var/lib/libvirt/boot/ubuntu-18.04.2-Desktop-AMD64.iso \
--Dimensione del disco = 40 \
--Grafica vnc, ascolta = 0.0.0.0, porta = 5900 \
--noautoconsole
Il comando sopra è, in effetti, complicato. Suggerisco di salvare questi comandi nei file di testo ed eseguire quelli come script eseguibili ogni volta che si crea una nuova VM. La maggior parte dei parametri come virt-type e virt-name sono piuttosto autoesplicativi. Sono solo noiosi a scrivere.
L'ultima opzione per il display VNC avvia un server VNC e consentirebbe di avere l'accesso alla console al VM in remoto, collegandosi alla porta 5900 dell'host. Apri un client VNC sul desktop e vai all'IP dell'host KVM alla porta 5900. Assicurati di raggiungere l'IP dell'host e non l'IP della VM. Il tuo VNC si connetterà all'uscita video della VM e puoi procedere con l'installazione.
Dove al prossimo?
Da qui in poi puoi provare a fare una pausa, fermando ed eliminando le VM. È inoltre possibile modificare l'infrastruttura sottostante aggiungendo pool per l'archiviazione e configurazione di reti bridge. Tutti i file di configurazione, per singoli VM, interfacce di rete e pool di archiviazione sono archiviati su/etc/libvirt/e/etc/libvirt/qemu.
A volte dovrai eliminare fisicamente i file del disco rigido salvati a/lib/libvirt/immagini anche dopo aver rimosso la VM da libvirt. Per automatizzare ulteriormente le cose, prova a importare immagini QCOW2 che la maggior parte delle distribuzioni Linux come Ubuntu e CentOS. Questi hanno preinstallato il sistema operativo.
L'impostazione di questo non è affatto facile come la configurazione di VirtualBox e il motivo dietro questo è molteplici. La maggior parte dello stack è complicata perché è progettata per essere modulare e altamente scalabile. Non fa alcun presupposti su dove stai eseguendo la VM. L'ambiente può essere un desktop personale o un data center. Lavorare con una GUI può aiutare a ridurre questa complessità in una certa misura. Tuttavia, questi sistemi sono progettati per funzionare con un'API REST per connettersi ai sistemi di fatturazione della tua organizzazione, ai sistemi di monitoraggio, ecc. Non sono quasi mai toccati da un essere umano dopo essere stati schierati.
Detto questo, l'automazione è il nome del gioco con Libvirt e QEMU-KVM. Scopri attraverso la documentazione ufficiale e scrivi il tuo fantastico script per far girare una flotta di VM e farci sapere se hai trovato utile questo tutorial.