LXC: características, pros y contras de los contenedores de Linux

Los contenedores de Linux se han vuelto extremadamente populares gracias a su facilidad de uso y se han convertido en un aspecto importante de la seguridad informática. La plataforma de contenedores que les da nombre, LXC, se utiliza para aislar diversos procesos del resto del sistema y entre sí de forma simultánea. Para ello, mediante la virtualización, se crea una instancia que garantiza la portabilidad y coherencia de cada contenedor en todo momento, desde su desarrollo hasta la fase de prueba y la ejecución. De esta manera, cada aplicación cuenta con su propio entorno virtual, aunque todas comparten el núcleo del sistema del host.

¿Cuáles son las ventajas de los contenedores de Linux? ¿La simplicidad siempre es una ventaja? ¿Cuántas máquinas virtuales incluye un contenedor de Linux?

¿Qué es LXC (Linux Containers)?

El término de “contenedor de Linux” o LXC se refiere a las aplicaciones virtualizadas sobre la base de Linux, así como a la plataforma y la tecnología de contenedores subyacente. Esto debe tenerse en cuenta sobre todo cuando se habla de otras plataformas de contenedores que también utilizan la tecnología de Linux Containers.

LXC es una plataforma de contenedores de código abierto que ofrece un manejo sencillo ―algo poco habitual para los sistemas de contenedores― y una experiencia de usuario moderna e intuitiva. La plataforma proporciona varias herramientas, lenguajes, plantillas y bibliotecas para ello. Además, el entorno de virtualización puede instalarse y utilizarse en todas las distribuciones de Linux más comunes.

Consejo

Los contenedores son una herramienta excepcional que ayuda a administrar y desarrollar aplicaciones de una manera antes impensable: permiten aislar las aplicaciones del sistema, pero no ponerlas en aislamiento por completo, ya que pueden seguir intercambiando información y comunicándose con el mundo exterior. Su lanzamiento supuso una revolución. Actualmente, la tecnología de contenedores está en auge, e incontables proveedores compiten con ella en el mercado. Entre los proveedores más importantes de container as a service (CaaS) figuran Amazon, Microsoft y Google. La plataforma más famosa es Docker, un desarrollo del proyecto LXC compatible con todos los proveedores de CaaS.

El concepto de la tecnología de contenedores de Linux se remonta a 2001. Ese año, por primera vez, se implementó un entorno aislado en el marco del proyecto VServer. Esa fue la base para crear diversos espacios de nombres (namespaces) controlados en Linux y los ahora denominados contenedores de Linux. Les siguieron otras tecnologías, como los cgroups (grupos de control), que permiten controlar y restringir el uso de recursos para un proceso o conjunto de procesos, o systemd, un sistema de inicialización para administrar los espacios de nombres y sus procesos.

En la práctica, LXC agiliza el desarrollo de las aplicaciones, ya que la tecnología de contenedores contribuye a la portabilidad, la configuración y el aislamiento, entre otras cosas. Los contenedores también son útiles a la hora de transmitir datos en tiempo real, porque proporcionan la escalabilidad necesaria a las aplicaciones. Asimismo, los contenedores de Linux se adaptan a cada infraestructura, lo que los hace muy independientes, de modo que pueden implementarse tanto localmente como en la nube o en un entorno híbrido.

Nota

La razón por la que las tecnologías de contenedores están tan demandadas es la siguiente: todas las aplicaciones del sistema operativo tienen sus propias tareas y han sido diseñadas para ejecutarse justo en ese entorno. Se basan en las configuraciones establecidas por el programador y, por lo tanto, dependen de ciertas bibliotecas, contextos y archivos. Los contenedores resultan muy útiles para probar una nueva aplicación de manera simple, rápida y segura, ya que crean un entorno virtual para utilizarla sin tener que reescribir código, solucionar problemas ni corregir errores. El contenido de un contenedor se basa en la instalación de la distribución de Linux y contiene todos los archivos de configuración, pero es mucho más fácil de configurar que el sistema operativo real.

Objetivos y características de LXC

