Virtualización - Emperzar

Jan Kuparinen Version F34 onwards Last review: 2020-11-28 Needs Review!

Fedora usa la familia de herramientas libvirt y su solución de virtualización.

Habilitar el soporte de virtualización hardware

Esta sección cubre el ajuste de libvirt en su sistema. Después de ajustar libvirt, usted puede crear sistemas operativos invitados virtualizados, también conocidos como máquinas virtuales.

Requisitos del sistema

Para ejecutar virtualización en Fedora, usted necesita:

  • Al menos 600MB de almacenamiento en disco duro por cada invitado. Un sistema Fedora mínimo de línea de comandos requiere 600MB de almacenamiento. Un escritorio invitado Estándar de Fedora requiere al menos 3GB de espacio.

  • Al menos 256MB de RAM por invitado, más 256MB para el sistema operativo base. Lo recomendado por cada invitado de un sistema operativo moderno es al menos 756MB. Una buena manera de estimar esto es pensar en cuánta memoria se requiere normalmente para un sistema operativo y asignar esa cantidad al invitado virtualizado.

KVM requiere una CPU con extensiones de virtualización, que se encuentra en la mayoría de las CPUs de consumo. Estas extensiones se llaman Intel VT o AMD-V. Para comprobar si tiene soporte de CPU, ejecute el siguiente comando:

$ egrep '^flags.*(vmx|svm)' /proc/cpuinfo

Si de este comando no resulta nada impreso, su sistema no soporta las extensiones de virtualización relevantes. Aún puede usar QEMU/KVM, pero el emulador recurrirá a la virtualización de software, que es mucho más lenta.

Instalar virtualización software

Cuando instala Fedora, puede instalar los paquetes de virtualización seleccionando Virtualización en el Grupo Base en el instalador.

Para las instalaciones Fedora existentes, puede instalar las herramientas de virtualización por medio de la línea de comandos usando el Grupo Paquetes de Visualización. Para visualizar los paquetes, ejecute:

$ dnf groupinfo virtualization

Group: Virtualization
 Description: These packages provide a graphical virtualization environment.
 Mandatory Packages:
   virt-install
 Default Packages:
   libvirt-daemon-config-network
   libvirt-daemon-kvm
   qemu-kvm
   virt-manager
   virt-viewer
 Optional Packages:
   libguestfs-tools
   python3-libguestfs
   virt-top
  1. Ejecute este comando para instalar los paquetes obligatorios y predeterminados en el grupo de virtualización:

    # sudo dnf install @virtualization

    Alternativamente, para instalar los paquetes obligatorios, predeterminados y opcionales, ejecute:

    # sudo dnf group install --with-optional virtualization
  2. Después de instalar los paquetes, arranque el servicio libvirtd:

    # sudo systemctl start libvirtd

    Para iniciar el servicio en el arranque, ejecute:

    # sudo systemctl enable libvirtd
  3. Para verificar que los módulos KVM están cargados apropiadamente:

    $ lsmod | grep kvm
    kvm_amd               114688  0
    kvm                   831488  1 kvm_amd

    Si este comando lista kvm_intel o kvm_amd, KVM está configurado apropiadamente.

Soporte de Red

De forma predeterminada, libvirt creará una red privada para sus invitados en la máquina huésped. Esta red privada usará un subred 192.168.x.x y no será accesible directamente desde la red en la que está la máquina huésped. Sin embargo, los invitados virtuales pueden usar la máquina huésped como pasarela y pueden conectar fuera por medio de ella. Si necesita proporcionar servicios en sus invitados que se puedan alcanzar por medio de otras máquinas en la red de su huésped puede usar las reglas iptables DNAT para reenviar en puertos específicos o puede configurar un entorno puenteado.

Vea la página de configuración de red de libvirt para más información sobre como configurar una red puenteada.

Crear máquinas virtuales

La instalación de invitados Fedora usando Anaconda está soportada. Las instalación se puede iniciar desde la línea de comandos usando el programa virt-install o en el programa de interfaz de usuario`virt-install`.

Crear un invitado con virt-install

virt-install es una herramienta basada en línea de comandos para la creación de invitados virtualizados. Ejecute virt-install --help para ayuda en la línea de comandos o puede encontrar la página de manual en man 1 virt-install.

Para usar el comando virt-install, debería descargar primero una ISO de la versión de Fedora que desee instalar. Puede encontrar las últimas imágenes de Fedora en https://getfedora.org. Esta ISO solo es necesaria durante la instalación de Fedora y se puede borrar para liberar espacio de almacenamiento después si lo desea.

En este ejemplo usaremos Fedora Workstation.

Planificar los Recursos de Máquina Virtual

