Demasiadas opciones: cómo elegir la herramienta adecuada para administrar sus clústeres de Docker

Hay todo tipo de formas de jugar el juego Docker y, obviamente, ninguna de ellas será adecuada para cada caso de uso. Entonces, lo que voy a hacer aquí es brindarle una breve descripción funcional de cada una de las opciones de administración más obvias de una manera que pueda ayudarlo a elegir por sí mismo y ahorrarle mucho tiempo y frustración en el proceso. De esa manera te ves inteligente y nadie tiene que saber que fui yo todo el tiempo.

En primer lugar, sin embargo, aquí está la frase con la que debe comenzar todo artículo sobre cualquier tema, incluso remotamente relacionado con Docker: Durante los últimos n años (donde n <6), las tecnologías de contenedores, y Docker en particular, se han convertido en herramientas dominantes en el mundo de la provisión de aplicaciones. .

Excelente. Con eso fuera del camino, podemos ponernos manos a la obra. Entonces, está considerando entregar su aplicación o servicio en red a través de contenedores Docker ... o al menos darles una buena mirada. Ciertamente no discutiré contigo: probablemente sea una buena elección.

Ahora, presumiblemente, ya sabe que Docker Engine es el entorno de software de código abierto que le permite virtualizar partes y partes de un sistema de hardware host hasta que se vean y actúen como servidores reales. Docker ahora está disponible en sus versiones gratuitas (Community Edition) o comercialmente compatibles (Enterprise Edition).

Sin duda, también sabe que invocar Docker Engine desde su línea de comando usando cosas como:

$ docker ps$ docker images

y:

$ docker network inspect

... hará las cosas. ¿No te sientes tan cómodo con todo eso? Hay algún material de nivel de introducción que puede que te guste que esté incluido en mis cursos orientados a Docker en Pluralsight.

Todo eso funcionará bien mientras estás aprendiendo a moverte. Pero una vez que esté listo para comenzar a planificar una implementación robusta y altamente escalable, con configuraciones complejas que pueden incluir microservicios y puentes de red, el panorama cambia rápidamente. La pregunta no es tanto "cómo", sino "dónde y cuál": ¿tiene los recursos informáticos y de red para ejecutar su aplicación localmente o necesitará encontrar un host? ¿Debería hacerlo usted mismo o elegir un servicio administrado en una nube pública como Elastic Beasntalk de AWS?

¿Y luego la administración? ¿Eres del tipo práctico o prefieres pararte una capa o dos atrás y dejar que las herramientas de administración como Kubernetes o el modo de enjambre de Docker hagan parte del trabajo pesado por ti? ¿O qué tal dos o tres capas hacia atrás e ir con Ansible o Puppet?

Dividamos las cosas en tres categorías: herramientas de repositorio para almacenar y administrar imágenes de Docker, marcos de administración para definir, lanzar y administrar contenedores de Docker a lo largo de sus ciclos de vida, y luego algunas herramientas de administración de automatización de la configuración y la línea de comandos .

1. Registros de imágenes

Docker Hub

Para la mayoría de las personas, el primer lugar obvio para buscar imágenes de Docker (los paquetes que contienen los sistemas operativos y el software utilizado para ejecutar contenedores) es Docker Hub. Proporcionado por el propio Docker, Docker Hub contiene una amplia colección de imágenes que vienen precargadas para admitir todo tipo de proyectos de aplicaciones. Puede buscar e investigar imágenes en el sitio web hub.docker.com y luego extraerlas directamente en su propio entorno de Docker Engine.

$ docker pull ubuntu

Una vez que comience a crear sus propias imágenes, puede almacenar de manera segura tantas como desee en repositorios públicos en Docker Hub. Además, le permitirán un repositorio privado gratis y más a una tasa de aproximadamente un dólar por repositorio. Quizás lo mejor de Docker Hub es la forma en que funciona a la perfección con casi cualquier otra cosa conectada a Docker, incluidos los proveedores de nube pública como AWS y los servicios de administración de infraestructura como Docker Cloud.

El servicio de Docker Store independiente le permite publicar imágenes y complementos precertificados para satisfacer la demanda de acceso a recursos confiables.

Registro de contenedores EC2 (ECR)

AWS de Amazon sabe todo sobre el poder y el potencial de Docker y quiere participar en el juego. Como parte de sus esfuerzos por abrir su ecosistema en la nube a la mayor cantidad posible de negocios de Docker, han creado su propio registro para su plataforma EC2 Container Service: ECR. Las imágenes se pueden enviar, extraer y administrar a través de la AWS GUI o la herramienta CLI. Las políticas de permisos pueden controlar de cerca el acceso a las imágenes solo de las personas que seleccione.

¿La limitación? Evidentemente, ECR está diseñado para funcionar mejor con la infraestructura que se ejecuta en servicios basados ​​en AWS como ECS y Elastic Beanstalk.

Registro de Docker

