Una cuenta pendiente que tenía era administrar un host de máquinas virtuales sin cabeza (headless), esto es, sin entorno gráfico. Cuando se instala un servidor host de máquinas virtuales, para disminuir el consumo de recursos como memoria y CPU, es conveniente que no utilice entorno gráfico y tenga la menor cantidad de servicios instalados, solo lo mínimo indispensable.
En este artículo voy a demostrar cómo es posible crear, eliminar y administrar máquinas, discos y redes virtuales utilizando las herramientas de administración virt-install
y virsh
.
Creación de máquinas virtuales
Como ejemplo de creación de una máquina virtual comienzo probando DSL (Damn Small Linux), una mini-distribución GNU/Linux de 50 MB la cual usé durante mucho tiempo en una muy vieja computadora.
Utilizando virt-install, crer una máquina virtual con 1 VCPU, 128 MB de memoria RAM, conectado a la interfaz bridge br0, sin disco y utilizando gráficos VNC en el puerto 6666 (sólo accesible desde localhost).
Descargar la última versión de DSL:
$ wget http://distro.ibiblio.org/damnsmall/current/dsl-4.4.10.iso
Crear la máquina virtual:
# virt-install --name DSL --hvm --vcpus=1 --ram 128 --network=bridge:br0 --os-type linux --noautoconsole --graphics vnc,port=6666 --cdrom=/data/ISO/dsl-4.4.10.iso --nodisks Starting install... Creating domain... | 0 B 00:00 Domain installation still in progress. You can reconnect to the console to complete the installation process.
La opción --hvm
se utiliza para indicarle que utilice "full-virtualization" (hardware emulado) utilizando el emulador "qemu" (Quick EMUlator). La opción --noautoconsole
se utiliza para que no intente conectarse a la consola del guest automáticamente al iniciar. La opción --nodisks
se utiliza para indicar que no utilice disco y mediante --cdrom
se indica la ruta a la imagen iso del CDROM de DSL.
Una vez finalizada la creación (toma unos pocos segundos) es posible acceder a la consola gráfica de la VM utilizando un cliente VNC en el host. En este primer ejemplo se trata de un host CentOS 6.3 con entorno gráfico, por lo que es posible abrir una conexión VNC utilizando Tiger VNC. Lógicamente, al utilizar entorno gráfico es posible acceder directamente al guest desde la herramienta virt-manager, pero se utiliza un cliente VNC para probar la conexión al guest (que luego se hará desde un host remoto).
Desde el host abrir TigerVNC ejecutando "vncviewer", debe conectarse a localhost:6666
(el puerto configurado en la creación de la máquina virtual)
DSL en acción:
Como un nuevo ejemplo creo una VM para probar Puppy Linux, otra mini-distribución algo más avanzada ya que, por ejemplo, la última versión viene con el kernel Linux 3.1.10. Esta vez utilizando 1 VCPU, 256 MB de memoria RAM, conectado a la red NAT por defecto (salida a Internet a través del host), con un nuevo volumen de disco de 1GB de tamaño fijo (no expandible dinámicamente) y utilizando gráficos VNC en el puerto 6667 accesible desde cualquier interfaz.
# virt-install --name slacko --hvm --vcpus=1 --ram 256 --disk path=/data/VM/slacko.img,size=1,sparse=false --network network=default --os-type linux --noautoconsole --graphics vnc,port=6667,listen=0.0.0.0 --cdrom=/data/ISO/slacko-5.3.3-4g-SCSI.iso Starting install... Allocating 'slacko.img' | 1.0 GB 00:00 Creating domain... | 0 B 00:00 Domain installation still in progress. You can reconnect to the console to complete the installation process.
Ya que se ha abierto el puerto 6667 para VNC, es posible conectarse al guest desde cualquier host remoto. Este es un escenario posible en el que el host no posee entorno gráfico y se desea instalar máquinas virtuales desde un host que no posee la herramienta virt-manager
(es posible utilizar virt-manager
para administrar un host remoto!)
Acceso al guest utilizando un cliente VNC desde un host remoto (UltraVNC desde un host Windows XP):
Slacko Puppy 5.3.3 en acción:
Administración de máquinas virtuales
Listar máquinas virtuales en ejecución:
# virsh list Id Name State ---------------------------------------------------- 5 WXPsp3 running 6 slacko running
Listar todas las máquinas virtuales:
# virsh list --all Id Name State ---------------------------------------------------- 5 WXPsp3 running 6 slacko running - DSL shut off - w2003_test shut off
Listar pools de almacenamiento:
# virsh pool-list Name State Autostart ----------------------------------------- default active yes VM active yes
Listar volúmenes de disco:
# virsh vol-list VM Name Path ----------------------------------------- backup /data/VM/backup slacko.img /data/VM/slacko.img WXPsp3.img /data/VM/WXPsp3.img
Eliminar máquinas virtuales: se deben utilizar los comandos:
virsh destroy [id] virsh undefine [id] virsh vol-delete [img]
Un ejemplo completo:
# virsh list --all Id Name State ---------------------------------------------------- 5 WXPsp3 running 6 slacko running - DSL shut off - w2003_test shut off # virt-install --name slacko2 --hvm --vcpus=1 --ram 256 --disk path=/data/VM/slacko2.img,size=1,sparse=false --network network=default --os-type linux --noautoconsole --graphics vnc,port=6668,listen=0.0.0.0 --cdrom=/data/ISO/slacko-5.3.3-4g-SCSI.iso Starting install... Allocating 'slacko2.img' | 1.0 GB 00:00 Creating domain... | 0 B 00:00 Domain installation still in progress. You can reconnect to the console to complete the installation process. # virsh list Id Name State ---------------------------------------------------- 5 WXPsp3 running 6 slacko running 9 slacko2 running # virsh vol-list VM Name Path ----------------------------------------- backup /data/VM/backup slacko.img /data/VM/slacko.img slacko2.img /data/VM/slacko2.img WXPsp3.img /data/VM/WXPsp3.img [root@hal9000 emi]# virsh destroy slacko2 Domain slacko2 destroyed # virsh list Id Name State ---------------------------------------------------- 5 WXPsp3 running 6 slacko running # virsh list --all Id Name State ---------------------------------------------------- 5 WXPsp3 running 6 slacko running - DSL shut off - slacko2 shut off - w2003_test shut off # virsh undefine slacko2 Domain slacko2 has been undefined # virsh list --all Id Name State ---------------------------------------------------- 5 WXPsp3 running 6 slacko running - DSL shut off - w2003_test shut off # virsh vol-delete --pool VM slacko2.img Vol slacko2.img deleted # virsh vol-list VM Name Path ----------------------------------------- backup /data/VM/backup slacko.img /data/VM/slacko.img WXPsp3.img /data/VM/WXPsp3.img
Editar redes virtuales
virsh net-dumpxml [network] > network.xml vi network.xml (o editar la configuración de la red virtual con cualquier editor) virsh net-define network.xml
Próximamente, administrar máquinas virtuales con virt-manager
desde un host remoto...