Ajuste los parámetros ram, vcpus y tamaño de disco de acuerdo con los recursos de los que disponga.

  • Almacenamiento: Una manera fácil de verificar el tamaño de su disco desde una shell bash es usando la utilidad df(1)` desde la shell:

    # df -h
  • Memoria: Puede verificar la memoria disponible desde la shell usando free(1):

    # free -m
  • VCPU: Puede verificar información de su procesador usando lscpu(1):

    # lscpu

Al asignar recursos a su máquina virtual, tenga en cuenta los requisitos mínimos del sistema para la versión de Fedora que está instalando así como los requisitos de su caso de uso. Para Fedora 40, puede encontrar esto en las ref:f40@fedora:release-notes:welcome/Hardware_Overview.adoc[Notas al Lanzamiento].

Crear Almacenamiento para la Máquina Virtual

El grupo de almacenamiento predeterminado de libvirt se encuentra en `/var/lib/libvirt/images – que es la ruta del archivo principal que usamos en este ejemplo. Para las personas que carecen de suficiente almacenamiento en esa ruta, simplemente puede montar un nuevo disco o partición en esa ruta de directorio (desde la BASH shell, teclee man 1 mount) o seleccione la nueva ruta. En el ejemplo de comando virt-install de abajo, el disco no existía antes de ejecutar virt-install. Cuando el disco especificado no es preexistente, debe especificar el tamaño de modo que virt-install puede crear un disco para usted. Si su disco ya existe, puede eliminar de forma segura el parámetro ,size=20 del argumento del disco.

Tiene diversas opciones de almacenamiento para su Máquina Virtual. Si bien está fuera del alcance de este artículo discutir este detalle, las siguiente son algunas opciones comunes. Estos ejemplos utilizan 20Gb como el límite superior para el tamaño del disco, pero puede ajustar este tamaño para adaptarlo a sus necesidades.

De nuevo, no es necesario asignar almacenamiento manualmente usando las opciones de ejemplo que se muestran abajo si usted especifica el parámetro tamaño en el ejemplo virt-install mostrado abajo.

Archivo Sin Formato (No Disperso)

Para crear un archivo sin formato completamente asignado (no disperso):

# sudo dd if=/dev/zero of=/var/lib/libvirt/images/guest.img bs=1M count=20480

también puede usar fallocate(1):

# sudo fallocate -l 20480M /var/lib/libvirt/images/guest.img
Archivo Sin Formato Raw (Disperso)

Para crear un archivo sin formato (disperso) asignado dinámicamente:

# sudo rm -f /var/lib/libvirt/images/guest.img
# sudo truncate --size=20480M /var/lib/libvirt/images/guest.img
QCOW2 Para crear un nuevo disco formateado qcow2 separadamente, puede usar qemu-img (el ejemplo de abajo específica un tamaño de disco de 20G):
# sudo qemu-img create -f qcow2 /var/lib/libvirt/images/guest.qcow2 20480

Se puede encontrar más información sobre las opciones de almacenamiento de libvirt en https://libvirt.org/storage.html.

Finalmente, ejecute el comando virt-install usando el siguiente formato (ajustando los parámetros según se necesite):

# sudo virt-install --name Fedora40 \
--description 'Fedora 40 Workstation' \
--ram 4096 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/Fedora-Workstation-40/Fedora-Workstation-40-20180518.0.x86_64.qcow2,size=20 \
--os-type linux \
--os-variant fedora40 \
--network bridge=virbr0 \
--graphics vnc,listen=127.0.0.1,port=5901 \
--cdrom /var/lib/libvirt/images/Fedora-Workstation-40/Fedora-Workstation-Live-x86-64-40-1.1.iso \
--noautoconsole

Nota: Para los parámetros gráficos, estamos ajustando el oyente de vnc a localhost porque es más seguro hacer un túnel de su conexión VNC a través de SSH para no exponer a VNC a todas las personas con acceso a la red.

virt-install puede usar archivos kickstart, por ejemplo, virt-install -x ks=kickstart-file-name.ks.

Si los gráficos están habilitados, se abrirá una ventana VNC y presenta el instalador gráfico. Si los gráficos no están habilitados, aparecerá un instalador de texto. Continúe con la instalación de Fedora.

Crear un invitado con virt-manager

  1. Inicie el Administrador de Máquina Virtual navegando a Aplicaciones  Herramientas del Sistema o ejecutando el siguiente comando:

    # sudo virt-manager
  2. Abra una conexión a un hipervisor navegando a Archivo  Añadir Conexión.

  3. Elija qemu para KVM o Xen para Xen.

  4. Elija local o seleccione un método para conectar a un hipervisor remoto.

  5. Después de abierta una conexión, pulse el nuevo icono cercano al hipervisor o haga pulsación con botón derecho en el hipervisor activo y seleccione Nuevo.

  6. Configure la máquina virtual siguiendo los pasos en el asistente New VM (nueva Máquina Virtual).

  7. Pulse Finish (Terminar) al final del asistente para aprovisionar el sistema operativo invitado. Después de unos momentos aparecerá una ventana VNC. Siga con la instalación de Fedora.

