Diferencia entre revisiones de «Virtualización con libvirt»
(→Paso 1: Descarga de la imagen Cloud) |
(→Paso 3: Creación de máquina virtual) |
||
| (No se muestran 3 ediciones intermedias del mismo usuario) | |||
| Línea 12: | Línea 12: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| − | curl https://cloud.debian.org/images/cloud/ | + | curl -L -O https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2 |
</syntaxhighlight> | </syntaxhighlight> | ||
| Línea 18: | Línea 18: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| − | + | % Total % Received % Xferd Average Speed Time Time Time Current | |
| + | Dload Upload Total Spent Left Speed | ||
| + | 100 393 100 393 0 0 1369 0 --:--:-- --:--:-- --:--:-- 1369 | ||
| + | 37 428M 37 159M 0 0 19.8M 0 0:00:21 0:00:08 0:00:13 21.7M | ||
| + | ... | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Línea 26: | Línea 30: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| − | qemu-img resize debian- | + | qemu-img resize debian-12-generic-amd64.qcow2 +8G |
</syntaxhighlight> | </syntaxhighlight> | ||
Esto aumenta en 8 Gbytes la imagen, por tanto, quedas con una unidad virtual de almacenamiento de 10 GBytes. | Esto aumenta en 8 Gbytes la imagen, por tanto, quedas con una unidad virtual de almacenamiento de 10 GBytes. | ||
| − | = Paso 2: Configuración de la imagen cloud con | + | = Paso 2: Configuración de la imagen cloud con cloud-init = |
| + | |||
| + | Cree el fichero ''meta-data.yaml'' en la carpeta donde tiene la imagen cloud que acaba de descargar. Dicho fichero tiene que contener: | ||
| + | |||
| + | <syntaxhighlight lang="bash"> | ||
| + | instance-id: uvus-28oct26 | ||
| + | local-hostname: uvus-server | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | cambie 'uvus' por su identificador. | ||
| + | |||
| + | Cree también el fichero ''user-data.yaml'': | ||
| + | |||
| + | <syntaxhighlight lang="bash"> | ||
| + | #cloud-config | ||
| + | users: | ||
| + | - name: practica | ||
| + | sudo: ['ALL=(ALL) NOPASSWD:ALL'] | ||
| + | shell: /bin/bash | ||
| + | plain_text_passwd: "coolpass" | ||
| + | lock_passwd: false | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | y por último cree el fichero ''network-config.yaml'': | ||
| − | + | <syntaxhighlight lang="bash"> | |
| + | # network-config.yaml | ||
| + | version: 2 | ||
| + | ethernets: | ||
| + | eth0: | ||
| + | match: | ||
| + | name: "en*" | ||
| + | dhcp4: true | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | Alternativamente, puede usar la orden ''virt-customize'', que permite establecer la contraseña del usuario administrador de la imagen que hemos descargado. | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Línea 43: | Línea 80: | ||
= Paso 3: Creación de máquina virtual = | = Paso 3: Creación de máquina virtual = | ||
| − | Para crear una máquina virtual con libvirt, tienes que hacer uso de ''virt-install'': | + | Para crear una máquina virtual con libvirt, tienes que hacer uso de ''virt-install'' con los ficheros de configuración de cloud-init. |
| + | |||
| + | <syntaxhighlight lang="bash"> | ||
| + | virt-install --name miserver1 --memory 1024 --disk path=/home/pneira/28oct26/debian-12-generic-amd64.qcow2 --cloud-init user-data=user-data.yaml,meta-data=meta-data.yaml --network network="default" --os-variant generic --import | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | si configuró la imagen con virt-customize, entonces use: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
Revisión actual del 16:59 28 oct 2026
Para la realización de esta práctica necesitará de una imagen de Debian Cloud que descargaremos de https://cloud.debian.org
En esta práctica se empleará la imagen descargada de la web Debian Cloud y se hará uso de la herramienta virt-customize para configurarla.
A continuación, utilizaremos la imagen de Debian ya configurada para ser importada al software de virtualización libvirt.
Contenido
- 1 Paso 1: Descarga de la imagen Cloud
- 2 Paso 2: Configuración de la imagen cloud con cloud-init
- 3 Paso 3: Creación de máquina virtual
- 4 Paso 4: Acceso y gestión de la máquina virtual
- 5 Paso 5: Ampliación de tamaño de la imagen Cloud
- 6 Paso 6: Configuración del teclado en la imagen Cloud
- 7 Paso 7: Configuración de la red en libvirt
- 8 Paso 8: Activación del servicio de ssh
- 9 Paso 9: Clonado de máquinas virtuales
- 10 Paso 10: Instantáneas de máquinas virtuales
- 11 Material complementario
Paso 1: Descarga de la imagen Cloud
Entramos en http://cloud.debian.org/images/cloud/ y descargamos la imagen de Debian 12.
Puedes descargarla directamente con la orden wget:
curl -L -O https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2si comenzó a descargar verás una salida similar a esta:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 393 100 393 0 0 1369 0 --:--:-- --:--:-- --:--:-- 1369
37 428M 37 159M 0 0 19.8M 0 0:00:21 0:00:08 0:00:13 21.7M
...Espera hasta que la imagen esté descargada al 100%.
La imagen de Debian cloud viene con 2 GBytes de espacio por defecto, puedes ampliar el tamaño con la siguiente orden antes de usarla en la máquina virtual:
qemu-img resize debian-12-generic-amd64.qcow2 +8GEsto aumenta en 8 Gbytes la imagen, por tanto, quedas con una unidad virtual de almacenamiento de 10 GBytes.
Paso 2: Configuración de la imagen cloud con cloud-init
Cree el fichero meta-data.yaml en la carpeta donde tiene la imagen cloud que acaba de descargar. Dicho fichero tiene que contener:
instance-id: uvus-28oct26
local-hostname: uvus-servercambie 'uvus' por su identificador.
Cree también el fichero user-data.yaml:
#cloud-config
users:
- name: practica
sudo: ['ALL=(ALL) NOPASSWD:ALL']
shell: /bin/bash
plain_text_passwd: "coolpass"
lock_passwd: falsey por último cree el fichero network-config.yaml:
# network-config.yaml
version: 2
ethernets:
eth0:
match:
name: "en*"
dhcp4: trueAlternativamente, puede usar la orden virt-customize, que permite establecer la contraseña del usuario administrador de la imagen que hemos descargado.
virt-customize -a debian-13-generic-amd64.qcow2 --root-password password:coolpass --hostname servidorEl ejemplo anterior muestra cómo configurar la imagen descargada para que disponga del usuario root, y en este caso, la contraseña es coolpass.
Paso 3: Creación de máquina virtual
Para crear una máquina virtual con libvirt, tienes que hacer uso de virt-install con los ficheros de configuración de cloud-init.
virt-install --name miserver1 --memory 1024 --disk path=/home/pneira/28oct26/debian-12-generic-amd64.qcow2 --cloud-init user-data=user-data.yaml,meta-data=meta-data.yaml --network network="default" --os-variant generic --importsi configuró la imagen con virt-customize, entonces use:
virt-install --name mi-mv --memory 1024 --disk path=/home/usuario/debian-13-generic-amd64.qcow2 --network network=default --os-variant generic --importEn la orden anterior:
- Se crea una máquina virtual denominada mi-mv
- La memoria de la máquina virtual es de 1 GByte (1024 Mbytes)
- El --disk path indica la ruta a la imagen Cloud
- Se usa la configuración de red por defecto.
- Se especifica que la variante de sistema operativo genérico
- Se indica que se trata de una importación de una imagen con un sistema operativo ya instalado mediante --import
- Por defecto emplea 1 CPU virtual, lo que es suficiente. Opcionalmente, puede indicar --vcpus=NUM donde NUM es el número de CPUs para su máquina virtual.
Recuerde modificar el nombre de la máquina virtual mi-mv y actualizar la ruta a la imagen Cloud que ha descargado en el paso anterior.
Tras invocar este lo cual le aparecerá la pantalla de la máquina virtual en una ventana, puede salir de la pantalla al pulsar sobre "File -> Quit".
Paso 4: Acceso y gestión de la máquina virtual
El comando virt-install lanza inicialmente el programa virt-viewer siempre que haya iniciado la sesión mediante ssh con la opción -X.
Para volver acceder al teclado y pantalla de la máquina virtual en cualquier momento mediante el siguiente programa:
virt-viewer mi-mv &NOTA: Si observa un mensaje de error que indica "Cannot open display" significa que no ha iniciado sesión con ssh -X.
Para parar la máquina virtual:
virsh shutdown mi-mvPara listar las máquinas virtuales existentes y comprobar su estado:
virsh list --allPuede usar grep para localizar su máquina virtual y mostrar el estado en el que está.
virsh list --all | grep mi-mvPara lanzar una máquina virtual apagada, puede usar:
virsh start mi-mvSi necesita borrar una máquina virtual completamente (previamente apagada), puede hacerlo con:
virsh undefine mi-mvtras los cual ya no aparecerá en el listado de virsh list --all.
Paso 5: Ampliación de tamaño de la imagen Cloud
En el Paso 1 se amplió la unidad virtual de almacenamiento a 10 Gbytes mediante qemu-img.
En Debian 12 hay que hacer un paso más para completar la ampliación, desde dentro de la máquina virtual, hay que extender la partición para que ocupe todo el tamaño de la unidad virtual de almacenamiento:
growpart /dev/sda 1Tras esto, hay que extender el sistema de ficheros que está en dicha partición:
resize2fs /dev/sda1Con esto puedes comprobar que el sistema de ficheros es de 10 Gbytes, con la utilidad df:
df -hNOTA: En Debian 13 este paso no es necesario.
Paso 6: Configuración del teclado en la imagen Cloud
Por defecto, la imagen cloud viene con el teclado en inglés americano.
Puedes cambiarlo con la siguiente orden:
apt install kbdY seleccione "Other", después busque "Spanish". En general, deje lo preseleccionado para opciones que no entienda, solo cambien el idioma.
Si se equivoca en la selección de los menús, lo puede solucionar de esta manera:
dpkg-reconfigure keyboard-configuration
service keyboard-setup restartPaso 7: Configuración de la red en libvirt
Antes de ver los detalles de red, vamos a hacer una pequeña diferencia entre las dos ventanas que tenemos abiertas, virt-manager principal y virt-manager máquina virtual ejecutándose. En la primera tendremos las configuraciones generales y en la segunda tendremos las configuraciones de una máquina virtual concreta, en nuestro caso, la configuración de la máquina virtual.
Con esto, veremos dos formas de saber la IP de nuestra máquina virtual:
- En la ventana de nuestra máquina virtual, vamos a cambiar la vista y ver los detalles de nuestra máquina. Vista --> Detalles. Aquí tenemos toda la configuración de nuestra máquina, pero solo vamos a centrarnos en la Interfaz de red virtual, que es donde podremos ver cual es pa IP que tiene asiganada nuestra máquina y cual es la fuente de red que se está utilizando.
- La otra opción es utilizando comandos, podemos utilizar ip address en la consola de nuestra máquina virtual.
# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 3d:f0:ee:49:aa:22 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.168/24 brd 192.168.2.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::3e97:eff:fe39:dd20/64 scope link
valid_lft forever preferred_lft foreverQue nos permite comprobar que estamos utilizando la dirección IP 192.168.100.168.
Si la interfaz no muestra una dirección IP, puedes forzar la obtención de una dirección IP desde la máquina virtual para la interfaz ens3 con la orden:
dhcpcd ens3NOTA: Si usa la imagen cloud de Debian 12, entonces tiene que usar dhclient en lugar de dhcpcd:
dhclient ens3Vamos a comprobar ahora desde un terminal en el anfitrión que alcanzamos a nuestra máquina virtual.
ping 9.9.9.9Deberíamos de ver una salida similar a la siguiente:
PING 192.168.100.168 (192.168.100.168) 56(84) bytes of data.
64 bytes from 192.168.100.168: icmp_seq=1 ttl=64 time=0.397 ms
64 bytes from 192.168.100.168: icmp_seq=2 ttl=64 time=0.409 ms
64 bytes from 192.168.100.168: icmp_seq=3 ttl=64 time=0.321 msPuede pararlo con ctrl-C.
Compruebe también que la resolución de nombre funciona adecuadamente, mediante:
ping www.us.es
</syntaxhighligh>
Si hubiere algún problema de conectividad la salida sería de este tipo:
<syntaxhighlight lang="bash">
PING 192.168.100.168 (192.168.100.168) 56(84) bytes of data.
From 192.168.100.1 icmp_seq=1 Destination Host Unreachable
From 192.168.100.1 icmp_seq=2 Destination Host Unreachable
From 192.168.100.1 icmp_seq=3 Destination Host UnreachableEn dicho caso, puedes forzar la obtención de una dirección IP con la orden:
dhcpcd ens3Esto quiere decir que la configuración de red es incorrecta, o quizás que la dirección IP de tu máquina virtual no es 192.168.100.168 :-).
Esta configuración de red es efímera, en el siguiente reinicio de la máquina virtual tendrá que invocar a dhcpcd.
Para realizar la configuración de manera permanente, puede configurar netplan para que la máquina virtual obtenga IP por DHCP automáticamente en tiempo de arranque con la siguiente configuración en /etc/netplan/ens3.yaml.
network:
version: 2
renderer: networkd
ethernets:
ens3:
dhcp4: truePara evitar un mensaje de WARNING, asegúrese de que el fichero tiene los permisos adecuados:
chmod 600 /etc/netplan/ens3.yamltras crear este fichero, puedes aplicar los cambios con:
netplan applyDispones de más información suplementaria sobre la configuración de red en libvirt.
Paso 8: Activación del servicio de ssh
Para configurar el servicio de ssh en su máquina virtual, pare su máquina virtual:
virsh shutdown mi-mvGenere un par de claves pública y privada desde su cuenta del servidor de la asignatura:
ssh-keygenPara consultar la clave pública generada:
cat ~/.ssh/id_rsa.pubConfigure de nuevo la imagen cloud con virt-customize haciendo uso de la opción --ssh-inject:
virt-customize -a debian-13-generic-amd64.qcow2 --root-password password:coolpass --ssh-inject root:string:"ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAr8IhH+eH3FAq+gKqPvDazeU5QOGMty3NJlP1Oqt6XZkZvJsEXAMPLEkeyFa2IJfjL9SlQXs1vxB7ivj4AGz4sWkvgNvP1OFHHyGkEw== user@example.com"donde la cadena entre comillas que comienza por ssh-rsa se trata del contenido de su fichero .ssh/id_rsa.pub.
Ahora, volvemos a lanzar la máquina virtual:
virsh start mi-mvAccedemos a ella mediante virt-viewer:
virt-viewer mi-mvDesde dentro de la máquina virtual, creamos las claves pública y privadas del servidor:
ssh-keygen -ATras esto, puede activar el servicio de ssh:
systemctl enable --now sshPuede comprobar el estado del servicio mediante:
systemctl status sshPara comprobar que funciona correctamente, desde la sesión ssh del servidor de la asignatura:
ssh root@10.141.28.25Donde tiene que reemplazar 10.141.28.25 por la IP de su máquina virtual.
Paso 9: Clonado de máquinas virtuales
Vamos a reutilizar la configuración y la máquina virtual creada, para crear varias iguales. Empecemos:
- Apagamos la máquina virtual si la tenemos encendida, para que nos permita hacer un clonado. Máquina virtual --> Apagar --> Apagar
- En la ventana principal, pulsar botón derecho encima de la máquina virtual que queramos clonar, y pulsar Clonar ...
- En la ventana que nos aparece, por defecto seleccionará la misma red y creará una MAC diferente para la nueva máquina y clonará la imagen que usamos de almacenamiento. Le damos un nuevo nombre a nuestra máquina, y pulsamos en Clonar.
- Repetimos este paso hasta que tengamos toda las máquinas virtuales deseadas, en nuestro caso, solo crearemos una para probar los detalles de red.
Ahora arrancaremos la máquina original y la clonada, y vamos a comprobar que ambas están en la misma red y que pueden verse entre ellas. Como comentamos en el paso anterior, comprobaremos la IP de la máquina virtual original y de la clonada, y haremos ping desde dentro de las máquinas para comprobar que se ven.
Es posible clonar una máquina virtual desde el intérprete de órdenes:
virt-clone --original mi-mv --name mi-mv-clone --auto-cloneEjemplo:
- Máquina original tiene IP 192.168.100.168
- Máquina clonada tiene IP 192.168.100.169
- Desde la máquina original haremos un ping 192.168.100.169
- Desde la máquina clonada haremos un ping 192.168.100.168
- Desde ambas máquinas, comprobaremos que la puerta de enlace es la misma, haciendo un ip route.
- Desde la máquina host, deberíamos de obtener ping hacía las dos máquinas
Paso 10: Instantáneas de máquinas virtuales
Las instantáneas nos permiten almacenar una captura del estado de la ejecución de una máquina virtual en un cierto instante tiempo que podremos restaurar cuando sea necesario. Las instantáneas te serán útiles si tienes trabajo a medio hacer en la máquina virtual, de manera que quieras guardar lo que has hecho para restaurarlo posteriormente.
Para crear una instantánea, accedemos a la máquina virtual en ejecución, podemos hacerlo con:
virsh snapshot-create-as --domain mimv --name snapshot-mimv-131125 --description "mi snapshot de prueba"La creación de instantáneas toma algo de tiempo, sé paciente.
Puedes listar los snapshots disponibles para una máquina virtual en:
virsh snapshot-list mimvPuedes resturar un snapshot mediante:
virsh snapshot-revert mimv snapshot-mimv-131125Puedes almacenar tantas instantáneas como quieras. El nombre Captura de pantalla es una traducción poco afortunada del inglés snapshot que se refiere al término instantánea.
Material complementario
Además, existe material complementario sobre libvirt que no es parte del contenido del examen pero que podría ser de su interés.
