KVM significa máquina virtual basada en kernel.
Como sugiere el nombre, se trata de una tecnología de virtualización basada en kernel para el sistema operativo Linux en hardware compatible con la virtualización.
Los sistemas operativos invitados pueden virtualizarse por completo o paravirtualizarse.
La paravirtualización permite que varios sistemas operativos se ejecuten en un conjunto de hardware mediante el uso efectivo de recursos como procesadores y memoria. En la Para virtualización, el sistema operativo se modifica para que funcione con una máquina virtual, lo que minimizará el tiempo de ejecución necesario para realizar las operaciones que, de otro modo, serían difíciles de ejecutar en un entorno virtual.
Este es el primer artículo de una serie continua de artículos sobre KVM.
1. Herramientas para administrar máquinas virtuales
El paquete KVM proporciona qemu-kvm, una herramienta específica de hipervisor para administrar máquinas virtuales.
En lugar de esta herramienta, puede usar el paquete de software conocido como libvirt, que es una forma más conveniente y recomendada de administrar máquinas virtuales. Este software incluye una biblioteca API, un demonio (libvirtd) y una utilidad de línea de comandos (virsh).
Puede usar esta herramienta libvirt para administrar cualquier máquina virtual existente que se ejecute en KVM, Xen, VMWARE ESX, etc. La lista completa de hipervisores compatibles se encuentra en libvirt.
Hay algunas otras herramientas disponibles que puede usar para administrar su máquina virtual invitada.
- virt-manager (Administrador de máquinas virtuales):una herramienta de administración gráfica para invitados de VM.
- vm-install:una utilidad impulsada por menús basada en secuencias de comandos que define un invitado de VM e instala su sistema operativo.
- virt-viewer:un cliente de visor X para invitados de VM que admite el cifrado TLS/SSL de autenticación de certificado x509 y autenticación SASL.
2. Compruebe el soporte de virtualización en su hardware
Para verificar si su CPU admite la virtualización de hardware, ejecute el siguiente comando.
# egrep '(vmx|svm)' /proc/cpuinfo
Si ve vmx o svm en la salida bajo la sección de banderas, entonces su hardware (CPU) admite la virtualización.
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. Instalar paquetes KVM
Instale paquetes KVM utilizando la herramienta de administración de paquetes específica de su distribución (por ejemplo, yum en RedHat y CentOS).
# yum install kvm
Una vez que instale el paquete kvm principal, instale los siguientes paquetes relacionados con KVM que lo ayudarán a administrar las máquinas virtuales en su sistema.
# yum install qemu-kvm python-virtinst libvirt libvirt-python virt-manager libguestfs-tools
Los siguientes son los paquetes relacionados con KVM que están instalados en mi máquina. El número de versión de su sistema puede variar ligeramente.
# 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
Después de instalar los paquetes, se recomienda reiniciar su máquina para cargar todos los módulos KVM y libvirt, aunque puede volver a cargarlos usando el comando modprobe.
Puede instalar el sistema operativo invitado mediante el administrador de máquinas virtuales, que incluye vm-install (para SUSE Linux) y virt-install (para RedHat).
Cuando su pantalla está configurada (por Exceed, ReflectionX o algunos otros administradores de pantalla), proporciona una interfaz gráfica para crear un asistente de máquina virtual que lo guía a través del proceso de instalación. Si la pantalla no está configurada, es decir, cuando se conecta la máquina mediante ssh sin reenvío X11, vm-install ofrece un asistente de línea de comandos para configurar de forma interactiva una máquina virtual invitada para la instalación.
4. Requisito previo de red para crear una VM invitada
De forma predeterminada, las máquinas virtuales solo tendrán acceso a la red a otras máquinas virtuales en el mismo servidor (y al propio host). Si desea que las máquinas virtuales tengan acceso a su VLAN, debe crear un puente de red en el host como se explica aquí.
Edite /etc/sysconfig/network-scripts/ifcfg-eth0 y agregue la línea "BRIDGE=br0" (asegúrese de eliminar cualquier IP estática).
Cree el archivo /etc/sysconfig/network-scripts/ifcfg-br0 y agregue las entradas como se muestra a continuación. Puede usar estático o dhcp. Usé IP estática en este caso.
DEVICE="br0" BOOTPROTO="static" IPADDR="xxx.xxx.xxx.xxx" NETMASK="255.255.255.0" ONBOOT="yes" TYPE="Bridge" NM_CONTROLLED="no"
Si está ejecutando un firewall (como iptables), cree una regla para permitir el tráfico en puente.
5. Requisitos previos adicionales para crear una VM invitada
La ubicación predeterminada para los archivos de imagen de VM se encuentra en /var/lib/libvirt/images. Asegúrese de que haya suficiente espacio disponible en este directorio. De lo contrario, puede apuntar el archivo de imagen a un directorio diferente durante la creación de la VM.
Habilite el reenvío de IP en /etc/sysctl.conf agregando la siguiente línea:
inet.ipv3.ip_forward=1
Durante la fase de prueba, si tiene SELinux ejecutándose, desactívelo configurando SELinux en modo permisivo.
Reinicie el sistema después de realizar los cambios anteriores.
6. Creación de una nueva máquina virtual invitada mediante virt-install
La herramienta virt-install se utiliza para crear la máquina virtual. Esta herramienta se puede utilizar tanto en modo interactivo como no interactivo.
En el siguiente ejemplo, pasé todos los valores necesarios para crear una máquina virtual como parámetros de línea de comandos 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
En el comando virt-install anterior:
- n Nombre de su máquina virtual
- descripción Alguna descripción válida sobre su máquina virtual. Por ejemplo:servidor de aplicaciones, servidor de base de datos, servidor web, etc.
- tipo-OS El tipo de SO puede ser Linux, Solaris, Unix o Windows.
- variante OS Tipo de distribución para el tipo de sistema operativo anterior. Por ejemplo, para Linux, puede ser rhel6, centos6, ubuntu14, suse11, fedora6, etc. Para Windows, puede ser win2k, win2k8, win8, win7
- carnero Memoria para la máquina virtual en MB
- vcpu Número total de CPU virtuales para la máquina virtual.
- ruta del disco =/var/lib/libvirt/images/myRHELVM1.img,bus=virtio,size=10 Ruta donde se almacenan los archivos de imagen de VM. Tamaño en GB. En este ejemplo, este archivo de imagen de VM tiene 10 GB.
- gráficos ninguno Esto le indica a virt-install que use una consola de texto en el puerto serial de la VM en lugar de la ventana gráfica de VNC. Si tiene configurado xmanager, puede ignorar este parámetro.
- cd-rom Indica la ubicación de la imagen de instalación. Puede especificar la ubicación de instalación de NFS o http (en lugar de –cdrom). Por ejemplo, –ubicación=http://.com/pub/rhel6/x86_64/
- puente de red:br0 Este ejemplo utiliza el adaptador en puente br0. También es posible crear su propia red en cualquier puerto específico en lugar de un adaptador en puente. Si desea usar NAT, use algo como a continuación para el parámetro de red con el nombre de red virtual conocido como VMnetwork1. Todos los archivos de configuración de red se encuentran en /etc/libvirt/qemu/networks/ para las máquinas virtuales. Por ejemplo:–red red=VMnetwork1
7. Lista de máquinas virtuales
Puede editar el menú de grub con "console=tty0 console=ttyS0,115200" para mostrar la consola en su pantalla durante el proceso de instalación en su ventana SSH. Esto le permitirá instalar el sistema operativo a través de la instalación guiada. De lo contrario, puede usar el servidor X para la visualización.
El siguiente comando mostrará todas las máquinas virtuales que están instaladas en su sistema operativo. En este ejemplo, tenemos dos máquinas virtuales instaladas en este sistema.
# virsh list --all Id Name State ---------------------------------------------------- 1 dev-dev-vm running 2 myRHELVM1 running
8. Editar archivo de configuración de máquina virtual
Después de crear la VM, verá el archivo de configuración de la VM en la siguiente ubicación. El nombre del archivo de configuración será el nombre de la VM con extensión .xml.
# ls -l /etc/libvirt/qemu/myRHELVM1.xml -rw-------. 1 root root 2109 Oct 15 12:30 /etc/libvirt/qemu/myRHELVM1.xml
Debe evitar editar este archivo manualmente y, en su lugar, utilizar el comando virsh edit. Para editar el dominio (máquina virtual) haga lo siguiente:
virsh edit myRHELVM1
9. Conéctese a la consola de máquina virtual
Para conectarse a la consola de la máquina virtual use el siguiente comando. Puede usar "ctrl + ]" para salir de la consola de VM.
virsh console myRHELVM1
Si no tiene un servidor X ejecutándose en su host, conectarse a una consola serie de VM podría ser la única forma de iniciar sesión en una VM si la red no está disponible.
Configurar el acceso a la consola de una VM no es diferente a un servidor físico, donde simplemente agrega los parámetros de arranque del kernel adecuados a la VM.
Por ejemplo, para una VM RHEL (o VM CentOS), agregue los siguientes parámetros a la línea de inicio del kernel en /etc/grub.conf y luego reinicie la VM.
console=tty0 console=ttyS0,115200
Como alternativa, también puede agregar las siguientes entradas al archivo /etc/grub.conf.
serial --unit=0 --speed=115200 terminal --timeout=5 serial console
10. Mostrar información de la máquina virtual
Para mostrar la información de la máquina virtual, use el siguiente comando:
# 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. Mostrar CPU de VM y uso de memoria
Para mostrar el uso de memoria y CPU de la máquina virtual, use el comando virt-top como se muestra a continuación.
# 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. Apague, reinicie o inicie la máquina virtual con virsh
Para apagar la máquina virtual, haga lo siguiente:
# virsh shutdown myRHELVM1 Domain myRHELVM1 is being shutdown
Para reiniciar la máquina virtual, haga lo siguiente:
# virsh reboot myRHELVM1
Para iniciar o encender la máquina virtual, haga lo siguiente. Una vez que se inicia la VM, ejecute "virsh list –all" para ver todas las VM en ejecución.
# virsh start myRHELVM1 Domain myRHELVM1 started
En el próximo artículo de la serie KVM, cubriremos más detalles sobre cómo editar y manipular configuraciones en una VM individual.