Los microservicios han ganado una popularidad constante desde el levantamiento de la nube. Empresas como Amazon y Netflix están utilizando plataformas en la nube para ofrecer sus servicios más solicitados. Los contenedores se encuentran en el núcleo de tales aplicaciones nativas de la nube. Un contenedor es un entorno aislado que facilita los microservicios y ofrece ventajas como un escalado superior y una implementación rápida. Hay una gran diferencia entre las máquinas virtuales tradicionales basadas en hipervisor como VMware y los servicios de virtualización a nivel de sistema operativo como Docker y Linux Containers (LXC). En esta guía, proporcionaremos a nuestros lectores un conocimiento práctico de LXC, una sólida herramienta de virtualización a nivel de sistema para Linux.
Guía todo en uno para dominar los contenedores de Linux
Si es un administrador de Linux que quiere aprender sobre LXC en detalle, esta es la guía perfecta para usted. En esta publicación, describimos las diversas características y beneficios de LXC, así como cuándo elegirlo sobre otros servicios de contenedorización. También le mostraremos cómo instalar y comenzar con LXC.
Contenedores de Linux:características y fundamentos
Entonces, ¿qué es LXC? Como ya dijimos, es un servicio de virtualización que nos permite hacer girar clústeres de entornos Linux aislados. Proporciona una gran cantidad de beneficios sobre las máquinas virtuales monolíticas al reducir la carga de recursos en la máquina host. Esto lo hace ideal para crear, probar e implementar software nativo en la nube. LXC, a diferencia de otras herramientas de virtualización a nivel de sistema operativo, proporciona entornos Linux mucho mejores.
LXC no utiliza ningún mecanismo sofisticado de control de recursos como los hipervisores. Más bien, utiliza funciones de contención de host proporcionadas directamente por el kernel de Linux. Los componentes principales en los que se basa son espacios de nombres y cgrupos . Se agregaron por primera vez al kernel desde la versión 2.6.24. El principal principio de diseño de cgroups también conocido como 'Grupos de control' es proporcionar limitación de recursos, priorización, contabilidad y control. Los espacios de nombres son responsables de ocultar el espacio de proceso y la información de recursos de un contenedor de los demás.
Además, LXC también tiene soporte incorporado para varias políticas de refuerzo de Linux, como los perfiles Apparmor y SELinux, así como Chroots. Se ejecuta en casi todas las arquitecturas y en la nube sin esfuerzo. Además, puede activar cualquier distribución de Linux independientemente del host. Entonces, digamos que su máquina host está ejecutando Ubuntu. Puede ejecutar fácilmente Red Hat o CentOS en esta máquina usando contenedores LXC.
LXC, a diferencia de otros servicios de contenedorización, no puede ejecutar Mac OS o Windows. Esto se debe a que los contenedores LXC dependen directamente del kernel del host. Entonces, si desea ejecutar aplicaciones que requieren uno de estos sistemas, debe considerar una plataforma diferente como Docker. En general, LXC es más adecuado para las personas que necesitan ejecutar entornos Linux aislados con una sobrecarga de recursos mínima.
Contenedores de Linux frente a Docker
- -Si trabaja en un equipo de DevOps o como profesional de confiabilidad del sitio, ya debería estar familiarizado con Docker. Es la plataforma de contenedores más popular para aplicaciones nativas de la nube en estos días. Entonces, puede preguntarse en qué se diferencia LXC de Docker o cuál de ellos es mejor. Al igual que con cualquier tecnología, la respuesta depende únicamente de sus casos de uso. Sin embargo, arrojaremos algo de información sobre las diferencias entre estas dos populares plataformas de virtualización.
Docker es una tecnología relativamente más nueva en comparación con LXC. De hecho, usó LXC debajo del capó en sus primeros días. Sin embargo, Docker ha recorrido un largo camino desde entonces y ha implementado sus propias soluciones. Ahora, la principal diferencia entre Docker y LXC son sus opciones de diseño. Docker enfatiza más en la creación de aplicaciones. LXC, por otro lado, está diseñado para proporcionar entornos virtuales Linux independientes.
Los desarrolladores suelen utilizar Docker para crear aplicaciones que se pueden desechar en cuanto llega una nueva versión. Sin embargo, las aplicaciones que usan LXC están destinadas a ser persistentes. Puede ssh en un contenedor LXC como lo haría en un host remoto de Linux y administrar el entorno. Docker no permite esto, y utilizará herramientas especializadas para administrar la implementación y las pruebas. Al final, puede usar cualquiera de estos para crear aplicaciones en la nube. Por lo general, las personas eligen LXC en lugar de Docker cuando crean aplicaciones que deben mantenerse durante mucho tiempo.
LXC:Componentes
El tiempo de ejecución de LXC consta de un montón de componentes individuales. Esto incluye el núcleo liblxc biblioteca, un conjunto de herramientas estándar para controlar los contenedores, varias plantillas de distribución y varios enlaces de idioma para la API principal. El soporte de idiomas incluye Python, Go, Ruby, Lua y Haskell. Además, hay algunas dependencias estrictas sin las cuales lxc no se instalará, como una biblioteca C como glibc, uclib o bionic. LXC también requiere la versión del kernel 2.6.32 o más.
LXC:Tipo de virtualización
Los contenedores de Linux (LXC) ofrecen un entorno de sistema operativo nominal que se puede utilizar para ejecutar servicios de red o aplicaciones Linux específicas. Utiliza el kernel del sistema host directamente y, como consecuencia, no se puede ejecutar en máquinas que no sean Linux. Los usuarios pueden elegir entre una gran cantidad de plantillas de distribución para su contenedor, incluidas, entre otras, Ubuntu, Fedora, Debian, Red Hat y CentOS.
El principal beneficio de este tipo de contenedor es que nos permite aislar servicios confidenciales. Puede usar este tipo de virtualización para crear entornos para análisis de malware, piratería ética o tareas que requieren un host independiente. Sin embargo, estos son solo los fines previstos. Por lo tanto, también puede ejecutar cualquier servicio arbitrario que normalmente ejecuta en su máquina Linux. Este es un marcado contraste con el enfoque centrado en la aplicación de Docker.
LXC:soporte de herramientas
El soporte robusto de herramientas es crucial para administrar aplicaciones en la nube, así como servicios independientes. LXC ofrece un amplio conjunto de herramientas que son casi idénticas a su máquina Linux tradicional. Por lo tanto, no necesita instalar herramientas de administración sofisticadas para administrar sus contenedores LXC. Puede usar cualquier paquete estándar de Linux, como ssh, htop, iptables y trabajos Linux Cron. Esto facilita a los administradores la gestión y automatización de servicios en contenedores.
Además, lxc cli ofrece un conjunto integral de herramientas para crear, ejecutar y administrar contenedores LXC sobre la marcha. Aprenderá cómo instalarlo y utilizarlo para realizar las funciones básicas en esta guía. Además, también puede utilizar herramientas adicionales mediante la cadena de herramientas LXD. Hablaremos de LXD en detalle en las secciones siguientes. En general, LXC no limita la capacidad del usuario para usar paquetes estándar de Linux y al mismo tiempo ofrece herramientas especializadas.
LXC:Ecosistema
El ecosistema LXC es prácticamente idéntico al de Linux. Esto hace que sea más fácil comenzar con los contenedores de Linux que con Docker o rkt. Dado que podemos instalar y ejecutar todos los paquetes estándar de Linux en estos contenedores, es fácil de configurar y mantener. Así que no se sienta abrumado cuando descubra que no hay necesidad de herramientas adicionales como Kubernetes y Swarm para LXC.
LXC:Facilidad de uso
Una de las razones clave para pasar a plataformas en contenedores desde máquinas virtuales Linux es una mayor facilidad de uso. LXC lleva esto un paso adelante al eliminar la necesidad de instalar paquetes monolíticos por completo. Esto no solo aumenta la productividad, sino que también hace que el flujo de trabajo sea mucho más fácil de manejar. Los contenedores LXC vienen con sistemas de inicio individuales que se encargan de la configuración del sistema mientras mantienen una huella de recursos liviana.
Además, la experiencia de usuario fluida y un ecosistema maduro hacen de LXC una opción mucho mejor que las máquinas virtuales tradicionales. Puede activar un contenedor LXC en cuestión de minutos y ejecutar su distribución de Linux favorita en él. Instalar y administrar aplicaciones de Linux es tan simple como escribir algunos comandos cotidianos. Por lo tanto, si no desea aprender un nuevo conjunto de herramientas y aún así poder ejecutar servicios aislados, los contenedores LXC ofrecen una excelente opción.
LXC:Popularidad
No hay duda de que los contenedores de Linux carecen de la popularidad que disfruta Docker. Esto se deriva de algunas opciones de diseño concisas, que incluyen la incapacidad de ejecutar entornos Windows o Mac OS, entre otros. Docker es más liviano que LXC y, por lo tanto, es más escalable. Sin embargo, LXC es mucho más antiguo que Docker y sus contenedores son significativamente más independientes que Docker.
Además, LXC es muy adecuado para crear entornos de prueba como laboratorios de análisis de malware, etc. Esto lo hace mucho más popular entre los profesionales de TI de alto nivel que trabajan regularmente con proyectos confidenciales. LXC también disfruta de una mayor popularidad en las industrias que desarrollan y mantienen aplicaciones con un ciclo de vida prolongado. En general, aunque carece de popularidad en comparación con Docker o rkt, LXC ofrece mayor seguridad y facilidad de mantenimiento.
LXC:Rendimiento
Como ya dijimos, una de las razones principales por las que las personas usan plataformas en contenedores en lugar de máquinas virtuales es la carga de recursos reducida. Esto, a su vez, conduce a un rendimiento muy superior. LXC ofrece más de 10 veces la densidad que las máquinas virtuales tradicionales como KVM (máquina virtual basada en kernel). Esto significa que puede ejecutar hasta 10 veces más contenedores en un solo host Linux en comparación con las máquinas invitadas KVM.
Además, los hipervisores también son propensos a problemas de latencia no deseados. En comparación con KVM, LXC reduce la latencia al 57 %. Además, los contenedores LXC se cargan mucho más rápido que los emuladores virtuales respaldados por hipervisores. Por ejemplo, las instancias LXC se inician un 94 % más rápido en comparación con KVM. Entonces, como puede ver, LXC proporciona un aumento significativo en el rendimiento al reducir la carga de recursos y la latencia. Y el tiempo de carga más rápido ofrece una experiencia de usuario fluida.
LXC:Integración
Una ventaja clave de los contenedores de Linux es que se integran muy bien con el software existente. No está limitado a usar solo aplicaciones tradicionales de Linux con LXC. Por ejemplo, podemos usar tanto LXC como Docker como complemento entre sí. Lo que esto significa es que simplemente puede alojar sus microservicios Docker en una instancia LXC para brindarles un mejor aislamiento y características similares a las de una VM. Esto hace que sea extremadamente conveniente ejecutar y administrar aplicaciones Docker.
Además, también elimina la limitación de ejecutar solo aplicaciones nativas de Linux. Por lo tanto, podemos crear fácilmente un microservicio de Docker sobre Windows o Mac y ejecutarlo desde dentro de un contenedor de Linux. Este es un método muy bueno. LXC también es adecuado para OpenStack, una popular plataforma de computación en la nube. Es utilizado por una gran cantidad de líderes de la industria y generalmente se implementa como IaaS (Infraestructura como servicio). Esto hace que implementar y administrar aplicaciones en la nube sea más fácil que nunca.
LXC:Migración
La migración es crucial para muchos administradores y LXC brinda el soporte adecuado en este sentido. Hay más de una forma de migrar un contenedor de Linux de un host a otro. También puede realizar una migración en vivo, aunque con algunas limitaciones. La forma más fácil de migrar un contenedor a una plataforma diferente es realizar una copia de seguridad y restaurarla en la máquina de destino, ya sea físicamente o de forma remota a través de ssh.
También puede migrar un contenedor utilizando la API LXD y el protocolo Simplestreams. Vamos a hablar de LXD en la siguiente sección. Así que no te preocupes si aún no sabes sobre esto. No vamos a entrar en demasiados detalles sobre cada paso del proceso de migración. Tal vez lo cubriremos en una guía diferente. Por ahora, puede encontrar más información en el sitio web de Ubuntu con respecto a la migración en vivo. Stéphane Graber, el desarrollador principal de LXC, también cubrió la migración de LXC en su sitio web.
LXC:Soporte
Al igual que con cualquier plataforma nueva, el soporte empresarial es muy importante. Afortunadamente, LXC brinda un servicio de primer nivel en este sentido. Por lo tanto, no importa si usa contenedores de Linux para fines personales o comerciales, tiene la garantía de obtener soporte adicional cuando lo necesite. Además, dado que LXC es desarrollado por Canonical, la compañía detrás de Ubuntu y otro software popular de código abierto. Por lo tanto, la calidad del servicio es mejor que nunca.
Canonical también ofrece soporte comercial para empresas que desean usar LXC para sus aplicaciones nativas de la nube. Sin embargo, también se proporciona para versiones de Ubuntu LTS. Las versiones 2.0 y 3.0 de LXC son versiones de soporte a largo plazo. Por lo tanto, si desea tener contenedores estables en todas sus plataformas, debe ceñirse a estas versiones. La compatibilidad con otras plantillas de distribución generalmente depende de esa distribución específica.
LXD:Primeros pasos
LXC comenzó como una interfaz de espacio de usuario que brinda acceso a las funciones de contención integradas del kernel de Linux. Es más que capaz de sus tareas. Sin embargo, con la aparición de Docker y su poderoso ecosistema, los desarrolladores cambiaron su enfoque en el desarrollo de una plataforma más madura. El resultado es LXD, un sólido sistema de gestión de contenedores que puede proporcionar una experiencia similar a la de una máquina virtual pero utilizando contenedores LXC.
LXD se basa en imágenes, al igual que las imágenes de Docker. También implementa una API REST simple pero poderosa para interactuar con los servicios fácilmente. Esta API se conecta con el sistema local mediante un socket Unix y también se puede conectar de forma remota a través de protocolos de red estándar.
Algunas de las características de LXD incluyen mayor seguridad, escalabilidad, experiencia de usuario, migración en vivo, control avanzado de recursos, administración de redes y administración de almacenamiento. En general, LXD es un complemento de LXC, no un reemplazo. Utiliza LXC debajo del capó y simplemente elimina los detalles de bajo nivel.
Instalación y uso de LXC
Hemos discutido los méritos de los contenedores de Linux en gran detalle. Ahora, es hora de ensuciarse las manos y comenzar a usar esta increíble tecnología. Pero primero, debe instalar LXC en su máquina.
Estamos mostrando cómo instalar LXC en una máquina Linux estándar. Aprenderá cómo instalar LXC en Linux y crear contenedores usando la CLI. Simplemente abra su emulador de terminal de Linux favorito y escriba el siguiente comando.
$ sudo apt-get install lxc
Esto instalará la CLI de lxc en su máquina local. Una vez hecho esto, tendrá acceso a todos los comandos lxc, así como a las plantillas de distribución que son necesarias para construir y ejecutar contenedores. Ahora puede crear un contenedor básico usando el siguiente comando simple.
$ lxc-create -t <template> -n <container name>
La -t marca especifica el nombre de la plantilla, y el -n bandera especifica el nombre del contenedor. Este comando creará el contenedor basado en la plantilla de distribución dada. Use el siguiente comando para mostrar una lista de todas las plantillas disponibles.
$ ls /usr/share/lxc/templates/
Entonces, el siguiente comando crea un contenedor llamado test-container utilizando la plantilla de Alpine.
$ lxc-create -t alpine -n test-container
Esto continuará y descargará los archivos necesarios para una instalación de Alpine. Esto debería tomar un tiempo y mostrará el usuario y la contraseña predeterminados una vez que haya terminado. Ahora, puede iniciar el contenedor usando el siguiente comando.
$ sudo lxc-start -n test-container
Use el siguiente comando para conectarse con este contenedor usando el nombre de usuario y la contraseña predeterminados.
$ sudo lxc-console -n test-container
Esto lo conectará con el contenedor en ejecución. Utilice la combinación de teclas Ctrl+a+q para desconectarse de este contenedor. También puede conectarse al contenedor directamente como root usando lo siguiente.
$ sudo lxc-attach -n test-container
Utilice el siguiente comando para ver parte de la información de este contenedor.
$ sudo lxc-info -n test-container
Mostrará el nombre del contenedor junto con su estado, PID, dirección IP, uso de memoria, uso de CPU y más. Si ha iniciado varios contenedores, puede ver una lista de ellos utilizando lo siguiente.
$ sudo lxc-ls
Para detener un contenedor específico, use el siguiente comando.
$ sudo lxc-stop -n test-container
También puede eliminar un contenedor de su sistema si ya no lo necesita. Use el siguiente comando para este propósito.
$ sudo lxc-destroy -n test-container
Esto borrará el contenedor de prueba junto con todas sus configuraciones de su entorno de host. Vaya a la página de documentación de LXC para obtener más detalles sobre cada comando disponible.
Instalación y uso de LXD
Como ya hemos discutido, LXD es un contenedor para LXC con una lista de características adicionales. Es esencialmente un sistema de gestión basado en imágenes para contenedores de Linux. Puede instalar lxd usando el siguiente comando.
$ sudo snap install lxd
No necesita instalar LXC por separado si instala LXD. Aparte del paquete snap, LXD también está disponible como paquetes Debian. También puede instalarlo desde la fuente. Ahora, necesitas hacer algunas cosas de configuración. El primero es agregar /snap/bin/lxd al $PATH de su sistema.
$ echo 'export PATH="/snap/bin/lxd:$PATH"' >> ~/.bashrc $ source ~/.bashrc
Debe inicializar la configuración de lxd ahora. Simplemente ejecute el siguiente comando de terminal de Linux para hacer esto.
$ sudo lxd init
Te pedirá un montón de opciones. Puede seleccionar los predeterminados para su ahora. Una vez realizada la configuración, ya puede crear su primer contenedor. LXD crea instancias de contenedores utilizando imágenes. El siguiente comando muestra una lista de repositorios de imágenes disponibles. Puede agregar nuevas fuentes de imágenes y crearlas localmente. Por ahora, nos quedaremos con los controles remotos oficiales.
$ sudo lxc launch images:alpine
Este comando creará una instancia utilizando la imagen alpina. Es una imagen bastante liviana que se adapta muy bien a nuestro propósito. Puedes usar otras imágenes si quieres. Ahora, puede usar el siguiente comando para obtener un shell para este contenedor recién creado.
$ sudo lxc exec test-container /bin/sh
Si ha creado el contenedor basado en una imagen de Ubuntu, reemplace /bin/sh con /bin/bash para invocar el shell bash. También puede usar cualquier shell estándar de Linux siempre que la imagen del contenedor lo admita. También puede ejecutar un comando dentro del contenedor sin conectarse a un shell.
$ sudo lxc exec test-container -- ip a
Esto imprimirá la dirección IP de las interfaces del contenedor usando el comando ip de Linux. Finalmente, puede detener el contenedor de prueba usando el siguiente comando.
$ sudo lxc stop test-container
LXD admite muchos comandos adicionales para contenedores de Linux. Dirígete a la página de documentación de LXD para obtener más detalles al respecto.
Pensamientos finales
Los contenedores de Linux son una excelente manera de implementar máquinas virtuales livianas sin hipervisores. Esto los hace altamente escalables y amigables con los recursos. Además, LXC también ofrece un enfoque viable para desarrollar aplicaciones nativas de la nube. La principal diferencia entre los contenedores LXC y los contenedores Docker es que LXC se centra en el sistema operativo, mientras que los contenedores Docker se centran en las aplicaciones.
Por lo tanto, si está buscando crear un entorno de laboratorio personal o un servicio sólido listo para la nube, considere LXC como una mejor opción que Docker o rkt. Sin embargo, Docker sigue siendo una excelente opción para la virtualización de aplicaciones. Por lo tanto, consulte nuestra guía sobre los comandos cotidianos de Docker si desea probar Docker.