Si necesita mantener sus imágenes un poco más cerca de casa, ya sea por razones prácticas o de seguridad, entonces querrá saber acerca del Docker Registry de Docker, disponible gratuitamente. Usted designa un servidor de registro con acceso hacia y desde sus otros activos de red, instala y luego habilita el paquete de registro de la ventana acoplable, etiqueta las imágenes para que apunten a su registro local, y usted tiene un repositorio privado real y en vivo.

$ dpkg -i docker-registry_2.4.1~ds1-2_amd64.deb$ systemctl enable docker-registry$ docker tag hello-world localhost:5000/hello-world:latest

Las imágenes en sí se almacenan en lo profundo del sistema de archivos de su servidor, pero están disponibles a través de las mismas herramientas CLI que las de Docker Hub. ¿Le preocupa proteger sus imágenes? Docker Registry le permite aplicar certificados SSL / TLS y controlar el acceso al hacer cumplir la autenticación de inicio de sesión en su sitio.

El Docker Trusted Registry es la versión comercial de Docker Registry. A cambio de cargos mensuales o anuales, obtiene detalles adicionales que incluyen soporte, una GUI basada en navegador e integración LDAP / AD.

2. Marcos de administración

Incluso una vez que se haya graduado más allá de la etapa de solo ver cómo funcionan las cosas, es posible que desee mantener una implementación de Docker activa en las instalaciones: tal vez todos sus clientes sean locales o su carga de trabajo proyectada no sea tan pesada. O quizás simplemente está paranoico con la seguridad. Y por "paranoico acerca de la seguridad", por supuesto, me refiero a "bien informado sobre el estado actual de las vulnerabilidades de la red".

Una forma de "permanecer local" es simplemente continuar con lo que ha estado haciendo hasta ahora. Siempre que tenga en cuenta la seguridad de los recursos y las consideraciones de capacidad, no hay razón para abandonar el antiguo motor de Docker de Community Edition que ya tiene instalado.

Sin embargo, si el nivel de complejidad que cree que va a enfrentar lo deja un poco perdido, es posible que desee considerar actualizar a un entorno comercial que, junto con el soporte continuo, pueda ofrecer consolas de administración basadas en navegador. Sin embargo, de cualquier manera, necesitará proporcionar su propio entorno de alojamiento donde se ejecutarán sus contenedores. Pueden ser sus servidores locales o máquinas virtuales que se ejecutan en una nube pública como AWS o Azure.

Centro de datos de Docker

Puede configurar Datacenter (ahora comercializado como parte de Docker Enterprise Edition) descargando e instalando el Docker Engine normal en su servidor local, junto con un segundo paquete llamado Docker Universal Control Plane (UCP). El UCP proporciona una interfaz de navegador que permite la administración centralizada de todas las imágenes, aplicaciones y redes que componen su infraestructura. La seguridad también se maneja a través de la interfaz.

Nube de Docker

Al igual que Docker Datacenter (que también es un producto oficial de Docker), Docker Cloud ofrece una GUI, una consola basada en navegador para administrar todos los aspectos de sus implementaciones de Docker. Esto incluye la administración de sus nodos de host que se ejecutan en nubes públicas. La gran diferencia es que, a diferencia de Datacenter, el servicio de administración de Docker Cloud se aloja desde el sitio cloud.docker.com: no es necesario instalar ningún software de servidor en su propio equipo.

Funciona ingresando información de autenticación para las cuentas de su proveedor de nube (como AWS) o instalando Docker Cloud Agent en cualquier máquina Linux o Windows que se ejecute en cualquier lugar donde haya conectividad de red. Al hacer clic en el botón "Traiga su propio nodo" en la ventana Clústeres de nodos, se mostrará un comando de Linux para descargar e instalar el agente que podría verse así:

$ curl -Ls //get.cloud.docker.com/ | sudo -H sh -s 90b501cb04e344bfbf76890a09362c39

Docker Cloud organiza los recursos en clústeres de nodos, que son grupos de nodos individuales que se administran como parte de un único servicio, todos dedicados a un objetivo de implementación unificado.

Creo que parte de la razón por la que Docker continúa promocionando dos servicios similares (Datacenter y Cloud) se remonta a hace un par de años cuando Docker compró una empresa llamada Tutum y cambió el nombre de su producto basado en la web Docker Cloud. Tutum ya tenía una base de clientes satisfecha y un modelo de negocio bastante exitoso, por lo que no había razón para cerrarlo. En cualquier caso, ambos funcionan, así que solo elige el que te suene.

Servicio de contenedor de AWS EC2 (ECS)

Además del registro de imágenes ECR, AWS ha creado su propia infraestructura completa para alojar y administrar clústeres de contenedores de Docker. ECS funciona aprovisionando una instancia EC2 especialmente diseñada con Docker Engine y un agente ECS instalados. Con la consola de ECS o la AWS CLI, puede definir, lanzar y administrar contenedores en esa instancia EC2.

$ aws ecs describe-clusters

