Saltar a contenido

Incus

En este artículo

Información

Incus es un gestor de contenedores de sistema y máquinas virtuales de código abierto. Es un fork de LXD y proporciona una herramienta sencilla pero potente para gestionar contenedores Linux y máquinas virtuales en una plataforma unificada.

Incus. Funcionalidades clave

  • Gestión de contenedores y VM: Incus permite ejecutar contenedores de sistema Linux y máquinas virtuales QEMU/KVM completas a través de una única interfaz.
  • Aislamiento de procesos: Los contenedores operan en un entorno aislado con sus propios sistemas de archivos, interfaces de red y procesos.
  • Capacidades de red: Soporte integrado para varios tipos de redes: bridges, NAT, VLANs y redes overlay para contenedores.
  • Gestión de almacenamiento: Sistema de pool de almacenamiento flexible que admite diferentes backends: dir, btrfs, ZFS, LVM.
  • Snapshots y migración: Creación de snapshots del estado del contenedor y migración en vivo entre hosts sin detener los servicios.
  • Perfiles de configuración: Perfiles reutilizables para el despliegue rápido de contenedores con parámetros predefinidos.
  • Limitación de recursos: Control preciso sobre la CPU, memoria, E/S de disco y ancho de banda de red para cada contenedor.
  • REST API: API HTTP con todas las funciones para la automatización e integración con sistemas externos.

    incus config set <name> limits.cpu=4
    

  • Interfaz web: Panel de gestión web integrado para el control visual de la infraestructura.

  • Biblioteca de imágenes: Acceso a una amplia colección de imágenes listas para usar de varias distribuciones Linux.
  • Clústeres: Capacidad de combinar múltiples hosts en un único clúster para una gestión distribuida.

Funcionalidades de implementación

ID Nombre del Software SO Compatible VM BM VGPU GPU CPU Mín. (Núcleos) RAM Mín. (GB) HDD/SSD Mín. (GB) Dominio Personalizado Activo
234 Linux Containers Incus Debian 13 + + + + 2 2 50 No PEDIR

Para obtener información sobre las funcionalidades de implementación de este software, consulte este enlace.

Nota

A menos que se especifique lo contrario, instalamos por defecto la última versión de lanzamiento del software desde el sitio del desarrollador o los repositorios del sistema operativo.

Primeros pasos tras la implementación de Incus

Tras el pago, se enviará una notificación por correo electrónico a la dirección especificada durante el registro indicando que el servidor está listo para operar. Incluirá la dirección IP del VPS y las credenciales de acceso. Los clientes de nuestra empresa gestionan el equipo a través del Server Management Panel and APIInvapi.

Los datos de autenticación pueden encontrarse en la pestaña Configuration >> Tags del panel de gestión del servidor o en el correo electrónico enviado:

  • Enlace para acceder a la interfaz web de Incus: en la etiqueta webpanel (puerto 8443, HTTPS)

Atención

Para acceder a la interfaz web, debe utilizar HTTPS y aceptar el certificado autofirmado en su navegador.

Al acceder por primera vez a la interfaz web de Incus, el navegador advertirá sobre una conexión insegura debido al certificado autofirmado. Debe aceptar el certificado para continuar:

Tras aceptar el certificado, se abrirá la página de inicio de sesión. Haga clic en el botón Login with TLS para iniciar el proceso de autenticación:

El sistema le redirigirá a la página para añadir un certificado existente:

Seleccione la pestaña Trust token y siga las instrucciones:

  1. En la terminal del servidor, ejecute el comando para generar un token:

    incus config trust add myclient
    

  2. El sistema generará un token que debe ser copiado:

  3. Pegue el token obtenido en el campo de texto correspondiente de la página de autenticación y haga clic en Import.

Tras una autenticación exitosa, se abrirá la página principal de la interfaz web con la lista de instancias.

Creación de un nuevo contenedor mediante la interfaz web

Para crear un nuevo contenedor, haga clic en el botón Create instance en la esquina superior derecha de la interfaz:

Se abrirá un formulario de creación de instancia con varias secciones de configuración. Para seleccionar una imagen base, haga clic en el botón Browse images. Se abrirá una ventana de selección de imágenes con filtros por distribución, versión, variante, arquitectura y tipo:

