En esta entrada vamos a ver los comandos básicos para la creación de máquinas virtuales dentro de nuestro servidor, de esta manera podremos hacerlo por ssh y de manera remota sin recurrir a una interfaz gráfica.
Creación y configuración de máquinas
En primer lugar lo que debemos de hacer es crear un disco duro virtual para que podamos instalar el sistema operativo que queramos, para ello lo que hacemos es ejecutar el siguiente comando:
#qemu-img create -f qcow2 -o preallocation=metadata RUTA_A_DISCO_DURO_VIRTUAL ESPACIO
Un ejemplo real sería:
#qemu-img create -f qcow2 -o preallocation=metadata /mnt/discoduro 10G
El siguiente paso es crear la máquina virtual usando el disco virtual que hemos creado anteriormente, también debemos de especificar la imagen que vamos a usar para la instalación:
#virt-install -r RAM_EN_MB -n NOMBRE -f RUTA_A_DISCO_DURO_VIRTUAL --cdrom RUTA_A_ISO --vcpus=NUMERO_DE_CORES --graphics vnc,listen=0.0.0.0 --noautoconsole --network bridge:br0
#virt-install -r 1024 -n maquina1 -f /mnt/discoduro --cdrom /mnt/isos/debian8.iso --vcpus=2 --graphics vnc,listen=0.0.0.0 --noautoconsole --network bridge:br0
Si observamos el ultimo parámetro que le marcamos es la red en la cual hemos puesto que sea en modo puente por la interfaz «br0» que se creó para que las máquinas pudieran acceder a la misma red que el servidor.
Si queremos que la máquina tenga mas de un duro debemos debemos de ejecutar el comando anterior pero con un añadido:
#virt-install -r RAM_EN_MB -n NOMBRE -f RUTA_A_PRIMER_DISCO_DURO_VIRTUAL -f RUTA_A_SEGUNDO_DISCO_DURO_VIRTUAL --cdrom RUTA_A_ISO --vcpus=NUMERO_DE_CORES --graphics vnc,listen=0.0.0.0 --noautoconsole --network bridge:br0
Otra opción que tenemos es crear una máquina virtual a partir de un disco duro virtual que ya existente y que ha sudo usando e instalado un sistema operativo:
#virt-install -r RAM_EN_MB -n NOMBRE -f RUTA_A_DISCO_DURO_VIRTUAL --vcpus=NUMERO_DE_CORES --graphics vnc,listen=0.0.0.0 --noautoconsole --network bridge:br0
Opciones de KVM.
Ahora vamos a ver los comando necesarios para poder gestionar KVM y las máquinas de creemos.
En primer lugar si lo que queremos es arrancar una máquina virtual debemos de ejecutar el siguiente comando:
#virsh start nombre
Para apagarla sería de la siguiente manera:
#virsh destroy nombre
No nos confundamos, aunque ponga «destroy» no significa que la destruya como hemos dicho lo que hace es apagarla.
Ahora si vamos a ver el comando para eliminar o destruir la máquina que sería de la siguinete forma:
#virsh undefine nombre
Cuando creamos mas de una máquina se le asignan puertos para poder acceder por vnc de manera que las máquinas están separadas y definidas perfectamente. Para ver los puertos que tiene cada máquina podemos usar uno de los dos comandos que tenemos a continucación:
#virsh domdisplay nombre #virsh vncdisplay nombre
Si lo que queremos es hacer un listado de las distintas redes que tenemos en KVM podemos hacer con un comando muy sencillo que es:
#virsh net-list
Ahora vamos a ver el comando con el cual nos muestra un listado de todas las máquinas que tenemos creadas y si están encendidas o apagadas:
#virsh list --all
Acciones fuera de KVM.
Si lo que queremos es ver las direcciones IP que hay concedidas en nuestra red local lo que debemos de hacer es usar el comando nmap de la siguiente manera:
#nmap -sP 192.168.1.1-254
También es una buena opción para cuando estemos desarrollando y probando en una máquina virtual el montarnos la carpeta donde se este ejecutando el código de la aplicación en nuestra máquina real. Esto lo podemos hacer con «sshfs» de la siguiente manera:
#sudo sshfs -o allow_other user@address:/directorio/ /carpeta_destino_de_montaje/ #sudo sshfs -o allow_other usuario@192.168.100.11:/home/usuario/ /mnt/MaquinaVirtual/
Si estamos fuera de nuestro red, podemos realizar un tunel mediante los siguientes comandos:
ssh -f userB@systemB -L 2222:systemC:22 -N sshfs -o allow_other -p 2222 userC@localhost:/remote/path/ /mnt/localpath/
Para quitar el enlace usamos:
umount /mnt/localpath/
Y para eliminar el tunel:
ps ax | grep "ssh_command" | awk '{print $1}' | \ xargs -i kill {} 2>/dev/null