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
- Evaluar si mantener cockpit --> sólo es encesario cockpit-machines
- Gestionar enlace con libvirt: https://libvirt.org/apps.html
Usar el ciclo de vida:
https://wiki.libvirt.org/page/VM_lifecycle
Configuración KVM
Comando ufw ejecutado para abrir paso a las conexiones VNCsudo 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
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
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
# 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
--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)
--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ámicaqemu-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áquinaslistlist --all
Arrancadostart [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 actualvirsh dumpxml pruebas2 | vim - ( y luego :set filetype=xml para colorear )
Apagado ACPIvirsh shutdown [maquina] --mode acpi
Reiniciovirsh reset [maquina]
Suspender y reanudar máquinavirsh suspend [maquina]virsh resume [maquina]
Apagado bestiavirsh destroy [maquina]
Infovirsh dominfo [maquina]
Editar configuraciónvirsh edit [maquina]
Guardar y restaurar estado (la detiene)virsh save [maquina] [nombre archivo]virsh restore [nombre archivo]
Eliminar máquinavirsh 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 particionesqemu-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 dominiovirsh vcpucount <vm name>virsh setvcpus <vm name> --count 1 --maximum --config --live
Añadir un cdromvirsh attach-disk <GuestName> sample.iso hdc --type cdrom --mode readonly
clonar una máquinavirt-clone --original nombre_origen --auto-clone
Conectar a la consola serie de un dominiovirsh console
Snapshots
Generar snapshot para una máquinasnapshot-create nombre_maquina --quiesce
Ver snapshots de una máquinasnapshot-list nombre_maquina
Borrar un snapshotsnapshot-delete nombre_maquina num_snapshot --metadata
Redirección de puertos
http://secomputing.co.uk/2012/02/21/Forwarding-ports-to-KVM-clients/