Las siguientes secciones de configuración están disponibles:

  • Main configuration — parámetros básicos del contenedor: nombre, descripción, tipo de instancia (contenedor o máquina virtual), imagen base y perfiles asignados;
  • Devices — gestión de dispositivos del contenedor:
  • Disk — configuración del dispositivo de disco y punto de montaje;
  • Network — configuración de la interfaz de red;
  • GPU — conexión de aceleradores gráficos;
  • Proxy — configuración de redireccionamiento de puertos entre el host y el contenedor;
  • Other — tipos de dispositivos adicionales;
  • Resource limits — limitación de recursos: procesador (CPU), RAM, operaciones de E/S de disco;
  • Security policies — políticas de seguridad: configuración de aislamiento, privilegios y perfiles de seguridad (AppArmor, SELinux);
  • Snapshots — gestión de snapshots del estado del contenedor para respaldo y recuperación;
  • Migration — parámetros de migración del contenedor entre hosts;
  • Boot — ajustes de arranque: orden de dispositivos de arranque, inicio automático al arrancar el sistema;
  • Cloud init — configuración de inicialización automática del contenedor mediante cloud-init (usuarios, red, paquetes, scripts).

Seleccione la imagen deseada haciendo clic en el botón Select junto a ella:

Tras seleccionar una imagen, rellene los parámetros básicos:

  • Instance name — nombre del contenedor;
  • Description — descripción (opcional);
  • Instance type — tipo de instancia (Container o Virtual Machine);
  • Profiles — perfiles de configuración.

Para iniciar el contenedor inmediatamente después de la creación, haga clic en Create and start. Para crearlo sin iniciarlo, utilice el botón Create.

Monitorización del estado del contenedor

Durante el despliegue del contenedor, se muestra el progreso de la descarga de la imagen. El estado "Setting up" con la indicación de progreso de descarga muestra el progreso actual de la creación de la instancia. Una vez completada la instalación, el estado cambiará a "Running" con un indicador verde:

Gestión de servicios

Comprobar estado:

systemctl status incus

Reiniciar servicio:

systemctl restart incus

Detener servicio:

systemctl stop incus

Iniciar servicio:

systemctl start incus

Ver logs:

journalctl -u incus -f
tail -f /var/log/incus/incusd.log

Configuración inicial de la infraestructura

Tras el despliegue del servidor, se recomienda realizar la configuración inicial de la infraestructura de Incus.

Creación de un pool de almacenamiento

Un pool de almacenamiento define dónde se almacenarán los datos del contenedor:

incus storage create default dir source=/var/lib/incus/storage-pools/default

Comprobar los pools de almacenamiento creados:

incus storage list

Para ver información detallada sobre un pool:

incus storage show default

Configuración de red

Crear un bridge NAT para contenedores con direccionamiento IPv4 automático:

incus network create incusbr0 ipv4.address=auto ipv6.address=none

Comprobar la configuración de red:

incus network list

Ver la configuración de red:

incus network show incusbr0

Configuración del perfil predeterminado

El perfil default define la configuración básica para los nuevos contenedores. Añadir un disco raíz al perfil:

incus profile device add default root disk path=/ pool=default

Añadir una interfaz de red al perfil:

incus profile device add default eth0 nic network=incusbr0

Comprobar la configuración del perfil:

incus profile show default

Creación y gestión de contenedores

Creación de un contenedor

Ejemplo de creación de un contenedor Debian 12 con límites de recursos:

incus launch images:debian/12 deb12 --profile default \
  -c limits.cpu=2 -c limits.memory=2GiB

Parámetros del comando:

  • images:debian/12 - imagen desde el repositorio público
  • deb12 - nombre del contenedor
  • --profile default - uso del perfil predeterminado
  • -c limits.cpu=2 - límite a 2 núcleos de CPU
  • -c limits.memory=2GiB - límite de memoria de 2 GB

Visualización de contenedores

Lista de todas las instancias:

incus list

La salida contendrá información sobre el estado, las direcciones IP y el tipo de cada contenedor.

Gestión del estado del contenedor

