El camino hacia la construcción de servicios de AWS: clúster Docker
El reciente proyecto tiene que colocarse en Amazon por varias razones, y también es un buen momento para experimentar los servicios de la plataforma de computación en la nube más grande del mundo. Así comenzó de nuevo la larga subida al foso. Debo decir que el diseño de la plataforma de interacción de administración de AWS está lleno de atmósfera industrial. Es difícil para los principiantes comenzar, pero los usuarios experimentados lo encontrarán muy intuitivo.
En resumen, se divide en 4 pasos:
ECR es un almacén de imágenes privado. Cargue su propia imagen primero. El problema de este paso es que no puede iniciar sesión directamente en Docker. sube la imagen.
ECS tiene un concepto muy importante, la definición de tareas. Este concepto es similar al de los pods k8s. La definición de tarea abstrae el concepto de tareas. Una tarea puede contener múltiples imágenes de la ventana acoplable y sus parámetros/configuraciones de entorno correspondientes, y tiene límites de CPU y memoria.
La definición de tarea tiene un número de versión, y solo se pueden crear versiones nuevas y no se pueden modificar las versiones anteriores.
La programación en el clúster se basa en la definición de tareas.
Así que creamos una definición de tarea para cada uno de nuestros servicios, y una definición de tarea contiene 1 imagen.
Hay 3 modos de red para elegir:
En la mayoría de los casos usamos el modo puente y en algunos casos se usa awsvpc. Intente no utilizar el modo host, ya que no favorece la orquestación. Los escenarios de uso específicos de awsvpc se presentarán en el capítulo de descubrimiento de servicios a continuación.
La tecnología de mapeo dinámico de puertos se refiere a mapear aleatoriamente el puerto externo del contenedor en el host y solo es efectiva en modo puente.
Después de verificar la configuración del registro, ECS dirigirá automáticamente la salida estándar de la imagen a CloudWatch y usted podrá ir allí para ver el registro de la imagen. Por supuesto, un sistema de registro profesional aún requiere ELK.
ECS tiene dos tipos de clusters, Fargate y EC2 Linux.
Fargate es una arquitectura genial, especialmente adecuada cuando el uso de recursos es inestable y el tiempo es incierto. Y todos usan el modo de red awsvpc, todos los servicios pueden tener IP independiente, arquitectura pura sin servidor. Solo hay una desventaja: es costoso (la misma cantidad de recursos es 3 veces el precio de EC2...
Se recomienda crear un clúster vacío y luego agregar servidores usted mismo; de lo contrario, desencadena fácilmente algunos keng
Como se mencionó anteriormente Definición de tarea, entonces el concepto de tarea también es muy simple
Una tarea puede contener varios contenedores. Esta tarea se puede detener después de ejecutarse. por un tiempo limitado, como un script de una sola vez, o puede ejecutarse indefinidamente, como un servidor nginx.
El concepto de servicio es relativamente complejo. Un servicio gestionará todos los aspectos de una tarea definida en. runtime.
El servicio no tiene función de parada, solo el número de tareas que se pueden modificar es 0.
Después de eliminar el servicio, debe detener manualmente las tareas en ejecución <. /p>
AWS proporciona descubrimiento de servicios basado en Router53 (servicio DNS), que en realidad es difícil de usar. El modo awsvpc es muy conveniente, pero es particularmente difícil de usar en el modo puente. > En el modo awsvpc, debido a que cada tarea tiene su propia IP, el puerto se puede reparar directamente sin conflictos y funciona con el descubrimiento de servicios basado en Router53, que puede completar directamente el descubrimiento perfecto del servicio, sin importar cómo se actualice y reinicie el servicio. siempre se puede acceder al servicio a través del nombre de dominio fijo. Sin embargo, debido a que un servidor solo puede vincularse a 3 tarjetas de red, solo se pueden iniciar 3 contenedores en modo awsvpc.
En modo puente, cada tarea utiliza el. La IP del host y un puerto asignado aleatoriamente, por lo que el descubrimiento de servicios debe traer el puerto; de lo contrario, AWS no puede proporcionar registros DNS de tipo SRV para el descubrimiento normal de servicios en sí, pero SRV no es un tipo de registro ampliamente aceptado ni por los navegadores ni por los navegadores. Las bibliotecas de red pueden analizar registros SRV, por lo que es necesario personalizar la resolución DNS para acceder a los servicios.
Así que finalmente decidimos utilizar Eureka como servicio de descubrimiento de servicios y awsvpc como servicio de descubrimiento de servicios complementario, como implementar Eureka y xxl-job usando awsvpc.
Después de elegir Eureka, me encontré con otro problema. Debido a que se utiliza el mapeo dinámico de puertos, el puerto registrado con Eureka no es el puerto de escucha de Spring y la IP y el puerto del host no se pueden conocer dentro del contenedor.
Hay muchas formas de resolver el problema aquí:
Sin embargo, tenga en cuenta que para habilitar el servicio de metadatos, debe modificar la configuración del proxy ECS, y esta configuración está escrita en el servidor cuando se crea el clúster, por lo que para modificar la configuración del proxy ECS, primero debe modificar el script de inicialización del grupo de escalado automático, eliminar todos los servidores del grupo de escalado y luego agregar el servidor nuevamente.
De esta forma se podrá visualizar correctamente la información del servicio en el centro Eureka.