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 invitados) reciben recursos virtuales (es decir, CPU, RAM, almacenamiento, interfaces de red, por nombrar algunos) del hardware subyacente.

Teniendo esto en cuenta, es evidente que una de las principales ventajas de la virtualización es el ahorro de costes (en equipos e infraestructura de red y en términos de esfuerzo de mantenimiento) y una reducción sustancial del espacio físico necesario para alojar todo el hardware necesario.

Dado que este breve instructivo no puede cubrir todos los métodos de virtualización, le recomiendo 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 la 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 su lugar 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 is an open source virtualizer that provides hardware emulation for the KVM hypervisor whereas qemu-img provides a command line tool for manipulating disk images.
  2. libvirt includes the tools to interact with the virtualization capabilities of the operating system.
  3. libvirt-python contains a module that permits applications written in Python to use the interface supplied by libvirt.
  4. libguestfs-tools: miscellaneous system administrator command line tools for virtual machines.
  5. virt-install: other command-line utilities for virtual machine administration.
# 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 puente en nuestro host (digamos br0, por ejemplo) 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.