Iniciar un contenedor:

incus start <name>

Detener un contenedor:

incus stop <name>

Reiniciar un contenedor:

incus restart <name>

Eliminar un contenedor (requiere detenerlo):

incus delete <name>

Eliminar por la fuerza un contenedor en ejecución:

incus delete <name> --force

Acceso al contenedor

Conectarse mediante bash:

incus exec deb12 -- bash

Conectarse a la consola TTY:

incus console deb12

Para salir de la consola, utilice la combinación de teclas Ctrl+a q.

Redireccionamiento de puertos (Port Forwarding)

Para acceder a los servicios dentro de un contenedor desde una red externa, se utiliza el redireccionamiento de puertos mediante un dispositivo proxy:

incus config device add deb12 web proxy \
  listen=tcp:0.0.0.0:8080 connect=tcp:127.0.0.1:80

Este comando redirige el puerto 8080 del host al puerto 80 del contenedor.

Ejemplo para múltiples puertos:

HTTP:

incus config device add mycontainer http proxy \
  listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80

HTTPS:

incus config device add mycontainer https proxy \
  listen=tcp:0.0.0.0:443 connect=tcp:127.0.0.1:443

SSH:

incus config device add mycontainer ssh proxy \
  listen=tcp:0.0.0.0:2222 connect=tcp:127.0.0.1:22

Gestión de la configuración del contenedor

Visualización de la configuración

Ver la configuración completa y expandida del contenedor:

incus config show <name> --expanded

Ver la configuración básica sin perfiles:

incus config show <name>

Cambio de parámetros

Establecer parámetros de configuración:

Limitación de CPU:

incus config set <name> limits.cpu=4

Limitación de memoria:

incus config set <name> limits.memory=4GiB

Limitación de E/S de disco:

incus config set <name> limits.disk.priority=5

Autoinicio del contenedor:

incus config set <name> boot.autostart=true

Añadir dispositivos

Sintaxis general para añadir dispositivos:

incus config device add <name> <device-name> <type> key=value

Ejemplos:

Añadir un disco adicional:

incus config device add mycontainer data disk \
  source=/data/mycontainer pool=default

Añadir una interfaz de red adicional:

incus config device add mycontainer eth1 nic \
  network=incusbr1 name=eth1

Montar un directorio del host en un contenedor:

incus config device add mycontainer shared disk \
  source=/host/path path=/container/path

Eliminar un dispositivo:

incus config device remove <name> <device-name>

Trabajar con snapshots y migración

Creación de snapshots

Los snapshots permiten guardar el estado del contenedor para una recuperación posterior:

incus snapshot <name> <snapshot-name>

Ejemplo:

incus snapshot deb12 before-update

Lista de snapshots del contenedor:

incus info <name>

Restaurar desde un snapshot

incus restore <name> <snapshot-name>

Ejemplo:

incus restore deb12 before-update

Eliminar un snapshot:

incus delete <name>/<snapshot-name>

Renombrar y copiar

Renombrar un contenedor:

incus move <name> <newname>

Copiar un contenedor en el mismo host:

incus copy <name> <newname>

Copiar un contenedor a otro host Incus:

incus copy <name> <remote>:<newname>

Para trabajar con hosts remotos, primero debe añadir un remoto:

incus remote add myremote https://remote-ip:8443

Gestión de imágenes

Visualización de imágenes

Lista de imágenes locales:

incus image list

Lista de imágenes en el repositorio remoto:

incus image list images:

Buscar una distribución específica:

incus image list images: debian
incus image list images: ubuntu

Copiar imágenes

Copiar una imagen desde el repositorio público con actualización automática:

incus image copy images:debian/12 local: --auto-update

Copiar una imagen con un alias:

incus image copy images:debian/12 local: --alias debian12

Creación de una imagen desde un contenedor

incus publish <container-name> --alias my-custom-image

Eliminación de imágenes

incus image delete <image-fingerprint>

o por alias:

incus image delete <alias>

Interacción de red

Gestión de red

Lista de redes:

incus network list

Ver la configuración de red:

incus network show <network-name>

Crear una nueva red:

