Este artículo explica cómo crear una máquina virtual en un host CentOS 6 totalmente desde línea de comandos (y de manera simple y fácil) utilizando la herramienta de línea de comandos virsh, parte de la API de virtualización libvirt.

Este tutorial se divide en 3 pasos:

  1. Crear un disco para la nueva máquina.
  2. Crear la máquina virtual.
  3. Conectarse a la máquina virtual mediante VNC, a través de un túnel SSH.

Crear un disco para la máquina virtual

Anteriormente expliqué cómo crear un volumen dentro de un pool libvirt. Sin embargo, muchas veces se recurre a un volumen LVM, por todas las ventajas que esta tecnología introduce.

Este ejemplo se basa en LVM, por ende el primer paso consiste en crear un nuevo volumen lógico. Se dispone de un grupo "vm_group" con los siguientes volúmenes:

[root@centos6 ~]# lvs
  LV         VG       Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  data       vm_group -wi-ao---- 100.00g                                             
  lvns1      vm_group -wi-ao----   2.00g                                             
  lvns2      vm_group -wi-ao----   2.00g                                             
  lvserver01 vm_group -wi-ao----  20.00g                                             
  lvserver02 vm_group -wi-a-----   2.00g 

Para crear un nuevo volumen, se especifica el tamaño (10 GB), nombre ("lvserver03") y grupo destino ("vm_group"):

[root@centos6 ~]# lvcreate -L 10G -n lvserver03 vm_group
  Logical volume "lvserver03" created

Es posible verificar listando nuevamente los volúmenes disponibles:

[root@centos6 ~]# lvs
  LV         VG       Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  data       vm_group -wi-ao---- 100.00g                                             
  lvns1      vm_group -wi-ao----   2.00g                                             
  lvns2      vm_group -wi-ao----   2.00g                                             
  lvserver01 vm_group -wi-ao----  20.00g                                             
  lvserver02 vm_group -wi-a-----   2.00g                                             
  lvserver03 vm_group -wi-a-----  10.00g 

Crear la máquina virtual

Contando con un disco, sólo resta determinar la ubicación del disco de instalación y las redes disponibles para conectar la máquina.

En el directorio /data/ISO/ se encuentra una imagen de instalación de Debian 7 (debian-7.7.0-amd64-netinst.iso):

[root@centos6 ~]# ll /data/ISO/
total 8.9G
-rw------- 1 root root 8.0G Jan  8 10:21 template-debian7.raw
-rw-r--r-- 1 root root 222M Oct 18 10:06 debian-7.7.0-amd64-netinst.iso
-rwxr-xr-x 1 qemu qemu 611M Nov  4  2013 wxp.iso
-rwxr-xr-x 1 root root   38 Nov  4  2013 wxp.txt

Utilizando virsh es posible listar las redes disponibles en el host:

[root@centos6 ~]# virsh net-list
Name                 State      Autostart     Persistent
--------------------------------------------------
default              active     yes           yes

La forma más práctica y rápida consiste en crear una máquina virtual a partir de una definición en un archivo XML. Más fáccil aún es tomar una definición de una máquina virtual previa, y hacer las modificaciones necesarias.

En el directorio /etc/libvirt/qemu/ se encuentran las definiciones de máquinas virtuales existentes. Por ejemplo, tomo la definición de la máquina "server03" (el nombre de archivo coincide con el nombre del dominio/máquina):

[root@centos6 ~]# cp /etc/libvirt/qemu/server02.xml server03.xml

Editar la copia con cualquier editor de línea de comandos:

[root@centos6 ~]# nano server03.xml

Modificar el nombre, borrar el uuid, cambiar la ruta a la imagen de disco, "insertar" la imagen ISO del CD de instalación y borrar la MAC de todas las placas de red presentes. A su vez, eliminar cualquier dispositivo que no sea necesario.

[root@centos6 ~]# cat server03.xml 
<domain type='kvm'>
  <name>server03</name>
  <memory unit='KiB'>524288</memory>
  <currentMemory unit='KiB'>524288</currentMemory>
  <vcpu placement='static'>1</vcpu>
  <os>
    <type arch='x86_64' machine='debian'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='block' device='disk'>
      <driver name='qemu' type='raw' cache='none'/>
      <source dev='/dev/vm_group/lvserver03'/>
      <target dev='hda' bus='ide'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='1' target='0' unit='0'/>
      <source file='/data/ISO/debian-7.7.0-amd64-netinst.iso'/>
    </disk>
    <controller type='usb' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
    </controller>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <interface type='bridge'>
      <source bridge='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='6600' autoport='yes' listen='127.0.0.1'>
      <listen type='address' address='127.0.0.1'/>
    </graphics>
    <video>
      <model type='cirrus' vram='9216' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </memballoon>
  </devices>
</domain>

Luego se define (crea) la máquina virtual a partir de este archivo mediante el subcomando define:

[root@centos6 ~]# virsh define server03.xml
Domain server03 defined from server03.xml

De esta forma se evita lidiar con parámetros de línea de comandos, ya que la sintaxis XML es mucho más descriptiva e intuitiva.

A continuación, listar las máquinas virtuales presentes en el host:

[root@centos6 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 1     ns2                            running
 2     server01                       running
 3     ns1                            running
 -     server02                       shut off
 -     server03                       shut off
 -     wxp                            shut off

Iniciar la nueva máquina virtual:

[root@centos6 ~]# virsh start server03
Domain server03 started

Conectarse a la máquina virtual

El último paso consiste en conectarse a la máquina virtual, desde una estación de trabajo con escritorio, a fin de comenzar la instalación del sistema operativo en el guest. Desde un host GNU/Linux o FreeBSD, crear un túnel SSH para acceder al puerto VNC:

emi@hal9000:~ % ssh -L 6600:127.0.0.1:6600 -p 2222 root@host36.linuxito.com

Utilizar un túnel SSH (en lugar de conectarse directamente al puerto VNC correspondiente al display de la máquina virtual destino) permite mejorar la seguridad y evitar la necesidad de abrir puertos adicionales en el firewall del host (sólo basta con que el puerto correspondiente al servidor SSH del host esté abierto). Así, todo el tráfico relacionado a la gestión de todas las máquinas virtuales pasa a través de un único puerto.

Luego, con un cliente VNC (por ejemplo krdc), conectarse a localhost:6600 y proceder con la instalación.

Para obtener ayuda con virsh, ejecutar:

virsh help
virsh help vol-info
virsh help vol-create-as

Referencias


Tal vez pueda interesarte


Compartí este artículo