Kernel-based Virtual Machine o KVM, (en español, Máquina virtual basada en el núcleo) es una solución para implementar virtualización completa con Linux. Está formada por un módulo del núcleo (con el nombre kvm.ko) y herramientas en el espacio de usuario, siendo en su totalidad software libre. El componente KVM para el núcleo está incluido en Linux desde la versión 2.6.20. KVM permite ejecutar máquinas virtuales utilizando imágenes de disco que contienen sistemas operativos sin modificar. Cada máquina virtual tiene su propio hardware virtualizado: una tarjeta de red, discos duros, tarjeta gráfica, etc. KVM fue creado, y está mantenido, por Qumranet.
Requisitos:
Procesador x86, o x86_64, con soporte para virtualización. La tecnología de virtualización recibe la denominación VT en Intel y SVM en AMD.2 KVM puede ejecutar huéspedes Linux/Unix/Windows de 32 o 64 bits
Estado actual de desarrollo:
KVM utiliza una versión modificada de QEMU como front-end. Se está trabajando para utilizar más características de la Virtualization Technology presente en las últimas CPUs de Intel (Core 2 Duo E6300 en adelante para equipos de escritorio y Core 2 Duo T5600 y superiores para equipos portátiles) y AMD. Se han realizado pruebas de rendimiento con Xen (utilizando virtualización hardware en lugar de paravirtualización) y, para algunas cargas de trabajo, ha resultado ser más rápido. Para otras, no tanto.4 Una de las características que KVM posee es el «overcommit» que es el uso de memoria excediendo aún la memoria física del host.
Verificaciones de hardware previo a la instalación:
No todos los equipos soportan virtualización por hardware (es imprescindible para tener buen desempeño de KVM Server). Para verificar que el equipo soporta debe ejecutarse el comando:
< egrep -c '(vmx|svm)' /proc/cpuinfo
Y devolver un valor 1 o superiosr Se debe verificar que la virtualización este habilitada desde el bios. Es conveniente virtualizar en equipos con soporte a 64bit ya que permiten administrar procesos de mayor tamaño, que es uno de los elementos que van a limitar a la máquinas virtuales. Para validar si el equipo soporta kernels de 64bits.
< egrep -c ' lm ' /proc/cpuinfo
Debe devolver un valor igual o mayor a 1.
Procedimiento:
El primer paso a realizar es actualizar el sistema.
< sudo aptitude update < sudo aptitude safe-upgrade
Y a continuación se deben instalar los siguientes paquetes.
< sudo aptitude install kvm libvirt-bin ubuntu-vm-builder bridge-utils virt-manager virt-viewer
Finalizada la instalación de los paquetes, el usuario se debe volver a loguear para que la nueva sesión pertenezca al grupo
Configuración de Red:
Partiendo de un archivo original «/etc/network/interfaces» ( Configurado acorde a la necesidad de la red local )
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.21.150 network 192.168.21.0 netmask 255.255.255.0 broadcast 192.168.21.255 gateway 192.168.21.1
Se configura el «Bridge» (puente) para que sea utilizado por las máquinas virtuales. Recuerde adaptar eso a las necesidades de su red.
auto lo iface lo inet loopback auto br iface br0 inet static address 192.168.21.150 network 192.168.21.0 netmask 255.255.255.0 broadcast 192.168.21.255 gateway 192.168.21.1 bridge_ports eth0 bridge_fd 9 bridge_hello 2 bridge_maxage 12 bridge_stp off
Crear una Máquina Virtual: Gui:
Consola:
< virt-install \
--connect qemu:///system \
--name=www \
--hvm \
--ram 512 \
--disk /var/vms/www.img,size=20 \
--network bridge=br0 \
--cdrom=/var/lib/libvirt/images/isos/ubuntu-12.04.2-server-amd64.iso \
--vnc \
--noautoconsole \
--os-type=linux \
--os-variant=ubuntuprecise
El sistema de archivos QCOW2 permite generar snapshots de las máquinas virtuales, pero el formato RAW directo es más rápido.
< virt-install \ --connect qemu:///system \ --name=www \ --hvm \ --ram 512 \ --disk /var/vms/www.img,format=qcow2,size=20 \ --network bridge=br0 \ --cdrom=/var/lib/libvirt/images/isos/ubuntu-12.04.2-server-amd64.iso \ --vnc \ --noautoconsole \ --os-type=linux \ --os-variant=ubuntuprecise
Para imprimir en pantalla la lista de variantes de sistemas operativos optimizados se debe ejecutar:
< virt-install --os-variant list
Administración:
Consola: Con el comando virsh podemos ejecutar acciones sobre las máquinas virtuales:
< virsh > Welcome to virsh, the virtualization interactive terminal. > > Type: 'help' for help with commands > 'quit' to quit Los comandos básicos
- autostart [NombreHuésped] -> Marca al huésped para ser iniciado automáticamente usando se inicia el anfitrión.
- define [ArchivoDefinicion] -> Actualiza o incorpora la configuración del huésped cuando se modifica el xml que lo define (/etc/libvirt/qemu/huesped.xml)
- destroy [NombreHuésped] -> Apaga el huésped desconectandolo (equivalente a tirar el cable de alimentación)
- list -> lista los huespedes registrados en el servidor.
- shutdow [NombreHuésped] -> apaga el huésped amablemente
- start [NombreHuésped] -> prende el huésped
LVM para los discos virtuales (avanzado):
Si se están usando volúmenes lógicos para los discos, primero se debe listar los grupos disponibles y luego crear el volumen lógico.
El comando vgdisplay lista los grupos de volumenes disponibles en el servidor.
< vgdisplay --- Volume group --- VG Name vkvms System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 1 Act PV 1 VG Size 3.56 TiB PE Size 4.00 MiB Total PE 933168 Alloc PE / Size 12800 / 50.00 GiB Free PE / Size 920368 / 3.51 TiB VG UUID Bef5NJ-FLy2-jGfj-ZN8m-ERAE-5DhH-qDrzAV
Se procede a crear el volumen lógico (LV) (voy a crear un disco para un motor de base de datos) con el mismo nombre que va a llevar la máquina «virtualmysql-mmsx-02» dentro del grupo de volúmenes «vkvms». La capacidad asignada a este LV es de 50Gb.
< lvcreate -n mysql-mmsx-02 -L 50g vkvms
Verificamos que el volumen lógico este disponible.
< lvdisplay --- Logical volume --- LV Name /dev/vkvms/mysql-mmsx-02 VG Name vkvms LV UUID MjCXIx-ocn2-Bk9l-uPSB-GOf5-7M5A-bRA80t LV Write Access read/write LV Status available # open 0 LV Size 50.00 GiB Current LE 12800 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:0
Para crear una máquina virtual con el volumen lógico como disco (se debe utilizar la ruta que muestra el comando lvdisplay) se debe ejecutar el siguiente comando:
< virt-install \ --connect qemu:///system \ --name=mysql-mmsx-02 \ --hvm \ --ram 2048 \ --disk /dev/vkvms/mysql-mmsx-02 \ --network bridge=br0 \ --cdrom=/var/lib/libvirt/images/isos/ubuntu-12.04.2-server-amd64.iso \ --vnc \ --noautoconsole \ --os-type=linux \ --os-variant=ubuntuprecise