A primera vista, los principios de LXC no parecen diferir del concepto de la virtualización clásica. Las diferencias solo se hacen evidentes si ambas tecnologías se ponen en contexto. Uno de los aspectos más simples es que los contenedores funcionan a nivel del sistema operativo, mientras que las máquinas virtuales lo hacen a nivel del hardware. Así, los contenedores comparten un sistema operativo y aíslan los procesos de las aplicaciones del resto del sistema, mientras que la virtualización clásica permite que múltiples sistemas operativos se ejecuten en un solo sistema.

Nota

Para que varios sistemas operativos puedan ejecutarse simultáneamente en un entorno virtualizado, se utiliza un hipervisor que emula el sistema de hardware, aunque también consume muchos recursos. En este caso, un método más asequible es el uso de contenedores de aplicación, que se ejecutan de forma nativa en el sistema operativo, es decir, sin emulación.

De forma predeterminada, los contenedores de Linux consumen menos recursos que una máquina virtual y tienen una interfaz de usuario estándar, lo que facilita y simplifica la administración de varios contenedores al mismo tiempo. Incluso es posible gestionar una plataforma de LXC en varias nubes: esto asegura la portabilidad y garantiza que las aplicaciones que se ejecutan correctamente en el sistema del desarrollador también funcionen en cualquier otro sistema. A través de la interfaz del contenedor de Linux, incluso las aplicaciones más grandes pueden iniciarse, detenerse o cambiar sus variables de entorno.

En resumen, el objetivo de LXC es crear un entorno que se parezca lo más posible a una instalación estándar de Linux sin la necesidad de un kernel independiente.

La plataforma de contenedores de Linux actual utiliza las siguientes características del kernel para incorporar aplicaciones y procesos en los contenedores:

  • Espacios de nombres del núcleo (ipc, uts, mount, pid, red y usuario)
  • Perfiles Apparmor y SELinux
  • Directrices de Seccomp
  • Chroots (utilizando pivot_root)
  • Capacidades del kernel
  • cgroups (grupos de control)

Los contenedores de Linux deben permanecer compactos. Por lo tanto, solo constan de unos pocos componentes:

  • Biblioteca liblxc
  • Vinculación de varios lenguajes para la API:
    • Python 3 (soporte a largo plazo en 2.0.x)
    • Lua (soporte a largo plazo en 2.0.x)
    • Go
    • Ruby
    • Python
    • Haskell
  • Varias herramientas estándar para administrar los contenedores
  • Plantillas para distribuciones

¿Cómo funciona LXC?

La importancia del aislamiento y la virtualización radica en que ayudan a administrar los recursos y las medidas de seguridad de la manera más eficiente posible. Además, facilitan la supervisión, permitiendo, por ejemplo, detectar errores en el sistema que a menudo no tienen nada que ver con las aplicaciones en desarrollo. ¿Cómo funcionan los contenedores de Linux?

La forma más fácil y razonable de utilizar los contenedores de Linux es vincular cada contenedor a un proceso, de manera que el usuario mantenga totalmente el control. Para cada proceso, son especialmente importantes los espacios de nombres, que hacen que los recursos estén disponibles para uno o más procesos que utilicen el mismo espacio de nombres. Los procesos también permiten controlar el acceso para garantizar la seguridad de los contenedores.

Para implementar un entorno LXC, las características y sus funciones deben definirse claramente. Los cgroups (grupos de control del kernel) limitan y aíslan los recursos del proceso, como CPU, E/S, memoria RAM y recursos de red. Además, el contenido de un grupo de control se puede administrar, monitorear, priorizar y editar.

Nota

Con Linux, todo son archivos. Por esta razón, en última instancia, cada cgroup consiste en un conjunto de archivos (/sys/fs/cgroup). Existen varias herramientas para administrar este tipo de archivos, como cgmnager.

Las funciones son muy intuitivas, lo que ofrece la gran ventaja de que es muy fácil empezar a utilizar la plataforma LXC. Sin embargo, esto también conlleva algunos inconvenientes, que explicamos a continuación.

Ventajas e inconvenientes de los contenedores de Linux

La facilidad de uso de Linux Containers es su mayor atractivo en comparación con las tecnologías de virtualización tradicionales. En todo caso, la enorme expansión de LXC, un ecosistema casi completo, con sus herramientas innovadoras, se debe sobre todo a la plataforma Docker, que normalizó el uso de los contenedores de Linux. En comparación directa con otros sistemas de contenedores como rkt, OpenVZ o Cloud Foundry Garden, mucho más limitados en términos de uso, LXC se beneficia de su estrecha relación con los pioneros de las plataformas de contenedores.

