Incus: Contentores System-Level para Virtualização Leve na PME

O Incus é uma plataforma de virtualização leve que combina contentores system-level e máquinas virtuais num único sistema. Para uma PME que precisa de correr serviços isolados sem o peso de hypervisors tradicionais, o Incus oferece uma alternativa eficiente com gestão simplificada via CLI ou interface web.

ℹ O Incus é o sucessor comunitário do LXD — após a Canonical ter fechado o LXD, a comunidade criou o Incus com a mesma base.

Neste artigo:

1. Introdução ao Incus

O Incus é um gestor de contentores e máquinas virtuais desenvolvido pela comunidade Linux Containers. Resulta de um fork do LXD após a Canonical ter restringido o projecto, mantendo total compatibilidade com a base de código original. O projecto é gerido pela Linux Containers e o código-fonte está disponível no GitHub.

Diferente do Docker, que isola aplicações individuais, o Incus corre sistemas operativos completos — contentores system-level — com overhead mínimo. Cada contentor tem o seu próprio init, serviços e utilizadores, comportando-se como uma máquina virtual leve mas sem a penalidade de performance de um hypervisor completo.

Principais características do Incus:

  • Contentores system-level e VMs numa única ferramenta
  • Gestão via CLI (incus) ou interface web
  • Suporte para dezenas de distribuições Linux via imagens oficiais
  • Rede ponte, VLAN e clustering nativo
  • Instantâneos, migração a quente e replicação entre nós
  • Integração com infraestruturas de armazenamento (ZFS, Btrfs, LVM, Ceph)

O Incus foi incluído no projecto Linux Containers em Dezembro de 2023 e tem recebido actualizações regulares, sendo actualmente a opção recomendada para quem usava LXD. A migração do LXD para Incus é suportada nativamente através do comando incus admin migrate.

2. Contentores System-Level vs Contentores de Aplicação

⚠ Contentores system-level não substituem Docker — Incus corre sistemas completos, Docker corre aplicações isoladas.

A distinção entre contentores system-level e contentores de aplicação é fundamental para perceber onde o Incus se encaixa. Ambos usam namespaces e cgroups do kernel Linux, mas com filosofias diferentes.

Característica Incus (System-Level) Docker (Application)
Unidade isolada Sistema operativo completo Aplicação individual
Init system systemd/sysvinit completo Processo único da app
Ciclo de vida Persistente (sempre activo) Efémero (criado/destruído)
Casos de uso Servidores, BDs, serviços longos Microserviços, CI/CD, lote
Imagens Distribuições Linux completas Camadas de aplicação
VMs Suporta (--vm) Não suporta

Em termos práticos: o Docker é ideal para deploy de aplicações web em pipelines de CI/CD (ver Curso Linux Dia 21: Docker), enquanto o Incus é melhor para correr múltiplos serviços isolados que precisam de persistir — como um servidor de base de dados, um servidor de correio ou um ambiente de desenvolvimento completo. O Podman ocupa um espaço intermédio, oferecendo contentores sem privilégios compatíveis com Docker.

3. Instalação e Configuração

O Incus está disponível via snap em distribuições baseadas em Debian, Ubuntu, Fedora e outras. A instalação é directa:

# Instalar Incus via snap
sudo snap install incus --classic

Após a instalação, é necessário inicializar o Incus com o comando interactivo de configuração. Este passo cria a rede bridge, define o storage pool e configura o ambiente base:

# Inicializar Incus
sudo incus admin init

O incus admin init apresenta um assistente interactivo com opções para:

  • Storage pool: ZFS (recomendado), Btrfs, LVM ou directório
  • Rede ponte: cria incusbr0 com DHCP automático
  • IPv6: opcional, habilitar se a rede suportar
  • Clustering: activar apenas em implementações multi-nó

Para que um utilizador não-root possa gerir contentores, adicioná-lo ao grupo incus-admin:

# Adicionar utilizador ao grupo incus-admin
sudo usermod -aG incus-admin $USER
# Aplicar sem reiniciar
newgrp incus-admin

4. Criar e Gerir Containers

A criação de contentores é simples. O Incus suporta múltiplas distribuições através do repositório de imagens oficial (images:):

# Criar contentor Debian 12
incus launch images:debian/12 debian-vm
# Listar contentores
incus list

O comando launch cria e inicia o contentor num único passo. Para aceder ao interior do contentor e executar comandos:

# Aceder ao contentor
incus exec debian-vm -- bash

A configuração de rede é um aspecto essencial. Por defeito, o Incus cria uma bridge incusbr0 que fornece conectividade NAT aos contentores. Para expor serviços, pode-se configurar reencaminhamento de porto ou adicionar dispositivos de rede:

