A Canonical lançou a versão 5.0 do gerenciador de containers LXD e do sistema de arquivos virtual LXCFS 5.0. O código do LXD é escrito em Go e é distribuído sob a licença Apache 2.0. A versão 5.0 é classificada como uma versão com suporte a longo prazo — as atualizações serão disponibilizadas até junho de 2027.
Como runtime para execução de containers, utiliza-se a ferramenta LXC, que inclui a biblioteca liblxc, um conjunto de utilitários (lxc-create, lxc-start, lxc-stop, lxc-ls etc.), modelos para construção de containers e um conjunto de bindings para várias linguagens de programação. A isolação é realizada por meio dos mecanismos existentes no núcleo do Linux. Para a isolação de processos, da pilha de rede, ipc, uts, identificadores de usuários e pontos de montagem, usa-se o mecanismo de namespaces. Para limitar recursos, são utilizados cgroups. Para reduzir privilégios e limitar o acesso, são utilizadas funcionalidades do núcleo como perfis Apparmor e SELinux, políticas Seccomp, Chroots (pivot_root) e capacidades.
Além do LXC, o LXD também utiliza componentes dos projetos CRIU e QEMU. Enquanto o LXC é uma ferramenta de baixo nível para manipulação de containers individuais, o LXD fornece meios para a gestão centralizada de containers implantados em um cluster de vários. servidoresO LXD é implementado como um processo em segundo plano, recebendo solicitações pela rede através da API REST e suportando diversos backends de armazenamento (árvores de diretórios, ZFS, Btrfs, LVM), snapshots com cópias de estado, migração ao vivo de containers em funcionamento de uma máquina para outra e recursos para armazenamento de imagens de containers. O LXCFS é utilizado para simular em containers um pseudo-sistema de arquivos /proc e /sys, além de uma representação virtual do cgroupfs para dar aos containers a aparência de um sistema independente comum.
Principais melhorias:
- A capacidade de conectar e desconectar discos e dispositivos USB enquanto o sistema está em funcionamento. Em uma máquina virtual, um novo disco é identificado através do aparecimento de um novo dispositivo no barramento SCSI, e um dispositivo USB — pela geração de um evento de USB hotplug.
- Foi incluída a possibilidade de iniciar o LXD mesmo quando não é possível estabelecer uma conexão de rede, por exemplo, devido à falta do dispositivo de rede necessário. Em vez de exibir um erro ao iniciar o LXD, agora ele inicia o máximo possível de ambientes nas condições atuais, enquanto os demais ambientes são iniciados assim que a conexão de rede for restabelecida.
- Adicionada uma nova função para membros do cluster — ovn-chassis, destinada a clusters que utilizam o OVN (Open Virtual Network) para interação de rede (através da atribuição da função ovn-chassis, é possível designar servidores para realizar funções de roteadores OVN).
- Foi proposta uma maneira otimizada de atualizar o conteúdo das seções de armazenamento. Nas versões anteriores, a atualização consistia inicialmente na cópia do contêiner ou seção, por exemplo, através da funcionalidade send/receive no zfs ou btrfs, após o que a cópia criada era sincronizada usando o programa rsync. Para aumentar a eficiência da atualização, máquinas virtuais na nova versão foi implementada uma lógica avançada de migração, em que, se o servidor de origem e o servidor de destino utilizarem o mesmo pool de armazenamento, as snapshots e operações send/receive são aplicadas automaticamente em vez de rsync.
- A lógica de identificação dos ambientes no cloud-init foi reformulada: em vez de nomes de ambientes, agora o UUID é utilizado como instance-id.
- Foi adicionada a capacidade de interceptar a chamada de sistema sched_setscheduler, permitindo que contêineres não privilegiados alterem as prioridades dos processos.
- Implementada a opção lvm.thinpool_metadata_size, que controla o tamanho dos metadados no thinpool.
- O formato do arquivo com informações de rede para o lxc foi reformulado. Foi adicionada a compatibilidade com dados sobre a vinculação de interfaces, pontes de rede, VLAN e redes OVN.
- Aumentados os requisitos para as versões mínimas dos componentes: kernel Linux 5.4, Go 1.18, LXC 4.0.x e QEMU 6.0.
- O LXCFS 5 adicionou suporte à hierarquia unificada de cgroup (cgroup2), implementou /proc/slabinfo e /sys/devices/system/cpu, com a ferramenta meson utilizada para a compilação.
Fonte: opennet.ru
