Serie RHCSA: Conceptos básicos de virtualización y administración de invitados con KVM - Parte 15


Si busca la palabra virtualizar en un diccionario, encontrará que significa "crear una versión virtual (en lugar de real) de algo". En informática, el término virtualización se refiere a la posibilidad de ejecutar múltiples sistemas operativos simultáneamente y aislados unos de otros, sobre el mismo sistema físico (hardware), conocido en el esquema de virtualización como host.

Mediante el uso del monitor de máquina virtual (también conocido como hipervisor), las máquinas virtuales (denominadas huéspedes) reciben recursos virtuales (es decir, CPU, RAM, almacenamiento, interfaces de red, por nombrar algunos) del hardware subyacente.

Con eso en mente, es evidente que una de las principales ventajas de la virtualización es el ahorro de costos (en equipos e infraestructura de red y en términos de esfuerzo de mantenimiento) y una reducción sustancial en el espacio físico requerido para acomodar todo el hardware necesario.

Dado que este breve tutorial no puede cubrir todos los métodos de virtualización, le animo a que consulte la documentación que se incluye en el resumen para obtener más detalles sobre el tema.

Tenga en cuenta que el presente artículo pretende ser un punto de partida para aprender los conceptos básicos de virtualización en RHEL 7 utilizando KVM (máquina virtual basada en kernel) con utilidades de línea de comandos, y no una discusión en profundidad del tema.

Verificación de requisitos de hardware e instalación de paquetes

Para configurar la virtualización, su CPU debe admitirla. Puede verificar si su sistema cumple con los requisitos con el siguiente comando:

# grep -E 'svm|vmx' /proc/cpuinfo

En la siguiente captura de pantalla podemos ver que el sistema actual (con un microprocesador AMD) admite la virtualización, como lo indica svm. Si tuviéramos un procesador basado en Intel, veríamos vmx en los resultados del comando anterior.

Además, deberá tener habilitadas las capacidades de virtualización en el firmware de su host (BIOS o UEFI).

Ahora instale los paquetes necesarios:

  1. qemu-kvm es un virtualizador de código abierto que proporciona emulación de hardware para el hipervisor KVM, mientras que qemu-img proporciona una herramienta de línea de comandos para manipular imágenes de disco.
  2. libvirt incluye las herramientas para interactuar con las capacidades de virtualización del sistema operativo.
  3. libvirt-python contiene un módulo que permite que las aplicaciones escritas en Python utilicen la interfaz proporcionada por libvirt.
  4. libguestfs-tools: diversas herramientas de línea de comandos del administrador del sistema para máquinas virtuales.
  5. virt-install: otras utilidades de línea de comandos para la administración de máquinas virtuales.

# yum update && yum install qemu-kvm qemu-img libvirt libvirt-python libguestfs-tools virt-install

Una vez que se complete la instalación, asegúrese de iniciar y habilitar el servicio libvirtd:

# systemctl start libvirtd.service
# systemctl enable libvirtd.service

De forma predeterminada, cada máquina virtual solo podrá comunicarse con el resto en el mismo servidor físico y con el propio host. Para permitir que los invitados lleguen a otras máquinas dentro de nuestra LAN y también a Internet, necesitamos configurar una interfaz de puente en nuestro host (por ejemplo, br0) mediante,

1. agregando la siguiente línea a nuestra configuración de NIC principal (muy probablemente /etc/sysconfig/network-scripts/ifcfg-enp0s3 ):

BRIDGE=br0

2. crear el archivo de configuración para br0 (/etc/sysconfig/network-scripts/ifcfg-br0 ) con estos contenidos (tenga en cuenta que es posible que deba cambiar la dirección IP, la dirección de la puerta de enlace y la información de DNS ):

DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.0.18
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
NM_CONTROLLED=no
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=br0
ONBOOT=yes
DNS1=8.8.8.8
DNS2=8.8.4.4

3. finalmente, habilitando el reenvío de paquetes haciendo, en /etc/sysctl.conf ,

net.ipv4.ip_forward = 1

y cargando los cambios a la configuración actual del kernel:

# sysctl -p

Tenga en cuenta que es posible que también deba informar a firewalld que se debe permitir este tipo de tráfico. Recuerde que puede consultar el artículo sobre ese tema en esta misma serie (Parte 11: Control de tráfico de red mediante FirewallD e Iptables) si necesita ayuda para hacerlo.