La empresa Canonical ha publicado la versión 5.0 del administrador de contenedores LXD y del sistema de archivos virtual LXCFS 5.0. El código de LXD está escrito en Go y se distribuye bajo la licencia Apache 2.0. La versión 5.0 pertenece a las versiones de soporte a largo plazo, con actualizaciones programadas hasta junio de 2027.
Se utiliza el conjunto de herramientas LXC como runtime para ejecutar contenedores, que incluye la biblioteca liblxc, un conjunto de utilidades (lxc-create, lxc-start, lxc-stop, lxc-ls, etc.), plantillas para construir contenedores y un conjunto de enlaces para varios lenguajes de programación. La aislación se lleva a cabo mediante los mecanismos estándar del núcleo de Linux. Para la separación de procesos, la pila de red IPC, UTS, identificadores de usuarios y puntos de montaje se utiliza el mecanismo de espacios de nombres (namespaces). Se aplican cgroups para la limitación de recursos. Para reducir privilegios y restringir el acceso, se emplean características del núcleo como perfiles Apparmor y SELinux, políticas Seccomp, Chroots (pivot_root) y capacidades.
Además de LXC, en LXD también se utilizan componentes de los proyectos CRIU y QEMU. Mientras que LXC es una herramienta de bajo nivel para manipular contenedores individuales, LXD proporciona medios para la gestión centralizada de contenedores desplegados en un clúster de múltiples. servidores. LXD se implementa como un proceso en segundo plano que acepta solicitudes a través de la red mediante una API REST y soporta diversos backend de almacenamiento (árbol de directorios, ZFS, Btrfs, LVM), instantáneas de estado, migración en vivo de contenedores en funcionamiento de una máquina a otra y recursos para almacenar imágenes de contenedores. LXCFS se utiliza para simular en los contenedores un sistema de archivos pseudo- /proc y /sys, y una representación virtualizada de cgroupfs para dar a los contenedores la apariencia de un sistema independiente normal.
Mejoras clave:
- La posibilidad de conectar y desconectar discos y dispositivos USB en caliente. En la máquina virtual, un nuevo disco se reconoce mediante la aparición de un nuevo dispositivo en el bus SCSI, mientras que un dispositivo USB se detecta al generar un evento de conexión en caliente USB.
- Se ha permitido el inicio de LXD incluso en condiciones donde no es posible establecer una conexión de red, por ejemplo, debido a la falta del dispositivo de red necesario. En lugar de mostrar un error al iniciar LXD, ahora se inicia el número máximo posible de entornos dados las circunstancias actuales, y los demás entornos se inician una vez que se restablece la conexión de red.
- Se ha añadido un nuevo rol para los miembros del clúster: ovn-chassis, destinado a clústers que utilizan OVN (Open Virtual Network) para la interacción de red (mediante la asignación del rol ovn-chassis, se pueden designar servidores para realizar funciones de enrutadores de OVN).
- Se ha propuesto un modo optimizado para actualizar el contenido de las secciones del almacenamiento. En versiones anteriores, la actualización consistía en que primero se copiaba una instancia del contenedor o la sección, por ejemplo, mediante la funcionalidad send/receive en zfs o btrfs, después de lo cual la copia creada se sincronizaba mediante el lanzamiento del programa rsync. Para aumentar la eficiencia de la actualización, máquinas virtuales en la nueva versión se ha implementado una lógica avanzada de migración en la cual, si el servidor de origen y el servidor de destino utilizan un mismo grupo de almacenamiento, se aplican automáticamente snapshots y las operaciones send/receive en lugar de rsync.
- Se ha revisado la lógica de identificación de entornos en cloud-init: en lugar de los nombres de los entornos, ahora se utiliza UUID como instance-id.
- Se ha añadido soporte para interceptar la llamada al sistema sched_setscheduler, lo que permite a los contenedores sin privilegios modificar las prioridades de los procesos.
- Se ha implementado la opción lvm.thinpool_metadata_size, que controla el tamaño de los metadatos en thinpool.
- Se ha revisado el formato del archivo con la información de red para lxc. Se ha añadido soporte para los datos sobre la vinculación de interfaces, puentes de red, VLAN y redes OVN.
- Se han incrementado los requisitos para las versiones mínimas de los componentes: núcleo de Linux 5.4, Go 1.18, LXC 4.0.x y QEMU 6.0.
- En LXCFS 5 se ha añadido soporte para la jerarquía unificada de cgroup (cgroup2), se han implementado /proc/slabinfo y /sys/devices/system/cpu, y se ha utilizado la herramienta meson para la compilación.
Fuente: opennet.ru
