KVM sta per Kernel-based Virtual Machine.
Come suggerisce il nome, questa è una tecnologia di virtualizzazione basata sul kernel per il sistema operativo Linux su hardware che supporta la virtualizzazione.
I sistemi operativi guest possono essere completamente virtualizzati o paravirtualizzati.
La paravirtualizzazione consente l'esecuzione di diversi sistemi operativi su un unico set di hardware utilizzando in modo efficace risorse quali processori e memoria. Nella virtualizzazione Para, il sistema operativo viene modificato per funzionare con una macchina virtuale, il che ridurrà al minimo il tempo di esecuzione necessario per eseguire operazioni altrimenti difficili da eseguire in un ambiente virtuale.
Questo è il primo articolo di una serie in corso di articoli su KVM.
1. Strumenti per la gestione delle macchine virtuali
Il pacchetto KVM fornisce qemu-kvm, uno strumento specifico per hypervisor per la gestione delle macchine virtuali.
Invece di questo strumento, puoi usare il pacchetto software noto come libvirt che è un modo più conveniente e consigliato per gestire le macchine virtuali. Questo software include una libreria API, un demone (libvirtd) e un'utilità della riga di comando (virsh).
È possibile utilizzare questo strumento libvirt per gestire qualsiasi macchina virtuale esistente in esecuzione su KVM, Xen, VMWARE ESX, ecc. L'elenco completo degli hypervisor supportati è elencato su libvirt.
Sono disponibili pochi altri strumenti che puoi utilizzare per gestire la tua VM guest.
- virt-manager (Virtual Machine Manager):uno strumento di gestione grafica per i guest VM.
- vm-install:un'utilità basata su menu basata su script che definisce un Guest VM e ne installa il sistema operativo.
- virt-viewer:un client X viewer per guest VM che supporta la crittografia TLS/SSL dell'autenticazione del certificato x509 e dell'autenticazione SASL.
2. Verifica il supporto per la virtualizzazione sul tuo hardware
Per verificare se la tua CPU supporta la virtualizzazione hardware, esegui il comando seguente.
# egrep '(vmx|svm)' /proc/cpuinfo
Se vedi vmx o svm nell'output nella sezione flag, il tuo hardware (CPU) supporta la virtualizzazione.
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc archrfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm tpr_shadow vnmi flexprioritpt vpid .
3. Installa i pacchetti KVM
Installa i pacchetti KVM utilizzando lo strumento di gestione dei pacchetti specifico della distribuzione (ad esempio, yum su RedHat e CentOS).
# yum install kvm
Dopo aver installato il pacchetto kvm principale, installa i seguenti pacchetti relativi a KVM che ti aiuteranno a gestire le VM sul tuo sistema.
# yum install qemu-kvm python-virtinst libvirt libvirt-python virt-manager libguestfs-tools
Di seguito sono riportati i pacchetti relativi a KVM installati sulla mia macchina. Il numero di versione sul tuo sistema potrebbe variare leggermente.
# rpm -qa | egrep "virt|kvm|qemu" python-virtinst-0.600.0-18.el6.noarch qemu-img-0.12.1.2-2.415.el6.x86_64 libvirt-0.10.2-29.el6.x86_64 virt-viewer-0.5.6-8.el6.x86_64 qemu-kvm-0.12.1.2-2.415.el6.x86_64 libvirt-python-0.10.2-29.el6.x86_64 virt-manager-0.9.0-19.el6.x86_64 virt-top-1.0.4-3.15.el6.x86_64 libvirt-client-0.10.2-29.el6.x86_64 gpxe-roms-qemu-0.9.7-6.10.el6.noarch virt-what-1.11-1.2.el6.x86_64
Dopo aver installato i pacchetti, si consiglia di riavviare la macchina per caricare tutti i moduli KVM e libvirt, anche se è possibile ricaricarla utilizzando il comando modprobe.
È possibile installare il sistema operativo guest utilizzando Virtul machine manager che vm-install (per SUSE Linux) e virt-install (per RedHat).
Quando il tuo display è impostato (da eccedere, ReflectionX o alcuni altri display manager), fornisce un'interfaccia grafica per creare la procedura guidata della macchina virtuale che ti guida attraverso il processo di installazione. Se il display non è impostato, ad esempio quando si collega la macchina utilizzando ssh senza X11-forwarding, vm-install offre una procedura guidata della riga di comando per configurare interattivamente un guest VM per l'installazione.
4. Prerequisito di rete per creare una macchina virtuale guest
Per impostazione predefinita, le macchine virtuali avranno accesso di rete solo ad altre macchine virtuali sullo stesso server (e all'host stesso). Se vuoi che le VM abbiano accesso alla tua VLAN, devi creare un bridge di rete sull'host come spiegato qui.
Modifica /etc/sysconfig/network-scripts/ifcfg-eth0 e aggiungi la riga "BRIDGE=br0" (assicurati di rimuovere tutti gli IP statici).
Crea il file /etc/sysconfig/network-scripts/ifcfg-br0 e aggiungi le voci come mostrato di seguito. Puoi usare statico o dhcp. Ho usato IP statico in questo caso.
DEVICE="br0" BOOTPROTO="static" IPADDR="xxx.xxx.xxx.xxx" NETMASK="255.255.255.0" ONBOOT="yes" TYPE="Bridge" NM_CONTROLLED="no"
Se stai eseguendo un firewall (come iptables), crea una regola per consentire il traffico con bridge.
5. Prerequisiti aggiuntivi per creare una macchina virtuale guest
La posizione predefinita per i file di immagine della macchina virtuale è in /var/lib/libvirt/images. Assicurati che sia disponibile uno spazio adeguato in questa directory. In caso contrario, puoi puntare il file immagine a una directory diversa durante la creazione della VM.
Abilita l'inoltro IP in /etc/sysctl.conf aggiungendo la seguente riga:
inet.ipv3.ip_forward=1
Durante la fase di test, se hai SELinux in esecuzione, disabilitalo impostando SELinux in modalità permissiva.
Riavvia il sistema dopo aver apportato le modifiche precedenti.
6. Creazione di una nuova macchina virtuale guest utilizzando virt-install
lo strumento virt-install viene utilizzato per creare la VM. Questo strumento può essere utilizzato sia in modalità interattiva che non interattiva.
Nell'esempio seguente, ho passato tutti i valori richiesti per creare una macchina virtuale come parametri della riga di comando al comando virt-install.
# virt-install \ -n myRHELVM1 \ --description "Test VM with RHEL 6" \ --os-type=Linux \ --os-variant=rhel6 \ --ram=2048 \ --vcpus=2 \ --disk path=/var/lib/libvirt/images/myRHELVM1.img,bus=virtio,size=10 \ --graphics none \ --cdrom /var/rhel-server-6.5-x86_64-dvd.iso \ --network bridge:br0
Nel comando virt-install sopra:
- n Nome della tua macchina virtuale
- descrizione Una descrizione valida sulla tua VM. Ad esempio:server delle applicazioni, server di database, server Web, ecc.
- tipo os Il tipo di sistema operativo può essere Linux, Solaris, Unix o Windows.
- os-variante Tipo di distribuzione per il tipo di os precedente. Ad esempio, per Linux, può essere rhel6, centos6, ubuntu14, suse11, fedora6 , ecc. Per Windows, può essere win2k, win2k8, win8, win7
- ariete Memoria per la VM in MB
- vcpu Numero totale di CPU virtuali per la VM.
- percorso del disco =/var/lib/libvirt/images/myRHELVM1.img,bus=virtio,size=10 Percorso in cui sono archiviati i file immagine della VM. Dimensioni in GB. In questo esempio, questo file immagine VM è 10 GB.
- grafica nessuno Questo indica a virt-install di utilizzare una console di testo sulla porta seriale della VM invece della finestra grafica VNC. Se hai impostato xmanager, puoi ignorare questo parametro.
- cdrom Indica la posizione dell'immagine di installazione. È possibile specificare il percorso di installazione NFS o http (al posto di –cdrom). Ad esempio, –location=http://.com/pub/rhel6/x86_64/
- ponte di rete:br0 Questo esempio utilizza l'adattatore con ponte br0. È anche possibile creare la propria rete su qualsiasi porta specifica anziché su un adattatore con ponte. Se si desidera utilizzare NAT, utilizzare qualcosa come di seguito per il parametro di rete con il nome della rete virtuale noto come VMnetwork1. Tutti i file di configurazione di rete si trovano in /etc/libvirt/qemu/networks/ per le macchine virtuali. Ad esempio:–rete di rete=rete VM1
7. Elenca le macchine virtuali
Puoi modificare il menu di grub con "console=tty0 console=ttyS0,115200" per visualizzare la console per il tuo schermo durante il processo di installazione nella finestra SSH. Ciò ti consentirà di installare il sistema operativo tramite l'installazione guidata. Altrimenti puoi usare il server X per la visualizzazione.
Il comando seguente visualizzerà tutte le macchine virtuali installate sul tuo sistema operativo. In questo esempio, abbiamo due macchine virtuali installate su questo sistema.
# virsh list --all Id Name State ---------------------------------------------------- 1 dev-dev-vm running 2 myRHELVM1 running
8. Modifica il file di configurazione della macchina virtuale
Dopo aver creato la VM, vedrai il file di configurazione della VM nel seguente percorso. Il nome del file di configurazione sarà il nome della VM con estensione .xml.
# ls -l /etc/libvirt/qemu/myRHELVM1.xml -rw-------. 1 root root 2109 Oct 15 12:30 /etc/libvirt/qemu/myRHELVM1.xml
Dovresti evitare di modificare questo file manualmente e utilizzare invece il comando virsh edit. Per modificare il dominio (macchina virtuale) procedi come segue:
virsh edit myRHELVM1
9. Connetti alla console VM
Per connettersi alla console della macchina virtuale utilizzare il comando seguente. Puoi usare "ctrl + ]" per uscire dalla console della macchina virtuale.
virsh console myRHELVM1
Se non hai un server X in esecuzione sul tuo host, la connessione a una console seriale di VM potrebbe essere l'unico modo per accedere a una VM se la rete non è disponibile.
La configurazione dell'accesso alla console di una VM non è diversa da un server fisico, in cui aggiungi semplicemente i parametri di avvio del kernel appropriati alla VM.
Ad esempio, per una VM RHEL (o VM CentOS), aggiungere i seguenti parametri alla riga di avvio del kernel in /etc/grub.conf e quindi riavviare la VM.
console=tty0 console=ttyS0,115200
In alternativa, puoi anche aggiungere le seguenti voci al file /etc/grub.conf.
serial --unit=0 --speed=115200 terminal --timeout=5 serial console
10. Visualizza le informazioni sulla macchina virtuale
Per visualizzare le informazioni sulla VM, utilizzare il comando seguente:
# virsh dominfo myRHELVM1 Id: 5 Name: myRHELVM1 UUID: 58083ae7-51db-50c3-64d8-bc4c49f642d0 OS Type: Linux State: running CPU(s): 2 CPU time: 207.6s Max memory: 2097152 KiB Used memory: 2097152 KiB Persistent: yes Autostart: disable Managed save: no Security model: selinux Security DOI: 0 Security label: system_u:system_r:svirt_t:s0:c698,c788 (permissive)
11. Visualizza CPU VM e utilizzo memoria
Per visualizzare la CPU della macchina virtuale e l'utilizzo della memoria, utilizzare il comando virt-top come mostrato di seguito.
# virt-top virt-top 07:14:44 - x86_64 8/8CPU 1600MHz 32094MB 3 domains, 2 active, 2 running, 0 sleeping, 0 paused, 1 inactive D:0 O:0 X:0 CPU: 0.1% Mem: 4096 MB (4096 MB by guests) ID S RDRQ WRRQ RXBY TXBY %CPU %MEM TIME NAME 5 R 0 0 1546 0 0.0 6.0 3:29.55 dev-dev-vm 8 R 0 0 1546 0 0.0 6.0 1:42.17 myRHELVM2 -
12. Arresta, riavvia o avvia la VM utilizzando virsh
Per spegnere la macchina virtuale, procedi come segue:
# virsh shutdown myRHELVM1 Domain myRHELVM1 is being shutdown
Per riavviare la VM, procedi come segue:
# virsh reboot myRHELVM1
Per avviare o accendere la macchina virtuale, procedi come segue. Una volta avviata la VM, eseguire "virsh list –all" per visualizzare tutte le VM in esecuzione.
# virsh start myRHELVM1 Domain myRHELVM1 started
Nel prossimo articolo della serie KVM, tratteremo maggiori dettagli su come modificare e manipolare le configurazioni su una singola VM.