Administrar máquinas virtuales

Cuando la instalación del sistema operativo invitado está completa se puede administrar usando el programa virt-manager o por medio de la línea de comandos usando virsh.

Administrar invitados con virt-manager

  1. Inicie el Administrador de Máquina Virtual navegando a menu:[Applications]Herramientas del Sistema o ejecutando:

    # virt-manager

    Si no es root se le pedirá que introduzca la contraseña de root.

  2. Elija el equipo que desee manejar y pulse Connect (Conectar) en la ventana de diálogo Open Connection (Abrir Conexión).

  3. La lista de máquinas virtuales se muestra en la pantalla principal. El invitado que está corriendo se visualizará con un icono ">". Los que no estén corriendo aparecerán atenuados.

  4. Para manejar un invitado concreto, haga doble pulsación sobre él o botón derecho y seleccione Open (Abrir).

  5. Se abrirá una nueva ventana para el invitado y le permitirá usar su consola, ver información sobre su hardware virtual y arrancar, parar y pausarlo.

Para más información sobre virt-manager, vea Guía virt-manager de RedHat.

Los errores en la herramienta virt-manager deberían ser reportados en Bugzilla contra el componente virt-manager.

Administrar invitados con virsh

La utilidad de línea de comando virsh le permite manejar máquinas virtuales sobre la línea de comandos. La utilidad virsh se basa en la API de administración libvirt:

  • virsh tiene un conjunto estable de comandos cuya sintaxis y semántica ser conservan a través de las actualizaciones de la plataforma de virtualización subyacente.

  • virsh puede ser usado como usuario sin privilegios para operaciones de solo lectura (por ejemplo, listar dominios, listar estadísticas de dominio).

  • virsh puede manejar dominios bajo Xen, QEMU/KVM, ESX u otros back-ends sin diferencia perceptible por el usuario.

Para iniciar una máquina virtual:

# virsh create <name of virtual machine>

Para listar las máquinas virtuales corriendo en este momento:

# virsh list

Para listar todas las máquinas virtuales, corriendo o no:

# virsh list --all

Para apagar ordenadamente un invitado:

# virsh shutdown <virtual machine (name | id | uuid)>

Para apagar abruptamente un invitado:

# virsh destroy <virtual machine (name | id | uuid)>

Para guardar una instantánea de una maquina en un archivo:

# virsh save <virtual machine (name | id | uuid)> <filename>

Para recuperar una instantánea guardada anteriormente:

# virsh restore <filename>

Para exportar el archivo de configuración de una máquina virtual:

# virsh dumpxml <virtual machine (name | id | uuid)

Para una lista completa de los comandos disponibles para usar con virsh:

# virsh help

O consulte la página de manual: man virsh.

Los errores en la herramienta virsh se deben reportar en Bugzilla contra el componente libvirt.

Administración remota

Están disponibles las siguiente opciones de administración remota:

  • Si está usando usuarios que no sean root por medio de SSH, vea las instrucciones de configuración en https://wiki.libvirt.org/page/SSHSetup

  • Si usa acceso de root por medio de SSH, cree las claves SSH para root y utilice ssh-agent y ssh-add antes de lanzar virt-manager.

  • Para usar TLS, configure una autoridad de certificado local y envíe certificados x509 a todos los servidores y clientes. Para más información sobre esta opción, vea https://wiki.libvirt.org/page/TLSSetup.

Otras opciones de virtualización

QEMU/KVM sin libvirt

QEMU/KVM puede ser llamado directamente sin libvirt, sin embargo no se pueden usar herramientas como virt-manager, virt-install, o virsh. QEMU plano (sin KVM) puede también virtualizar otras arquitecturas de procesador como ARM o PowerPC.

Xen

Fedora can run as a Xen guest operating system and also be used as a Xen host (with the latter being true from Fedora 16; for using an earlier version of Fedora as a Xen host, check out the experimental repo available at https://myoung.fedorapeople.org/dom0). For a guide on how to install and setup a Fedora Xen host, see Fedora Host Installation page on the Xen Project wiki.

OpenStack

OpenStack consists of a number of services for running infrastructure as a service (IaaS) clouds. They are the Object Store (Swift), Compute (Nova), and Image (Glance) services.

OpenNebula

OpenNebula is an open source toolkit for data center virtualization.

oVirt

The oVirt project is an open virtualization project providing a end-to-end, server virtualization management system with advanced capabilities for hosts and guests, including high availability, live migration, storage management, system scheduler, and more.

Troubleshooting and known issues

First take a look at the well-known common issues. Replace the version number by the version you are actually using.

For troubleshooting tips, see Virtualization – How to Debug Issues