Contedores LXC/Incus
Virtualización con contedores
LXC (Linux Containers) é unha tecnoloxía de virtualización a nivel de sistema operativo para Linux. LXC permite que un servidor físico execute múltiples instancias de sistemas operativos Linux illados, cada un co seu propio sistema de ficheiros, espazo de procesos e redes. Pode verse a máquina virtual (contedor) como se unha parte do sistema operativo correse illada do resto, como unha xaula ou chroot.
Cando se fala de LXC aparece moitas veces coma lightweight virtualizatio ou virtualización lixeira. Ó traballar cun contedor traballamos cun sistema illado, pero non estamos a instalar un sistema operativo separado para o contedor nin precisamos dun hypervisor para correlo. Na seguinte imaxe pode compararse a virtualización tradicional cos contedores:
Virtualization vs. Containers
Fig. Virtualización vs contenedores. Fonte: community.dell.com
Un contedor LXC está illado e corre as súas propias aplicacións/procesos; sen embargo, comparte co 'equipo real' certas cousas, como o kernel e certos binarios e librarías. Esto tradúcese nunha menor carga e consumo de recursos e nun maior rendemento. O principal obxectivo dos contedores LXC é crear contornos Linux o máis preto posible a unha instalación Linux estándar sen a necesidade de correr un kernel separado ou parcheado como ocorre con outros sistemas de virtualización como Xen ou OpenVZ. Se comparamos LXC coa tecnoloxía de contedores Docker, a primeira pretende proporcionar un sistema linux completo illado pero correndo no equipo anfitrión e a segunda está orientada a illar procesos (p.e. un servidor apache sería un contedor e MySQL sería outro).
Pola forma de traballar de LXC, unha mesma máquina física permite correr moitos máis contedores que máquinas virtuais tradicionais:
Virtualization (i.e. kvm, xen) LXC Containers Footprint Requires a hypervisor and a full operating system image. Does not require a hypervisor or a separate operating system image. OS supported Any OS supported by the hypervisor Most Linux distros, uses same kernel as host Typical server deployment 10 – 100 VMs 100 - 1000 containers Boot time Less than a minute Seconds Physical resources use (i.e. memory, CPU) Each VM has resource reserved for its own use Shared by all containers Fig. Comparativa entre máquinas virtuais e contenedores Na OpenStack Developer Summit de 2015 en Vancouver presentouse un estudo comparando LXC con KVM onde se dicía que no mesmo servidor físico, os contedores permitían 14,5 veces máis sistemas virtuais que a solución de virtualización KVM (536 fronte a 37), arrincaban un 94% máis rápido (1,5 segundos fronte a 25) e cun 57% menos de latencia.
Desnidade: LXD fronte KVM
Fig. Densidade: LXC/LXD fronte KVM. Fonte: Insights Ubuntu
Canonical, a empresa tras Ubuntu, usa contenedores dende hai tempo para probas de desevolvemento e lanzou a finais de 2015 LXD, que trata de proporcionar unha mellor interface para traballar con contedores LXC. Tras discrepancias entre Canonical e os desenvolvedores por cambios na política de licenciamento, creouse en agosto de 2023 un fork chamado Incus que será o que empregaremos durante o curso, ó proporcionar un maior número de funcionalidades e non ter problemas de licencias ó ser open source.
Ó longo deste curso plantexaremos escenarios prácticos onde haberá en funcionamento ata seis máquina virtuais, polo que é de esperar que a máquina anfitriona terá unha certa potencia para mover todas as máquinas virtuais con soltura. Este tipo de escenarios poden meter ós centros e o alumnado nunha carreira tecnolóxica, onde hai que mellorar cada pouco tempo os recursos hardware dos equipos nas aulas e nas casas para poder implementar este tipo de prácticas. Eso sen entrar a falar da posiblidade de ter un servidor de exames ou prácticas onde traballarán á vez todos os alumnos.
As características dos contedores fan que LXC/Incus sexa unha tecnoloxía ideal para virtualizar servidores Linux nas aulas; xa que temos 'máquinas virtuais' completas, cun rendemento espectacular e sen precisar equipos con demasiados recursos.
A modo de exemplo, nun examen práctico sobre balanceo de carga:
- executáronse 84 contedores Linux Ubuntu Server 14.04 nun equipo Intel Core i5 con 16 GB de RAM e disco duro de 500GB
- todo o alumnado conectábase á vez mediante ssh ós seus servidores
- e o equipo nunca chegou a pasar dos 10 GB de RAM ocupada.
No módulo 8 (Técnicas cloud e IT automatization) veremos como facer este tipo de despregues masivos e personalizados automatizando todo proceso.
Non só é posible aproveitar mellor os recursos á hora de virtualizar; senon que crear novos contedores é cuestión de segundos ó crearse a partir de imaxes (plantillas), que se descargan de Internet e gárdanse localmente para acelerar o proceso de creación.
É máis, por exemplo podemos crear unha máquina Ubuntu (Server ou Desktop en calquera dos seus sabores) en Virtualbox e crear os contenedores nela; co cal podemos aproveitarnos da tecnoloxía de contenedores, aínda que traballemos cun sistema Windows. A pesar de ter a capa de virtualización de Virtualbox, o rendemento e aproveitamento de recursos segue sendo espectacular.
Outras funcionalidades interesantes dos contenedores son que ademais de poder acceder a eles vía rede, podemos entrar por consola dende o 'equipo real', executar comandos no contenedor e acceder ó seu sistema de arquivos dende a consola do 'equipo real'.
Incus a maiores de contedores LXC permite traballar con máquinas virtuais estándar empregando KVM e recentemente comezou a permitir crear contedores a partir de imaxes docker (aínda limitado).
Escenarios
- Escenario 2A. Contedores LXC
- Escenario 2B. LXC: perfís, redes e control de recursos
- Escenario 3C. LXC: Máis sobre contedores Incus
Referencias
- Curso G2501013 Escenarios de seguridade en contornas de alta dispoñibilidade e cloud computing cofinanciado polo Fondo Social Europeo: "O FSE inviste en ti", impartido por D. Manuel González Regal, profesor de informática no IES San Clemente de Santiago de Compostela.
- Started with LXC
- Get started with LXC: Explained with installation guide
- Cómo crear y lanzar contenedores LXC Linux con comandos LXC