Virtualización KVM

Creación de una máquina
Eliminación de una máquina
Listado de máquinas
Arranque de una máquina
Gestión de máquinas

TODO

Usar el ciclo de vida:

https://wiki.libvirt.org/page/VM_lifecycle

Configuración KVM

Comando ufw ejecutado para abrir paso a las conexiones VNC
sudo ufw allow from 192.168.1.0/24 to any port 5900:5999 proto tcp

Creación de una máquina virtual nueva (a nivel de sistema)

La ruta donde están los medios (ISO y qcow2) es /mnt/pool_crit/pool-kvm. Hay un BIND en /var/lib/libvirt/images/

Ha de estar accesible al usuario libvirt-qemu, que es el que ejecuta las máquina

Ha de estar accesible al grupo kvm, que es para que adminlechuga las pueda gestionar

ISO de instalación

Ha de estar accesible al usuario libvirt-qemu, que es el que ejecuta las máquina

Ha de estar accesible al grupo kvm, que es para que adminlechuga las pueda gestionar

sudo bash
cd /var/lib/libvirt/images
sudo chown libvirt-qemu.kvm *
sudo chmod 644 *

QCOW2 de sistema

No es necesario si se especifica en el comando virt-install

# Genera un archivo mínimo hasta el máximo indicado aqui
qemu-img create -f qcow2 /mnt/pool_crit/pool-kvm/[nombre_imagen].qcow2 100(k|M|G|T)

Generación inicial de la máquina

Máquina normal

https://linux.die.net/man/1/virt-install

# A partir de una imagen ISO de CD, con interfaz VNC
# ram size = Megabytes
# disk size = Gigabytes

virt-install --name nombre_maquina \
--description "Descripción de la máquina" \
--os-type "generic" \
--ram 1024 \
--vcpus 2 \
--cpu host \
--hvm \
--cdrom /var/lib/libvirt/images/XigmaNAS-x64-LiveCD-11.2.0.4.6536.iso \
--disk size=10 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole \
--autostart

A partir de un qcow2

virt-install \
--name "Nombre" \
--description "Descripción de la máquina" \
--os-type "generic" \
--ram 1024 \
--vcpus 2 \
--cpu host \
--hvm \
--disk /mnt/pool_crit/pool-kvm/disco.qcow2,bus=sata \
--boot hd \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole \
--autostart

Máquina con GPU passtrough


NOMBRE_MAQUINA=ubuntu_full
DESC_MAQUINA="Ubuntucompleto"
ISO=/mnt/pool_crit/pool-kvm/ubuntu-20.04.3-desktop-amd64.iso

virt-install --name $NOMBRE_MAQUINA \
--description "$DESC_MAQUINA" \
--os-type "generic" \
--ram 3072 \
--vcpus 2 \
--cpu host \
--hvm \
--cdrom $ISO \
--disk size=10 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole \
--autostart

Otros tipos de máquinas

A partir de una imagen ISO de CD, con interfaz VNC TODO: Pendiente de descrifar
No permite el uso de imagenes locales
sólo con 'location' con cierta estructura (ver con --debug)

sudo virt-install --name ubuntu1804 \
--description "Máquina de prueba ubuntu 18.04" \
--os-type "linux" \
--ram=1024 \
--vcpus=2 \
--disk path=/var/lib/libvirt/images/ubuntu1804.qcow2,size=2 \
--location http://ftp.us.debian.org/debian/dists/stable/main/installer-amd64/ \
--nographics \
--extra-args "console=ttyS0"

Eliminación de una máquina virtual


MAQUINA=[nombre_maquina]

virsh destroy $MAQUINA

virsh undefine $MAQUINA

# Para ver qué volumenes hemos de eliminar
virsh vol-list --pool default

virsh vol-delete --pool default nombre_volume.qcow2
 

Gestión de archivos qcow2

Montar una imagen de disco qcow2

de: https://gist.github.com/shamil/62935d9b456a6f9877b5


# cargamos el módulo y conectamos el archivo como dispositivo
modprobe nbd max_part=8
qemu-nbd --connect=/dev/nbd0 /var/lib/libvirt/images/[fichero de imagen de disco].qcow2

# para ver las particiones
fdisk /dev/nbd0 -l

# montamos la partición que nos interesa
mount /dev/nbd0p1 /mnt/temp/

# para acabar...
umount /mnt/temp/
qemu-nbd --disconnect /dev/nbd0
rmmod nbd
 

Comandos

Convertir imagen completa a dinámica
qemu-img convert -f qcow2 -O qcow2 -o preallocation=off vol.qcow2 newdisk.qcow2

Gestión de las máquinas virtuales

Enlace e info

https://www.centos.org/docs/5/html/5.2/Virtualization/chap-Virtualization-Managing_guests_with_virsh.html
https://computingforgeeks.com/virsh-commands-cheatsheet/

Configuración de las máquinas: https://libvirt.org/format.html
Comandos, oficial: https://libvirt.org/sources/virshcmdref/html-single/

Comandos

Se utiliza el entorno virsh

Listado de máquinas
list
list --all
Arrancado
start [maquina]

En qué pantalla vnc está disponible cada máquina? (vnc_viewer a ip_virbr0:[5900+núm pantalla])
for i in $(virsh -q list|awk '{print $2}'|sort); do echo -e "\033[01;31m$i\033[00m -> $(virsh vncdisplay $i)"; done

Estado actual
virsh dumpxml pruebas2 | vim - ( y luego :set filetype=xml para colorear )

Apagado ACPI
virsh shutdown [maquina] --mode acpi

Reinicio
virsh reset [maquina]

Suspender y reanudar máquina
virsh suspend [maquina]
virsh resume [maquina]

Apagado bestia
virsh destroy [maquina]

Info
virsh dominfo [maquina]

Editar configuración
virsh edit [maquina]

Guardar y restaurar estado (la detiene)
virsh save [maquina] [nombre archivo]
virsh restore [nombre archivo]

Eliminar máquina
virsh undefine [maquina] --remove-all-storage

Increase the qcow2 disk (las imagenes están en /var/lib/libvirt/images)
Esto permite al disco crecer más, dentro de la máquina habría que rehacer las particiones
qemu-img resize ubuntu-server.qcow2 +5GB

Establecer la memoria máxima (hay que reiniciar)
virsh setmaxmem <vm name> --size 16G --config --live

Ver/Establecer las cpu máximas que puede usar un dominio
virsh vcpucount <vm name>
virsh setvcpus <vm name> --count 1 --maximum --config --live

Añadir un cdrom
virsh attach-disk <GuestName> sample.iso hdc --type cdrom --mode readonly

clonar una máquina
virt-clone --original nombre_origen --auto-clone

Conectar a la consola serie de un dominio
virsh console

Snapshots

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/virtualization_deployment_and_administration_guide/sect-managing_guest_virtual_machines_with_virsh-managing_snapshots

Generar snapshot para una máquina
snapshot-create nombre_maquina --quiesce

Ver snapshots de una máquina
snapshot-list nombre_maquina

Borrar un snapshot
snapshot-delete nombre_maquina num_snapshot --metadata

Redirección de puertos

http://secomputing.co.uk/2012/02/21/Forwarding-ports-to-KVM-clients/

Apuntes varios