Para ser honesto, descubrir cómo encajan todas las piezas de ECS puede ser una tarea difícil. Mi curso "Uso de Docker en Amazon Web Services" sobre Pluralsight dedica algo de tiempo a explicar cómo funcionan las piezas. Aquí está la versión corta:

  • Tareas : metadatos que definen una aplicación y su entorno de red, almacenamiento y seguridad.
  • Servicios : software que lanza, monitorea y controla sus contenedores
  • Contenedores : definiciones de las máquinas que ejecutarán una tarea
  • Clústeres : estructuras organizativas para tareas y servicios

AWS Elastic Beanstalk

Elastic Beanstalk se asienta de manera efectiva sobre ECS, lo que le permite implementar su aplicación en todos los recursos de AWS que normalmente usa ECS, pero con prácticamente toda la logística perfectamente abstraída. Efectivamente, todo lo que necesita para lanzar un entorno de microservicios complejo y completamente escalable es un script declarativo con formato JSON en un archivo llamado Dockerrun.aws.json. Puede cargar su secuencia de comandos en la GUI o, desde un directorio local inicializado mediante la interfaz de línea de comandos de AWS Beanstalk, ejecutarlo mediante:

$ eb run

Y eso es. No realmente.

Debo mencionar que los archivos Dockerrun.aws.json vienen en dos versiones: V1 para implementaciones de contenedor único y V2 para múltiples contenedores. También vale la pena señalar que una gran ventaja de usar la CLI sobre la versión del navegador es lo más fácil que puede hacer los inicios de sesión SSH remotos en el host de EC2 y las tareas de administración.

Aquí hay algo más sobre lo que pensar: los primeros diecisiete capítulos de mi libro “Aprenda los servicios web de Amazon en un mes de almuerzos” trazaron, paso a paso, la construcción de un sitio de WordPress altamente disponible, escalable y seguro. Para el capítulo 19, solo para ilustrar rápidamente cómo funciona, creé un archivo Dockerrun.aws.json de 20 líneas que hizo casi exactamente lo mismo ... pero en solo cinco minutos.

¡Eso no quiere decir que los primeros 17 capítulos del libro fueran una pérdida de tiempo! De hecho, sin comprender cómo funciona cada servicio de AWS por separado, no comprendería completamente qué fue lo que Beanstalk realmente logró. Y ciertamente se perderá todo tipo de funciones que pueden llevarlo mucho más allá de lo que Beanstalk puede ofrecer. Pero seguro que dice algo sobre el poder de las implementaciones con guiones, ¿no es así?

3. Herramientas de gestión

Modo enjambre de Docker

Aunque ahora es parte de Docker Engine desde el primer momento, tal vez porque todavía está experimentando cambios constantes, el modo de enjambre de Docker de alguna manera tiene el sabor de un producto independiente. La idea es que pueda designar uno de sus servidores (conocido como nodo) como administrador:

$ docker swarm init

… Y otros servidores como clientes:

$ docker swarm join

A partir de ahí, el uso de comandos de "servicio de Docker" del administrador creará y administrará clústeres de contenedores de Docker como servicios, y distribuirá los contenedores de manera automática y eficiente entre todos sus servidores disponibles, sin importar dónde puedan vivir. Debería probar esto por sí mismo solo por la emoción de ejecutar un simple comando de "escala de servicio" y ver la cantidad adecuada de contenedores aparecer mágica e instantáneamente en su red.

$ docker service create -p 80:80 --name webserver nginx$ docker service scale webserver=5

Dediqué parte de mi curso Pluralsight “Uso de Docker con AWS Elastic Beanstalk” a demostrar Docker Swarm en acción. Eche un vistazo si está interesado.

Kubernetes

Al igual que Swarm, Kubernetes de Google también es muy bueno para administrar de manera eficiente grandes grupos de contenedores. Y decir que Kubernetes es popular es como decir que la lluvia está mojada. Duh.

Kubernetes organiza los recursos en pods, que a su vez están formados por contenedores interconectados que ejecutan microservicios individuales. Debe pensar en una cápsula como algo completamente desechable, su función reemplazable instantáneamente por otras que esperan su oportunidad de ingresar a este mundo.

De hecho, los pods se crean y destruyen de acuerdo con las necesidades definidas en el nodo maestro por cosas como programadores y controladores de replicación, todos los cuales, a su vez, pueden ser administrados por el programa kubectl. Los pods, y sus contenedores, se ejecutan en servidores conocidos como nodos trabajadores que ejecutan sus propias instancias de Docker Engine.

No sé ustedes, pero me resulta confuso y molesto que cada plataforma de TI elija referirse a los elementos constitutivos con nombres diferentes, pero a menudo solo ligeramente diferentes. Debería haber una ley.

Herramientas de automatización de la implementación

No puedo dejar un artículo de revisión como este sin al menos mencionar cómo puede usar casi cualquiera de las herramientas de orquestación de implementación populares como Ansible, Jenkins y Puppet para automatizar sus entornos Docker. Profundizar en los pequeños detalles me llevaría mucho más allá de mi plan original para este artículo, así que simplemente elija su herramienta favorita y documente.

¿Eso fue útil? Visite mi sitio web Bootstrap IT para ver un montón de bondades similares de Docker, Linux y AWS.