Este blog explicará cómo ejecutar un contenedor Docker Couchbase utilizando Servicio de contenedores de Amazon EC2 (Amazon ECS).
Muchas gracias a @moviolone por ayudar a entender los conceptos y poner en marcha esta configuración.
¿Qué es Amazon ECS?
Amazon ECS es un servicio de administración de contenedores que facilita la ejecución, detención y administración de contenedores Docker en un clúster de instancias de Amazon EC2. Amazon ECS se integra bien con el resto de la infraestructura de AWS y elimina la necesidad de operar
su propio clúster o sistemas de gestión de la configuración.
Una pregunta obvia que cabe hacerse es en qué se diferencia de otros marcos de orquestación de contenedores como Enjambre Docker, Kuberneteso Mesos.
La primera gran diferencia es que cada uno de estos marcos es de código abierto. Amazon utiliza un marco de orquestación propietario en este momento. Una gran ventaja de ECS es que, al igual que el resto de la infraestructura de AWS, se trata de un servicio gestionado.
Así, sólo tendrá que preocuparse de desplegar sus contenedores sin preocuparse de la infraestructura.
Una mejor comparación de ECS es con Docker para AWS/Azure (respaldado por la recién introducida Modo enjambre en Docker), Motor de contenedores de Google (respaldado por Kubernetes), DC/OS (respaldados por Mesos), ya que también son servicios gestionados. Un punto a favor de ECS es que se integra perfectamente con la infraestructura de AWS como el despliegue de instancias de contenedores
utilizando CloudFormation plantillas, escalado de contenedores mediante Grupo de autoescaladoAsignación de puertos mediante Grupos de seguridad,
gestionar el tráfico de contenedores entrantes mediante Equilibrador de carga elásticover los registros con CloudWatch y otros. Si ya ha comprado en
la infraestructura de Amazon, entonces ECS suena como una buena opción.
Docker para AWSanunciado en la DockerCon, es también una oferta similar en este espacio.
Sin embargo, también hay que tener en cuenta un par de contras:
- Portabilidad - Aplicación diseñada Enjambre DockerKubernetes y Mesos pueden ejecutarse en diversas plataformas, como Amazon, Azure, GCE, OpenStack, on-prem, VMWare, centros de datos de metal desnudo, etc. Pero ECS sólo está vinculado a Amazon. ¿Puede
¿considerar esto como una dependencia del proveedor? Amazon puede lanzar su plataforma de orquestación o programador como producto independiente, pero no es lo habitual. - Formato del contenedor - El servicio ECS se centra únicamente en contenedores Docker. A efectos prácticos, al menos hoy, esto puede estar perfectamente bien. No he oído ni visto ningún despliegue de Rkt o
cualquier otro formato de contenedor. Sin embargo, esto puede cambiar una vez que OCI-Los tiempos de ejecución compatibles empezarán a aparecer en el futuro.
Una última cosa, antes de profundizar en los conceptos y el código, no hay ningún cargo adicional por Amazon EC2 Container Service. Pagas por los recursos de AWS (por ejemplo, instancias EC2 o volúmenes EBS) que creas para almacenar y ejecutar tu aplicación.
Conceptos de Amazon ECS
He aquí un resumen de los conceptos clave de la ECS:
- Instancia del contenedor: Una instancia de AMI preparada para ejecutar contenedores. Por defecto, cada instancia de Amazon utiliza AMI Linux optimizada para Amazon ECS.
Esta es la imagen recomendada para ejecutar el servicio de contenedores ECS. Los componentes clave de esta imagen base son:- AMI de Amazon Linux
- Agente de contenedores de Amazon ECS - Gestiona el ciclo de vida de los contenedores en nombre de ECS y les permite conectarse al clúster.
- Motor Docker (en el momento de redactar este documento, se trata de la versión 1.11.1)
Otras imágenes como CoreOS, Suse o Ubuntu pueden configurarse para satisfacer AMI de instancia de contenedor especificación. Esto puede hacerse porque Código de agente ECS está disponible en código abierto.
- Tarea: Una tarea se define como un archivo JSON y describe una aplicación que contiene una o más definiciones de contenedor. Suele apuntar a imágenes Docker de un registro, asignación de puertos/volúmenes, etc.
- Servicio: ECS mantiene el "estado deseado" de su aplicación. Esto se consigue creando un servicio. Un servicio especifica
el número de instancias de una definición de tarea que debe ejecutarse en un momento dado. Si la tarea de un servicio se vuelve insalubre o deja de ejecutarse, el programador de servicios la hará rebotar. Garantiza que el estado deseado y el real
coinciden. Las nuevas tareas de un servicio se equilibran entre las zonas de disponibilidad del clúster. El programador de servicios averigua qué instancias de contenedor pueden satisfacer las necesidades de un servicio y lo programa.
en una instancia de contenedor válida en una Zona de Disponibilidad óptima (una con el menor número de tareas en ejecución).
Primeros pasos con Amazon EC2 Container Service
Conéctese a su Consola AWS EC2 y haga clic en el botón Servicio de contenedores EC2:
Haga clic en el botón Empezar
para definir su aplicación.
Crear tarea ECS
En ECS, las cargas de trabajo Docker se definen como tareas. Una tarea puede contener varios contenedores. Todos los contenedores de una tarea se ubican en la misma máquina. Introduzca los valores como se muestra:
Pocos artículos
especificado en este paso:
- Definición de tareas es la descripción de una aplicación que contiene una o más definiciones de contenedor.
- Nombre del contenedor es el nombre que se dará al contenedor iniciado como parte de esta tarea.
- Imagen permite especificar una o más imágenes que necesitan ser iniciadas como contenedores como parte de esta aplicación. La imagen especificada aquí utiliza couchbase:último como imagen de base y utiliza API REST de Couchbase a
configurar el servidor. Dockerfile para esta imagen proporcionan más detalles sobre cómo se prepara esta imagen. - La memoria máxima es la memoria que debe asignarse al contenedor (equivalente a
-m
Docker CLI switch). Couchbase necesita 1GB para ejecutarse en dev y así se especifica aquí. - Y, por último, las asignaciones de puertos (
-p
en Docker CLI). El puerto 8091 es necesario para la administración de Couchbase.
Más información en Parámetros de definición de tareas.
Crear servicio ECS
Haga clic en Siguiente paso
para configurar un servicio.
Dar un nombre al servicio. Aquí se puede especificar el estado deseado. Por ahora, lo mantendremos simple y lanzaremos un contenedor Couchbase de un solo nodo. Y puesto que el estado deseado es ejecutar un único contenedor, no se requiere ELB. Más detalles sobre estos está disponible
en Parámetros de definición del servicio.
Crear clúster ECS
Las tareas se ejecutan en una instancia de contenedor, y estas instancias deben registrarse en un clúster. Esto nos permite escalar el cluster hacia arriba/abajo más tarde para acomodar la ejecución de más contenedores. Haga clic en Siguiente paso
para configurar el clúster.
En esta imagen:
- Tomar el nombre por defecto del cluster
- Se crea un clúster homogéneo de instancias de contenedor. m3.medio es un buen tamaño para ejecutar el nodo Couchbase durante la fase inicial de desarrollo. A
c3.xlarge
o una imagen más grande debe
para la producción. Asegúrese de leer Requisitos de Couchbase para conocer los requisitos mínimos y recomendados de hardware y software. - Elija una clave de seguridad creada previamente. Esto permitirá abrir una conexión ssh a la instancia del contenedor
- Se creará un nuevo rol IAM para permitir al agente ECS comunicarse con el servicio ECS
Las instancias de contenedor en un clúster pueden abarcar varias zonas de disponibilidad y equilibrarse con ELB. Revise todas las opciones especificadas:
Haga clic en
en Iniciar instancia y ejecutar servicio
para iniciar el servicio. Una vez creado el servicio, se muestra el siguiente estado:
La salida muestra que se han creado las definiciones de clúster, servicio y tarea. Las instancias tardan unos minutos en aprovisionarse e inicializarse y las tareas en ejecutarse en ellas.
Ver el servicio ECS y la tarea
Haga clic en Ver servicio
para ver el servicio recién creado.
Pocas cosas en esta imagen:
- El servicio muestra la definición de la tarea
couchbase:6
. A cada servicio se le asigna una definición de tarea y las versiones múltiples se indican con un número al final. En este caso, algunas versiones se crearon antes, pero por lo demás
el número de versión comienza a partir de1
. - El recuento deseado y en ejecución se muestra como 1.
Porcentaje sano mínimo
yPorcentaje máximo
se utilizan si es necesario desplegar una nueva versión de la definición de la tarea. Con los valores correspondientes 100% y 200%, se desplegará primero una nueva versión de la tarea.
y entonces las versiones más antiguas se darán de baja. Jugaremos con estos números en un blog posterior.- La tarea en ejecución se muestra en la parte inferior de la pantalla. Haga clic en el UUID para obtener más información sobre la tarea en ejecución.
La definición de tareas muestra la instancia EC2 donde se está ejecutando, el estado actual, la asignación de puertos y otra información útil. La pieza crítica que tenemos que mirar es el Enlace externo
. Esta URL es donde nuestra Consola Web de Couchbase
ser accesible.
Consola web de Couchbase
Al hacer clic en este enlace se abrirá una nueva pestaña con Consola web de Couchbase:
Introduzca el nombre de usuario como Administrador
y contraseña como contraseña
. Se configuran en imagen arungupta/couchbase. Y aquí
Vea la consola web de Couchbase en todo su esplendor.
En este blog se explicaba cómo ejecutar un contenedor Docker de Couchbase utilizando Amazon ECS.
Los próximos blogs mostrarán ...
- Configurar un clúster Couchbase utilizando ECS
- Despliegue de una aplicación multicontenedor mediante Docker Compose (v2 ya es compatible)
- Configuración del clúster ECS mediante CLI
Hola Arun,
Puedo saber cual es la diferencia entre tu repositorio docker de couchbase y el docker oficial de couchbase https://hub.docker.com/r/_/couchbase/? ¿Alguna experiencia en el funcionamiento de cluster cross AZ?
Tigre
Hola Arun,
He desplegado con éxito el contenedor docker de Couchbase en AWS. Soy capaz de iniciar sesión y utilizar la interfaz de usuario Couchbase. Sin embargo, no puedo conectarme a Couchbase desde mi código java que se ejecuta en mi máquina local.
He intentado conectarme usando CouchbaseClient así como Springboot Spring data Java framework también.
Este es el error:
No se ha podido obtener una configuración válida del cubo.
2018-12-09 19:04:12.035 WARN com.couchbase.client.vbucket.ConfigurationProviderHTTP: Problemas de conexión con URI http://asadss.dsdsad.asd4:8091/pools/default ...saltando
Hola Arun,
Ignore mi comentario. No he creado reglas de entrada en mi servicio ECS para habilitar los puertos 8091-8093 y 11210 para la comunicación TCP. Después de establecer las reglas que soy capaz de conectar ahora.
Para la posteridad, el enfoque anterior no funcionará ya que la dirección IP en el contenedor cambiará al reiniciar.
Cuando se utiliza CloudFormation para desplegar clústeres, tareas y servicios ECS, no es posible predecir de antemano el nombre de host asignado al contenedor CB.
Ver:
https://github.com/couchbase/docker/issues/82
https://github.com/couchbase/kubernetes/issues/27
Para un despliegue más avanzado en un clúster Couchbase en ECS, utilizando subredes privadas y múltiples instancias de contenedores ECS, echa un vistazo:
https://anton.belodedenko.me/couchbase-aws-ecs-docker/
Hay bastantes inconvenientes, especialmente el cambio de direcciones IP en lo que es esencialmente un entorno de nube dinámica.
- ab1