A comunidade Linux Containers lançou a versão da ferramenta para organizar o funcionamento de contêineres isolados LXC 6.0, que fornece um runtime adequado tanto para executar contêineres com um ambiente de sistema completo, semelhantes a máquinas virtuais, quanto para executar contêineres não privilegiados de aplicativos individuais (OCI). O LXC pertence a ferramentas de baixo nível, operando no nível de contêineres individuais. Para a gestão centralizada de contêineres implantados em um cluster de vários servidores, sistemas como Incus e LXD estão sendo desenvolvidos com base no LXC. O ramo LXC 6.0 é classificado como uma versão de longo suporte, com atualizações sendo fornecidas por 5 anos (até 2029). O código do LXC é escrito na linguagem C e é distribuído sob a licença GPLv2.
O LXC 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. Para a isolação de processos, pilha de rede ipc, uts, identificadores de usuários e pontos de montagem, é utilizado o mecanismo de namespaces. Para limitar recursos, são utilizados cgroups. Para reduzir privilégios e limitar acesso, são usadas funcionalidades do núcleo como perfis Apparmor e SELinux, políticas Seccomp, Chroots (pivot_root) e capabilities.
Principais mudanças:
- Foi oferecida a possibilidade de compilar um arquivo executável universal lxc, combinando em uma única ferramenta todos os comandos que anteriormente eram distribuídos como utilitários separados 'lxc-*'. Para compilar o arquivo de chamada, foi sugerida a opção 'tools-multicall=true', que quando ativada cria todos os antigos utilitários separados como links simbólicos para a ferramenta lxc. A compilação em forma de um único arquivo executável permite uma redução significativa no espaço em disco consumido pela ferramenta, o que é relevante para sistemas incorporados.
- Foi adicionada à biblioteca liblxc a função set_timeout, permitindo definir um tempo limite para qualquer operação de interação com o monitor do LXC.
- No interface das pontes de rede lxcbr0, a ativação por padrão foi realizada suporte a IPv6 com a atribuição de endereços da sub-rede IPv6 ULA (Unique Local Address).
- Na ferramenta lxc-usernsexec, foram adicionadas as opções '-u' e '-g' para alterar os identificadores de usuário e grupo (UID e GID).
- Na ferramenta lxc-checkconfig, a versão é exibida apenas na presença do comando lxc-start, e foi adicionada uma informação sobre o número máximo permitido de cada tipo de espaço de nomes.
- Foi adicionada a compatibilidade com imagens de contêiner no formato OCI, nas quais a compressão das informações utiliza o sistema de arquivos Squashfs.
- Para interagir com o systemd através do D-Bus, foi utilizada uma biblioteca separada libdbus-1 em vez da libsystemd.
- O suporte ao sistema de inicialização Upstart foi descontinuado.
Foi lançado simultaneamente o projeto Incus, onde a comunidade Linux Containers está desenvolvendo um fork do sistema de gerenciamento de containers LXD, criado pela antiga equipe de desenvolvedores que originalmente criou o LXD. O código do Incus é escrito na linguagem Go e é distribuído sob a licença Apache 2.0. O Incus 6.0 é posicionado como a primeira versão estável para a qual será garantido um longo ciclo de atualizações (LTS). Entre as mudanças no Incus 6.0, destaca-se a capacidade de criar interfaces de rede através da API bridge.external_interfaces, melhorias no suporte à autenticação via JWT (JSON Web Token), suporte a USB e a exibição de informações detalhadas do sistema no comando “incus info —resources”, além do suporte à versão LXD 5.21 na ferramenta lxd-to-incus.
O Incus e o LXD oferecem ferramentas para o gerenciamento centralizado de containers e máquinas virtuais, implementadas tanto em um único host quanto em um cluster de vários. servidores. O projeto é realizado na forma de um processo em segundo plano, que aceita solicitações pela rede através da API REST e suporta vários backends de armazenamento (árvore de diretórios, ZFS, Btrfs, LVM), snapshots com cortes de estado, migração ao vivo de containers em execução de uma máquina para outra e ferramentas para armazenamento de imagens de containers. O runtime utilizado para executar os containers é a ferramenta LXC. A isolamento é realizado através dos mecanismos padrões do kernel do Linux (namespaces, cgroups, Apparmor, SELinux, Seccomp).
A comunidade Linux Containers supervisionou o desenvolvimento do LXD até que a Canonical decidiu transformar o LXD em um projeto corporativo. O objetivo do fork é fornecer uma alternativa gerenciada pela comunidade independente ao projeto LXD, que é controlado pela Canonical. A criação do Incus também possibilitou abordar algumas falhas conceituais que foram cometidas no desenvolvimento do LXD, que anteriormente não podiam ser corrigidas sem comprometer a compatibilidade retroativa.
A Canonical lançou uma nova versão do sistema de gerenciamento de contêineres LXD 5.21.1. A versão LXD 5.21 é marcada como LTS e será suportada até junho de 2029. O código adicionado ao LXD pelos funcionários da Canonical é disponibilizado sob a licença AGPLv3, mas o código de colaboradores externos, sobre o qual a Canonical não possui direitos de propriedade, permanece sob a licença Apache 2.0. Entre as mudanças funcionais no LXD 5.21.1, destaca-se a mudança do pacote snap do LXD para os ramos LXC 6.0 e LXCFS 6.0. A API recebeu a extensão storage_volumes_all e um manipulador relacionado em /1.0/storage_volumes para listar todas as divisões de armazenamento. Foi adicionada a extensão instances_files_modify_permissions para modificar permissões de acesso a arquivos existentes via API.
Está disponível a nova versão do sistema de arquivos virtual LXCFS 6.0, utilizado para simular nos contêineres os pseudo-sistemas de arquivos /proc e /sys, bem como para uma representação virtual do cgroupfs para distribuições sem suporte a espaços de nomes cgroup. A nova versão introduz a opção "--enable-cgroup", permitindo o gerenciamento da ativação da funcionalidade embutida para criar uma árvore virtual de cgroupfs para os contêineres usando cgroupv1 (atualmente, a maioria das distribuições suporta os espaços de nome fornecidos pelo kernel para cgroup, por isso a ativação da implementação alternativa embutida perdeu o sentido e agora é opcional). Além disso, no LXCFS 6.0, a filtragem de CPU foi interrompida na formação do arquivo /sys/devices/system/cpu, dependendo do estado online/offline.
Fonte: opennet.ru