Los administradores de sistemas que hayan trabajado anteriormente con programas de virtualización basados en hipervisor como Hyper-V no tendrán problemas para utilizar LXC. Toda la configuración, desde la creación y la puesta a punto de las plantillas de los contenedores, hasta el desarrollo de las aplicaciones, pasando por la configuración de las redes y el sistema operativo, es la misma. También todos los scripts y flujos de trabajo escritos para máquinas virtuales pueden utilizarse con los contenedores de Linux, por lo que los desarrolladores no deben habituarse a nuevas soluciones y herramientas personalizadas, sino que pueden continuar trabajando sin problemas en un entorno con el que están familiarizados, con sus propios scripts y flujos de trabajo de automatización.

Uno de los mayores inconvenientes de LXC se hace evidente cuando se observa la administración de la memoria: se admiten diferentes backends de memoria (Ivm, overlayfs, zfs y btrfs), pero todo se guarda directamente en el rootfs de forma predeterminada. Los entornos simulados no se pueden registrar. En este sentido, otras plataformas de contenedores ofrecen soluciones más inteligentes y flexibles, tanto para almacenar los contenedores como para administrar los entornos simulados.

¿En qué ámbitos se utiliza LXC?

LXC es un proyecto de código abierto que cuenta con el apoyo económico de canonical, la empresa que hay detrás de Ubuntu, una distribución de Linux. Sin embargo, la mayor parte del apoyo procede de su propia comunidad, que promueve el proyecto desarrollando versiones estables y actualizaciones de seguridad de forma colaborativa. Varias ediciones de LXC ya disfrutan de soporte permanente y actualizaciones de seguridad periódicas. Otras versiones reciben el mejor servicio posible, generalmente hasta que se lanza una versión más nueva y estable.

Linux Containers se utiliza como tecnología de contenedores adicional y de soporte en la mayoría de los casos. En este campo, esto no es raro, porque los contenedores todavía se consideran una tecnología relativamente nueva, a diferencia de las máquinas virtuales. Sin embargo, hay que tener en cuenta que los proveedores de soluciones de contenedores están creciendo continuamente y, con ellos, el ecosistema en torno a la tecnología.

Hoy en día, LXC es una alternativa muy razonable a las aplicaciones tradicionales especialmente dirigidas a los administradores de VM. Con Linux Containers, hacer la transición de una máquina virtual a una tecnología de contenedores es más fácil que con cualquier otra tecnología de este tipo.

Alternativas a Linux Containers

La alternativa a LXC más popular es Docker. Esta plataforma, basada en los contenedores de Linux, se ha desarrollado continuamente en los últimos años, por lo que ahora se ejecuta también en sistemas Windows. Esto permite que los proveedores de nube más importantes, como Google, IBM, AWS y Azure, ofrezcan soporte nativo de Docker.

Una alternativa de contenedores para virtualizar servidores completos con Linux muy conocida es OpenVZ. Al igual que LXC, OpenVZ utiliza el núcleo del sistema operativo del host y proporciona al usuario el servidor virtual en un entorno aislado.

KVM es una tecnología de virtualización de código abierto que ya viene integrada en Linux: KVM son las siglas de “Kernel-based Virtual Machine” (en español, máquina virtual basada en kernel). Esta tecnología convierte a Linux en un hipervisor, permitiendo que el host ejecute múltiples entornos aislados.

Kubernetes procede originalmente de Google, una de las primeras promotoras de las tecnologías de contenedores de Linux. Esta plataforma de código abierto automatiza el funcionamiento de los contenedores de Linux. Los conjuntos de hosts en los que se ejecutan los contenedores se agrupan en clústeres y, por lo tanto, pueden administrarse fácilmente.

Nota

Si quieres aprender a utilizar LXC, es imprescindible que comprendas el funcionamiento del estrechamente relacionado LXD. A menudo, estos dos términos y tecnologías se confunden. LXD es un desarrollo de LXC que contiene un demonio de sistema, entre otros elementos.