# Configurar rede
incus profile device add default eth0 nic nictype=bridged parent=incusbr0

Operações essenciais de gestão diária:

Operação Comando
Parar contentor incus stop debian-vm
Iniciar contentor incus start debian-vm
Eliminar contentor incus delete debian-vm
Snapshot incus snapshot create debian-vm snap1
Ver configuração incus config show debian-vm
Migrar do LXD incus admin migrate

Os profiles permitem definir configurações reutilizáveis. O profile default é aplicado a todos os contentores e pode ser personalizado para incluir dispositivos de rede, limits de CPU/memória e variáveis de ambiente.

5. VMs com Incus

Uma das funcionalidades mais distintivas do Incus é a capacidade de criar máquinas virtuais completas com o mesmo CLI usado para contentores. As VMs usam QEMU como backend, oferecendo isolamento total via virtualização por hardware:

# Criar VM (não container)
incus launch images:debian/12 debian-vm --vm

A flag --vm indica ao Incus para criar uma máquina virtual em vez de um contentor. As VMs oferecem:

  • Isolamento total do kernel — cada VM tem o seu próprio kernel
  • Segurança reforçada para workloads não confiáveis
  • Suporte para sistemas operativos que não sejam Linux (via imagens personalizadas)
  • Overhead ligeiramente superior aos containers, mas muito inferior a hypervisors tradicionais
Aspecto Container VM Incus
Kernel Partilhado com o hospedeiro Dedicado
Arranque ~1 segundo 10-30 segundos
Sobrecarga Mínima Reduzida (QEMU)
Isolamento Processos/namespaces Hardware completo

A escolha entre contentor e VM depende do nível de isolamento necessário. Para serviços da PME confiáveis (servidor web, base de dados interna), contentores são suficientes. Para ambientes multi-inquilino ou código não confiável, VMs oferecem uma fronteira de segurança mais forte. Comparando com o Proxmox, o Incus oferece uma experiência mais leve e CLI-first, enquanto o Proxmox é um hypervisor completo com gestão via interface web robusta.

6. Casos de Uso PME

Para uma PME, o Incus resolve problemas concretos de infra-estrutura sem investir em hardware dedicado ou licenças comerciais. Os casos de uso mais comuns são:

  • Ambiente de desenvolvimento: contentores com diferentes versões de PHP, Python ou Node.js, isolados num único servidor
  • Servidor de testes: réplicas de produção para validar actualizações antes da implementação
  • Isolamento de serviços: servidor de email, servidor de ficheiros e servidor web em contentores separados, cada um com a sua configuração
  • Migração de serviços legados: mover aplicações antigas para contentores sem reescrever código
  • Multi-inquilino leve: ambientes separados por cliente num único servidor físico

A gestão via interface web (incus-ui) é particularmente útil para PMEs sem equipa dedicada de sysadmin. A interface permite criar, parar e configurar contentores sem conhecimento de CLI, embora a linha de comandos ofereça mais controlo granular.

Em comparação com o Proxmox VE, o Incus é mais adequado quando:

Critério Incus Proxmox VE
Foco principal Contentores system-level VMs KVM completas
Interface web Simples (incus-ui) Completa e robusta
Clustering Nativo, simples Nativo, mais maduro
Custo Gratuito (código aberto) Gratuito + suporte pago

7. Erros Comuns e Lista de Verificação

Durante a implementação do Incus, alguns problemas surgem com frequência. Conhecê-los previne tempo de indisponibilidade e configurações incorrectas.

Problema Causa Solução
Container sem rede Ponte não configurada Reexecutar incus admin init
Permissão negada Utilizador fora do grupo usermod -aG incus-admin
VM não arranca KVM não habilitado na BIOS Activar virtualização na BIOS
Snap falha Snapd não instalado apt install snapd
Migração LXD falha LXD ainda activo Parar LXD antes de migrar

Lista de verificação para implementação:

  • ✓ Verificar se a virtualização está activa na BIOS (para VMs)
  • ✓ Instalar snapd antes de instalar o Incus
  • ✓ Executar incus admin init com ZFS se possível
  • ✓ Adicionar utilizadores ao grupo incus-admin
  • ✓ Configurar firewall para restringir acesso à bridge incusbr0
  • ✓ Criar instantâneos antes de actualizações de contentores
  • ✓ Testar migração do LXD em ambiente de testes primeiro
  • ✓ Configurar backups do storage pool regularmente
  • ✓ Monitorizar recursos com incus list e incus info

Artigos Relacionados: