Foi lançada a primeira versão do projeto Incus, onde a comunidade Linux Containers desenvolve um fork do sistema de gerenciamento de containers LXD, criado pela antiga equipe de desenvolvedores que uma vez criou o LXD. O código do Incus está escrito na linguagem Go e é distribuído sob a licença Apache 2.0.
Vale lembrar que a comunidade Linux Containers supervisionou o desenvolvimento do LXD até que a Canonical decidiu desenvolver o LXD de forma separada como um projeto corporativo. O objetivo do fork é fornecer uma alternativa gerida independentemente pela comunidade ao projeto LXD, controlado pela Canonical. No âmbito do projeto Incus, também está previsto corrigir alguns erros conceituais cometidos no desenvolvimento do LXD que antes não podiam ser corrigidos sem comprometer a compatibilidade retroativa.
O Incus oferece ferramentas para gerenciamento centralizado de contêineres e máquinas virtuais, implantadas tanto em um único host quanto em um cluster de vários. servidores. O projeto é implementado na forma de um processo em segundo plano que aceita solicitações pela rede através de uma API REST e suporta vários backends de armazenamento (árvore de diretórios, ZFS, Btrfs, LVM), snapshots de estados, migração ao vivo de contêineres em execução de uma máquina para outra e ferramentas para armazenamento de imagens de contêineres. Para executar os contêineres, utiliza-se a ferramenta LXC, que inclui a biblioteca liblxc, um conjunto de utilitários (lxc-create, lxc-start, lxc-stop, lxc-ls, etc.), templates para construção de contêineres e um conjunto de bindings para várias linguagens de programação. A isolação é realizada através dos mecanismos nativos do núcleo Linux (namespaces, cgroups, Apparmor, SELinux, Seccomp).
Funcionalmente, a primeira versão do Incus corresponde à atualização recentemente lançada do LXD 5.18 e se concentra principalmente na renomeação e reorganização da base de código, bem como na remoção de recursos obsoletos. Nesta nova versão, também são notadas alterações específicas do Incus na interface de linha de comando e na API, que não puderam ser incluídas no LXD devido a requisitos de compatibilidade retroativa. No futuro, os desenvolvedores planejam transferir melhorias e correções úteis da base de código do LXD, adicionando também suas inovações originais, que, se desejado pela Canonical, poderão ser portadas para o LXD.
As mudanças mais notáveis:
- Foi realizada a transição para o motor SQL embutido Cowsql — um fork do Dqlite, criado pelo autor original do Dqlite pelas mesmas razões que o Incus (liberação da influência da Canonical). O Cowsql é compatível com SQLite, suporta replicação de dados, recuperação automática após falhas e garante alta disponibilidade através da distribuição de processadores em vários nós.
- Foi adicionada ao interface de linha de comando o comando "incus snapshot" para gerenciar snapshots (substitui os comandos lxc separados snapshot e restore). Através do "incus snapshot", é possível executar operações de criação, exclusão, listagem, renomeação e restauração de snapshots.
- A lógica de processamento dos comandos "incus config trust add" e "incus cluster add" foi alterada: agora aceitam um único argumento com o nome e retornam um token correto. As operações de gerenciamento de certificados através do comando "incus config trust add" foram transferidas para um comando separado chamado "incus config trust add-certificate".
- Foi adicionado o comando "incus admin", que isenta o administrador da necessidade de acessar diretamente os comandos lxc e lxd. As seguintes subcomandos estão disponíveis:
- incus admin cluster
- incus admin init
- incus admin recover
- incus admin shutdown
- incus admin waitready
- Os pontos de acesso obsoletos à API /1.0/containers e /1.0/virtual-machines foram removidos, sendo substituídos por /1.0/instances.
- O dispositivo /dev/lxd foi substituído por /dev/incus, e as menções ao lxd no código foram alteradas para incus.
- Tipo configurações do servidor substituído de «map[string]any» para «map[string]string». O método de autenticação obsoleto core.trust_password foi descontinuado (substituído pela autenticação baseada em tokens), dificultando o uso do tipo «map[string]string».
- Funções obsoletas *Container foram removidas da API e, após a implementação do gerenciamento de máquinas virtuais, foram introduzidas as funções *Instance (por exemplo, em vez de CreateContainer, deve-se usar CreateInstance).
- Uma ferramenta lxd-to-incus foi adicionada para migração do LXD para o Incus (a conversão automática de arquivos de configuração é suportada desde a versão LXD 4.0 até a 5.18). A migração de clusters ainda não é suportada.
- A versão mínima suportada da linguagem Go declarada é a versão 1.20.
- O suporte a alguns recursos relacionados ao Ubuntu ou que dependem de software obsoleto ou não suportado foi interrompido:
- O suporte para as interfaces Ubuntu Fan (bridge.mode, fan.overlay_subnet, fan.underlay_subnet, fan.type), que dependiam de patches no kernel, utilizados apenas no Ubuntu, foi removido.
- O suporte para shiftfs, que estava atrelado a pacotes do kernel para Ubuntu, foi removido, assim como a virtual FS para mapear pontos de montagem com espaços de nomes de identificadores de usuários (user namespace).
- O suporte para o sistema de autenticação Candid, específico para produtos da Canonical, foi removido.
- O suporte à implementação proprietária do mecanismo de autenticação RBAC (Controle de Acesso Baseado em Papel), desenvolvida pela Canonical com base em Macaroons e Candid, foi removido.
- Componentes para integração com MAAS (Metal-as-a-Service), uma ferramenta para rápida implantação de configurações do Ubuntu, foram removidos.
- O conceito de acesso ao servidor usando senha confiável (core.trust_password) foi removido.
Fonte: opennet.ru
