Proxmox: Monta tu propio laboratorio de máquinas virtuales
Por fin ha ocurrido. ¡La Raspberry PI se me ha quedado corta! 😱 Llevaba tiempo dándole vueltas a la idea de hacerme con un servidor que me permitiera levantar tantas máquinas como quisiera para tener un laboratorio como tal. Tras darle muchas vueltas he terminado haciéndome con un equipo de segunda mano con el fin de destinarlo a ese entorno de pruebas. El candidato final ha sido el HP EliteDesk 800 35W G2 Desktop Mini, con las siguientes características:
- Intel Core i5-6500T
- 16GB de RAM (2 slot de 8GB cada uno)
- 256GB de disco SSD (KingStar... ni idea de qué marca es, pero al ser para pruebas tampoco me preocupa mucho que sea de lo más fiable)
Como veis, es un ordenador con un procesador ya bastante antiguo, pero de bajo consumo y que da de sobra para lo que lo necesito, y todo por aproximadamente unos 200€. Venía con W10 Pro... y digo bien, "venía", pues tardé poco en formatearlo y meterle otro sistema operativo. 🙈
Mi primera elección fue instalarle un Debian y, a partir de ahí, levantar las imágenes Docker e instalar los servicios que necesitara. Sin embargo, he decidido ir un poco más allá. Ya que está bien servido de RAM... ¿por qué no tirar a una virtualización directa? Y de esa pregunta salió la decisión de instalarle Proxmox.
Instalación del sistema operativo
Proxmox es una solución open source para la virtualización de servidores. Si bien está enfocado al entorno empresarial, podemos utilizarlo de manera gratuita para uso personal (no tendremos acceso a las actualizaciones que mantienen, pero hay un workaround que veremos). Es una distribución de GNU/Linux basada en Debian, con una versión modificada del kernel de Ubuntu LTS. Soporta el despliegue y gestión de máquinas virtuales y contenedores basados en LXC, y trae incorporada una interfaz gráfica vía web para su administración.
La versión que yo he instalado es la 7.2, que a fecha de esta entrada es la última publicada.
Preparación del disco de instalación
Lo primero que tenemos que hacer es descargarnos la imagen de su página de descargas. Una vez la tenemos, vamos a preparar un USB para que la podamos instalar desde ahí.
Necesitaremos un USB de, al menos, 2GB. En las instrucciones dicen que basta con 1GB (de hecho, la imagen pesa unos 990MB aprox), pero a mí me dio error y sólo me ha funcionado en uno de 2GB (o más). Así que... si tienes uno de 1GB y quieres probar, adelante, y si te funciona, puedes decírmelo en los comentarios, así será cosa de mi USB solamente. 😄
Instrucciones para Linux
Si estamos en un equipo Linux, lo primero que tenemos que hacer es identificar nuestro USB. Para ello, desde la terminal ejecutaremos el comando lsblk
, después conectaremos el pendrive y volveremos a ejecutar el comando anterior. Veremos que hay un nuevo dispositivo, ésa será nuestra unidad. Con ella identificada, ya podemos hacer uso de dd
para escribir la imagen (donde XYZ
será el ID de nuestra unidad USB):
# dd bs=1M conv=fdatasync if=./proxmox-ve_*.iso of=/dev/XYZ
Instrucciones para macOS
Si, como fue mi caso, estamos desde un equipo de la manzana, tendremos que hacer algún paso extra más. Lo primero será convertir la imagen ISO a IMG con el comando hdiutil
:
$ hdiutil convert -format UDRW -o proxmox-ve_*.dmg proxmox-ve_*.iso
Una vez la tengamos, pasamos a identificar nuestra unidad USB. Mediante diskutil list
y con el pendrive ya enchufado, podremos ver qué diskX
es la nuestra. Normalmente las unidades 0 y 1 son las reservadas para los discos internos, pero aseguraos bien de cuál es la vuestra. Un dato que suele dar la pista es el campo SIZE
, ya que no creo que tengamos muchos discos de 2GB instalados en nuestro ordenador o como partición de nuestro disco duro.
Con la unidad identificada, procedemos a desmontarla:
# diskutil unmountDisk /dev/diskX
Y procedemos a grabar la imagen DMG en la unidad:
# dd if=proxmox-ve_*.dmg of=/dev/rdiskX bs=1m
El uso de rdiskX
en lugar de diskX
es intencionado, pues aumenta la velocidad de escritura, y de esta forma se grabará mucho más rápido.
Instrucciones para Windows
Seré sincero: no tengo Windows y no lo he probado, pero según la documentación, programas como Etcher o Rufus son útiles para grabar la imagen, así que yo os lo dejo aquí por si os es de ayuda.
Instalación de Proxmox
Una vez tenemos la imagen grabada en el USB, procedemos a conectarla al ordenador y lo encendemos. Deberemos asegurarnos que la BIOS tiene activado el boot order para que lea primero de la unidad USB antes que del disco duro.
Una vez seleccionamos en el menú Install Proxmox VE y aceptamos los términos y condiciones de la licencia, deberemos elegir dónde vamos a instalarlo. Para ello, en la opción de Target Harddisk nos aseguraremos de que aparece el disco duro del equipo, y podemos hacer 2 cosas, aceptarlo como tal o afinar un poco la instalación. Iremos por la segunda opción, por lo que pulsaremos en Options.
En la ventana que se nos abre, seleccionaremos en Filesystem el formato ext4 y, en hdsize, le vamos a poner 64.0 GB. Es el espacio que vamos a dejar para la instalación del sistema, así que incluso con 32GB nos llegaría, pero vamos a curarnos en salud.
Como podéis ver al desplegar la opción de filesystem, el sistema nos deja elegir puntos de montaje en RAID, con el fin de hacerlo mucho más estable... Pero sólo tengo un disco, es un entorno de pruebas y mejor ir aprendiendo poco a poco, así que por ahora un ext4 es más que suficiente.
Continuamos con la instalación y seleccionamos el país, la zona horaria y el layout del teclado. Después seleccionamos la contraseña para el usuario root, la cual necesitaremos más adelante para acceder a la GUI de Proxmox, y un email válido, el cual será usado para enviar información sobre actualizaciones de paquetes o mensajes de error provenientes de los CRON.
Por último, necesitamos configurar la conexión de red. Al ser un servidor, deberíamos asignarle una IP estática. Seleccionamos la interfaz de red (idealmente la cableada) e introducimos los datos que cuadren con la configuración de LAN que tengamos. Por ejemplo:
- Hostname (FQDN): dev.lan
- IP Address: 192.168.2.22
- Netmask: 255.255.0.0
- Gateway: 192.168.2.1
- DNS Server: 192.168.2.11
¡Y listo! Comenzará la instalación y ésta será la última vez que necesitemos tenerlo conectado a un monitor. En cuanto el servidor se reinicie (ya con el USB desconectado), podremos acceder a él de manera remota a través de la IP que le hemos asignado, vía HTTPS y en el puerto 8006 (según la configuración anterior: https://192.168.2.22:8006
)
Primera toma de contacto
Una vez hemos instalado el sistema, ya podemos acceder desde un navegador de nuestra LAN. Tecleamos https://<IP-DEL-SERVIDOR:8006
y veremos cómo nos pide acceso. Recordad que el usuario es root, la contraseña la pusimos durante el proceso de instalación y el realm lo dejaremos como está (Linux PAM standard authentication). En cuanto al idioma, sentíos libres de seleccionar el que más os guste 😜.
Tras hacer login, nos saldrá un aviso informándonos de que no tenemos una suscripción válida... Este mensaje será, en parte, el precio a pagar cada vez que accedamos a la interfaz de Proxmox por usar la versión gratuita. Simplemente lo aceptamos y podemos continuar.
Si nos fijamos en la pantalla, a la izquierda, al seleccionar la vista de servidor, veremos que nos aparece un Datacenter y, colgado de él, un servidor que tendrá el nombre que le dimos durante la instalación (en mi caso, dev). Éste será nuestro nodo (si tuviéramos más, al agregarlos los veríamos aquí, pero por ahora sólo habrá uno). Al desplegarlo, veremos que tiene asociados un par de volúmenes, local y local-lvm. De momento los ignoraremos y vamos a registrar todo el espacio que dejamos libre en la instalación. ¿Recordáis que sólo asignamos 64GB de disco pese a que tenemos 256GB? Pues vamos a recuperarlos. 💪
Creación de un nuevo volumen de datos
Para crear nuestro volumen de datos, necesitamos acceder a la consola de Proxmox. Para ello, seleccionaremos el nodo y veremos cómo, a su derecha, se nos muestra un panel de opciones. Si marcamos la opción de Shell se nos abrirá una consola de root dentro del nodo.
A través de ella, vamos a proceder a crear nuestro nodo. Primero, vemos cómo está particionado nuestro disco duro mediante el comando fdisk -l
. Como veis, aparecen 3 particiones, que son las creadas durante la instalación. Y además vemos cómo se nos dice que el disco sda1
tiene 223.57GiB de capacidad, mientras que, según las particiones, apenas suman 64... Así que vamos a crear una partición con el espacio restante.
Comenzamos metiendo el comando fdisk /dev/sda
(que es el disco principal) y usaremos la opción n
para crear una nueva partición. Como queremos usar todo el espacio restante, simplemente pulsamos Enter, tanto para el número de partición (sigamos la secuencia lógica, si teníamos 3, ésta será la 4), como para indicar el primer y último sector. Una vez nos dice que se ha creado una nueva partición procedemos a escribir los cambios tecleando el comando w
. Tras esto, si repetimos la orden fdisk -l
veremos cómo ahora nos aparecen 4, y no 3, particiones en el disco, siendo la última de la capacidad "perdida" que teníamos.
Una vez tenemos la partición creada, el siguiente paso será formatearla. Mediante el comando mkfs.ext4 /dev/sda4
le daremos a la partición el formato ext4, y ya podremos trabajar con la partición. Sin embargo, si reiniciamos, la partición no estará disponible para ser usada, por lo que debemos fijar el cambio en fstab
. Editamos el fichero con nano /etc/fstab
(o Vim, aquí cada uno...) y añadimos la siguiente línea al final del fichero:
/dev/sda4 /media/contenedores ext4 defaults,errors=remount-ro 0 1
¡Guardamos los cambios y listo! Ya tendremos la partición preparada para automontarse en el directorio indicado (en mi caso: /media/contenedores
). Ahí será donde tengamos el almacenamiento de todas nuestras máquinas virtuales.
Volviendo a la interfaz web, el siguiente paso será seleccionar el Datacenter y, en el menú, seleccionar Storage y en Add, pulsar sobre Directory.
Ahí deberemos darle un ID a nuestro volumen, indicarle la ruta donde está montado (/media/contenedores
) y, en content, marcar todas las opciones. De paso dejamos marcado Enable y desmarcado Share, ya que por ahora no nos hace falta. En cuanto a nodes, podemos dejarlo en All, ya que sólo tenemos uno, pero si queremos ser más precisos, podemos seleccionar el nuestro.
¡Y con esto tendríamos nuestro Proxmox listo para crear máquinas virtuales y empezar a funcionar!
Actualización de paquetes
Como comentaba antes, Proxmox es de código abierto y gratuito para uso personal... Pero sin una suscripción no tenemos acceso a las actualizaciones del sistema. Proxmox nos proporciona una URL de actualizaciones que no recomiendan para entornos de producción, pero nosotros estamos montando esto para nuestro hogar y, en este caso concreto además, para un laboratorio de pruebas, así que... ¡vamos allá!
Si seleccionamos el nodo, en el menú de Updates ->
Repositories veremos los repositorios de actualizaciones y paquetes que tiene Proxmox. Como habréis imaginado, es el contenido del fichero /etc/apt/sources.list
y sub-ficheros. El último (https://enterprise.proxmox.com/debian/pve
) es el que usa Proxmox para actualizar sus paquetes, y requiere de una suscripción activa. Como no tenemos intención por ahora de conseguir una, lo seleccionaremos y pulsaremos sobre Disable. A continuación, haremos clic sobre el botón de Add y en el cuadro que nos sale seleccionaremos el repositorio No-Subscription y pulsaremos en el botón de Add. Veréis que nos aparece marcado con un ⚠️. Una vez hecho, para actualizar el sistema, pulsaremos sobre Reload y actualizará los paquetes correspondientes.
Crear una nueva máquina virtual
A continuación vamos a crear una nueva máquina virtual. Lo primero que necesitaremos será la imagen de disco que queremos instalar. Para ello tenemos 2 opciones: Nos descargamos el ISO y lo subimos a Proxmox, o copiamos la URL y dejamos que se lo descargue directamente. En cualquiera de las dos opciones comenzaremos por seleccionar el almacenamiento local y, en ISO Images, haremos clic en Upload o Download from URL, según nuestra opción preferida. Lo que estamos haciendo es hacer uso del almacenamiento local para tener ahí las imágenes ISO de los sistemas que vamos a desplegar (en lugar de ocupar espacio en el almacenamiento que hemos reservado para las imágenes de los discos de las MV).
Una vez tenemos la imagen, procedemos a crear nuestra máquina virtual. Arriba a la derecha tenemos el botón de Create VM. Lo pulsamos y vamos rellenando las opciones que nos va mostrando. Empezamos por los datos generales de la máquina virtual:
- Node: Nodo donde queremos crear nuestra VM.
- VM ID: ID numérico de la máquina virtual. No puede repetirse, y por defecto se nos recomienda empezar con el 100.
- Name: Nombre que tendrá la VM (y su hostname).
- Start at boot: Indicamos que queremos que la VM arranque cada vez que Proxmox se inicie.
El resto de opciones de esta pestaña se explican por sí solas, pero las dejaremos en blanco de momento.
En OS indicaremos dónde está la imagen ISO que queremos utilizar. Recordad que la subimos al Storage local, por lo que lo seleccionamos y, en ISO image, nos aparecerá listada. La seleccionamos y revisamos que los datos de Guest OS nos cuadren (en nuestro caso, un Linux versión 5.x).
Pulsamos sobre next y en la pestaña de System vamos a dejar todo como está. Podemos seleccionar la BIOS a usar, el controlador SCSI... pero para lo que queremos con los valores por defecto es suficiente.
En Disks vamos a crear el almacenamiento para la MV. Seleccionaremos en Storage nuestro volumen dedicado a ello (contenedores), y le daremos un tamaño de disco. Recordad que debe ser menor que el Storage y que puede que haya más máquinas en él, con lo que hay que vigilar que no nos pasemos. Para este caso, una máquina de prueba, con 32GB será más que suficiente. El resto de valores los podemos dejar como están.
En la pestaña de CPU podemos asignarle tantos sockets y cores a nuestra máquina como queramos (teniendo como máximo los de la CPU física, claro... que para mi caso son 4 sockets y 128 cores). Esto nos determinará el total de cores que tendrá la máquina disponibles y podremos jugar de paso con los valores de VCPU, CPU Units, limit... Un día profundizaré en esto, pero de momento con 1 socket y 2 cores tiene más que suficiente. En Type marcaremos la opción de host para simplificarnos la vida por el momento.
Para la memoria, tenemos disponible toda la RAM del sistema excepto 1-2GB, que se los reserva Proxmox para funcionar. Es decir, en mi caso, de los 16GB que tiene el servidor, tengo disponibles un máximo de 14-15. Como estamos creando una máquina modesta, con 2048MB de RAM será más que suficiente.
En los ajustes de red dejaremos todo como está, no vamos a manejar VLAN ni nada por el estilo de momento, así que continuamos con los valores por defecto.
Por último, sólo nos queda revisar toda la configuración y, si estamos de acuerdo, podremos pulsar en Finish. Antes de ello, si queremos que la máquina arranque en este mismo momento, marcaremos la casilla Start after created. Y si no, la iniciaremos manualmente después.
Una vez hecho esto, veremos cómo la máquina nos aparece colgando del nodo en el que la hemos creado, y cómo al seleccionarla nos aparecerán una serie de opciones en su menú que nos permitirán reconfigurar la máquina, cambiar el hardware, preparar snapshot, hacer copias de seguridad, manejar su firewall, los permisos de acceso... y acceder a la consola. Si pulsamos sobre ella, veremos cómo se nos abre una ventana a través de VNC que nos mostrará el monitor virtual, a través del cual podremos interactuar con nuestra VM como si de un monitor normal se tratara.
Y hasta aquí la primera parte de la que, seguramente, será una larga lista de entradas. A medida que vaya investigando, probando, rompiendo y volviendo a construir, iré publicando los avances, con el fin de reflejar el aprendizaje y ahorraros algún dolor de cabeza con suerte.
Si te ha gustado la entrada, o te ha sido útil y quieres ayudarme a pagar los gastos que conlleva el servidor y mantener así el blog libre completamente de anuncios, puedes hacer una donación en Bitcoin en la siguiente dirección: