Cómo crear y administrar máquinas virtuales KVM desde línea de comandos

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...



 

Suscribirse

    Registrate para recibir las novedades y artículos por correo electrónico.

Linuxito en G+