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. Características principales

  • 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: puentes, NAT, VLANs, redes superpuestas para contenedores.
  • Gestión de almacenamiento: Sistema flexible de pools de almacenamiento que admite diferentes backends: dir, btrfs, ZFS, LVM.
  • Instantáneas y migración: Creación de instantáneas del estado del contenedor, 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.
  • API REST: API HTTP completa para automatización e integración con sistemas externos.
  • Interfaz web: Panel de gestión web integrado para el control visual de la infraestructura.
  • Biblioteca de imágenes: Acceso a una extensa colección de imágenes listas para usar de varias distribuciones Linux.
  • Clustering: Capacidad para 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 ORDER

Rutas y archivos principales de Incus:

  • Archivo de configuración principal: /etc/default/incus
  • Directorio de datos: /var/lib/incus
  • Pools de almacenamiento: /var/lib/incus/storage-pools/
  • Contenedores: /var/lib/incus/containers/
  • Imágenes: /var/lib/incus/images/
  • Archivo de registro: /var/log/incus/incusd.log
  • Servicios del sistema: /usr/lib/systemd/system/incus*.service
  • Configuración de Sysctl: /etc/sysctl.d/50-incus.conf
  • Configuración de usuario: /root/.config/incus/

Nota

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

Primeros pasos después de desplegar 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 su uso. Incluirá la dirección IP del VPS y las credenciales de acceso. Los clientes de nuestra empresa gestionan el equipo a través de el Panel de gestión de servidores y APIInvapi.

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

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

Importante

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 no segura 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 agregar 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 copiarse:

  3. Pegue el token obtenido en el campo de texto correspondiente en 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 a través de 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, lanzamiento, variante, arquitectura y tipo:

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

  • Configuración principal — parámetros básicos del contenedor: nombre, descripción, tipo de instancia (contenedor o máquina virtual), imagen base y perfiles asignados;
  • Dispositivos — gestión de dispositivos del contenedor:
  • Disco — configuración del dispositivo de disco y punto de montaje;
  • Red — configuración de la interfaz de red;
  • GPU — conexión de aceleradores gráficos;
  • Proxy — configuración de reenvío de puertos entre el host y el contenedor;
  • Otros — tipos adicionales de dispositivos;
  • Límites de recursos — limitación de recursos: procesador (CPU), RAM, operaciones de E/S de disco;
  • Políticas de seguridad — políticas de seguridad: configuración de aislamiento, privilegios y perfiles de seguridad (AppArmor, SELinux);
  • Instantáneas — gestión de instantáneas del estado del contenedor para copia de seguridad y recuperación;
  • Migración — parámetros de migración de contenedores entre hosts;
  • Inicio — configuración de inicio: orden de dispositivos de arranque, inicio automático al arrancar el sistema;
  • Cloud init — configuración de inicialización automática del contenedor a través de cloud-init (usuarios, red, paquetes, scripts).

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

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

  • Nombre de la instancia — nombre del contenedor;
  • Descripción — descripción (opcional);
  • Tipo de instancia — tipo de instancia (Container o Virtual Machine);
  • Perfiles — perfiles de configuración.

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

Monitorización del estado del contenedor

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

Gestión de servicios

Comprobación del estado:

systemctl status incus

Reinicio del servicio:

systemctl restart incus

Detención del servicio:

systemctl stop incus

Inicio del servicio:

systemctl start incus

Visualización de registros:

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

Comprobación de los pools de almacenamiento creados:

incus storage list

Para ver información detallada sobre un pool:

incus storage show default

Configuración de red

Creación de un puente NAT para contenedores con direccionamiento IPv4 automático:

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

Comprobación de la configuración de red:

incus network list

Visualización de la configuración de red:

incus network show incusbr0

Configuración del perfil predeterminado

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

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

Agregar una interfaz de red al perfil:

incus profile device add default eth0 nic network=incusbr0

Comprobación de 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 del repositorio público
  • deb12 - nombre del contenedor
  • --profile default - uso del perfil predeterminado
  • -c limits.cpu=2 - límite de 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

Inicio de un contenedor:

incus start <name>

Detención de un contenedor:

incus stop <name>

Reinicio de un contenedor:

incus restart <name>

Eliminación de un contenedor (requiere detención previa):

incus delete <name>

Eliminación forzada de un contenedor en ejecución:

incus delete <name> --force

Acceso al contenedor

Conexión mediante bash:

incus exec deb12 -- bash

Conexión a la consola TTY:

incus console deb12

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

Reenvío de puertos

Para acceder a servicios dentro de un contenedor desde una red externa, se utiliza el reenvío de puertos a través de 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 reenvía 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

Visualización de la configuración completa expandida del contenedor:

incus config show <name> --expanded

Visualización de la configuración básica sin perfiles:

incus config show <name>

Cambio de parámetros

Establecimiento de 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

Inicio automático del contenedor:

incus config set <name> boot.autostart=true

Adición de dispositivos

Sintaxis general para agregar dispositivos:

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

Ejemplos:

Adición de un disco adicional:

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

Adición de una interfaz de red adicional:

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

Montaje de un directorio del host en un contenedor:

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

Eliminación de un dispositivo:

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

Trabajo con instantáneas y migración

Creación de instantáneas

Las instantáneas permiten guardar el estado del contenedor para su recuperación posterior:

incus snapshot <name> <snapshot-name>

Ejemplo:

incus snapshot deb12 before-update

Lista de instantáneas del contenedor:

incus info <name>

Restauración desde una instantánea

incus restore <name> <snapshot-name>

Ejemplo:

incus restore deb12 before-update

Eliminación de una instantánea:

incus delete <name>/<snapshot-name>

Renombrado y copia

Renombrado de un contenedor:

incus move <name> <newname>

Copia de un contenedor en el mismo host:

incus copy <name> <newname>

Copia de un contenedor a otro host Incus:

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

Para trabajar con hosts remotos, primero debe agregar 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:

Búsqueda de una distribución específica:

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

Copia de imágenes

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

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

Copia de una imagen con 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 redes

Lista de redes:

incus network list

Visualización de la configuración de red:

incus network show <network-name>

Creación de una nueva red:

# Creación de una red de puente
incus network create mybr0 \
  ipv4.address=10.10.10.1/24 \
  ipv4.nat=true \
  ipv6.address=none


# Creación de una red macvlan
incus network create mymacvlan \
  type=macvlan \
  parent=eth0

Edición de una red:

incus network edit <network-name>

Eliminación de una red:

incus network delete <network-name>

Reglas de reenvío de red

Creación de una regla de reenvío para el reenvío 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

Visualización de información del pool:

incus storage show <pool-name>

Creación de un pool de almacenamiento:

Pool basado en 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

Edición de un pool:

incus storage edit <pool-name>

Eliminación de un pool:

incus storage delete <pool-name>

Gestión de volúmenes

Creación de 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

Copia de un volumen:

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

Eliminación de 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 de red de los contenedores a la red externa.

Cambio 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

Habilitación del reenvío de IP

sysctl -w net.ipv4.ip_forward=1

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

net.ipv4.ip_forward=1

Reinicio de Incus tras los cambios:

systemctl restart incus

Configuración de la tabla NAT

Creación de la tabla NAT y la cadena POSTROUTING:

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

Adición de la regla de enmascaramiento 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 de su puente Incus.

Configuración de la cadena FORWARD

Creación de la tabla de filtro y la cadena FORWARD:

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

Adición de 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 tráfico establecido/relacionado de vuelta:

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

Comprobación de reglas de nftables

Visualización de todas las reglas:

nft list ruleset

Guardado de reglas (para Debian/Ubuntu):

Instalación del paquete para guardar reglas:

apt-get install nftables

Guardado de las reglas actuales:

nft list ruleset > /etc/nftables.conf

Habilitación de la carga automática:

systemctl enable nftables

Nota

Información detallada sobre todas las capacidades de Incus se encuentra en la documentación oficial del desarrollador.

Pedido de un servidor con Incus mediante API

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


Parte del contenido de esta página fue creado o traducido utilizando IA.

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