# Creando una red bridge
incus network create mybr0 \
  ipv4.address=10.10.10.1/24 \
  ipv4.nat=true \
  ipv6.address=none

# Creando una red macvlan
incus network create mymacvlan \
  type=macvlan \
  parent=eth0

Editar una red:

incus network edit <network-name>

Eliminar una red:

incus network delete <network-name>

Reglas de redireccionamiento de red (Forwarding)

Crear una regla de reenvío para el redireccionamiento de puertos:

incus network forward create incusbr0 <external-ip>
incus network forward port add incusbr0 <external-ip> tcp 80 <container-ip> 80

Gestión de almacenamiento

Gestión de pools de almacenamiento

Lista de pools:

incus storage list

Ver información del pool:

incus storage show <pool-name>

Crear un pool de almacenamiento:

Pool basado en directorio (dir):

incus storage create mypool dir source=/var/lib/incus/pools/mypool

Pool Btrfs:

incus storage create mybtrfs btrfs source=/dev/sdb

Pool ZFS:

incus storage create myzfs zfs source=/dev/sdc

Editar un pool:

incus storage edit <pool-name>

Eliminar un pool:

incus storage delete <pool-name>

Gestión de volúmenes

Crear un volumen personalizado:

incus storage volume create <pool-name> <volume-name>

Lista de volúmenes en un pool:

incus storage volume list <pool-name>

Adjuntar un volumen a un contenedor:

incus config device add <container> <device-name> disk \
  pool=<pool-name> \
  source=<volume-name> \
  path=/mount/path

Copiar un volumen:

incus storage volume copy <pool>/<volume> <pool>/<new-volume>

Eliminar un volumen:

incus storage volume delete <pool-name> <volume-name>

Configuración de NAT y enrutamiento

En algunos casos, puede ser necesaria la configuración manual de reglas de NAT y enrutamiento para proporcionar acceso a la red externa al contenedor.

Cambiar a nftables

update-alternatives --set iptables /usr/sbin/iptables-nft
update-alternatives --set ip6tables /usr/sbin/ip6tables-nft
update-alternatives --set arptables /usr/sbin/arptables-nft
update-alternatives --set ebtables /usr/sbin/ebtables-nft

Habilitar el reenvío de IP (IP forwarding)

sysctl -w net.ipv4.ip_forward=1

Para una aplicación permanente, añada a /etc/sysctl.conf:

net.ipv4.ip_forward=1

Reiniciar Incus tras los cambios:

systemctl restart incus

Configuración de la tabla NAT

Crear la tabla NAT y la cadena POSTROUTING:

nft add table ip nat
nft add chain ip nat POSTROUTING '{ type nat hook postrouting priority srcnat; }'

Añadir una regla de masquerade para la subred del contenedor:

nft add rule ip nat POSTROUTING oifname "ens1" ip saddr 10.1.4.0/24 counter masquerade

Nota

Reemplace ens1 con el nombre de su interfaz de red externa y 10.1.4.0/24 con la subred del bridge de Incus.

Configuración de la cadena FORWARD

Crear la tabla filter y la cadena FORWARD:

nft add table ip filter
nft add chain ip filter FORWARD '{ type filter hook forward priority 0; policy accept; }'

Añadir reglas para permitir el tráfico:

Permitir tráfico desde los contenedores hacia el exterior:

nft insert rule ip filter FORWARD iifname "incusbr0" oifname "ens1" accept

Permitir el regreso del tráfico establecido/relacionado:

nft insert rule ip filter FORWARD iifname "ens1" oifname "incusbr0" ct state established,related accept

Comprobar las reglas de nftables

Ver todas las reglas:

nft list ruleset

Guardar reglas (para Debian/Ubuntu):

Instalar el paquete para guardar reglas:

apt-get install nftables

Guardar las reglas actuales:

nft list ruleset > /etc/nftables.conf

Habilitar la carga automática:

systemctl enable nftables

Nota

La información detallada sobre todas las capacidades de Incus se encuentra en la documentación oficial para desarrolladores.

Pedir un servidor con Incus mediante la API

Para instalar este software utilizando la API, siga estas instrucciones.

question_mark
Is there anything I can help you with?
question_mark
AI Assistant ×