La práctica de Docker mesos en un entorno de producción.
Después de la investigación y comparación, finalmente se adoptó Mesos como gestión y programación de recursos subyacentes, Marathon como marco para la ejecución de Docker y ZooKeeper, Consul y Nginx como registro y descubrimiento de servicios. Actualmente, algunos negocios principales ya funcionan sin problemas en la plataforma de gestión de recursos Mesos basada en contenedores Docker.
Arquitectura lógica
Arquitectura de implementación
En el proceso de lanzamiento, el enlace antes de que el lanzamiento esté en línea es el prelanzamiento. Una vez verificado el entorno de prelanzamiento, la imagen de Docker y el paquete de implementación de aplicaciones basado en la implementación de la máquina virtual se empaquetan, se envían a su almacén correspondiente y se etiquetan.
Cuando se lanza el entorno de producción, se lanza al clúster Mesos y al clúster de máquinas virtuales originales al mismo tiempo, y las dos redes del clúster están conectadas.
Arquitectura de red
Al elegir una arquitectura de red, debe considerar varios principios:
El puente Docker utiliza el puente docker0 predeterminado y el contenedor tiene un puente independiente. espacio de nombres de red, la comunicación del contenedor entre hosts requiere el mapeo de puertos NAT. Los métodos de host utilizan el mismo espacio de nombres de red que el host, las redes no se pueden aislar, etc. Estos métodos tienen muchas limitaciones de contención de puertos y son ineficientes.
Docker Overlay puede resolver la comunicación entre hosts. Una red independiente se construye sobre una red existente de dos o tres capas y generalmente tiene su propio espacio de direcciones IP independiente, implementación de conmutación o enrutamiento.
Docker proporciona funciones de red de múltiples hosts en el equipo libnetwork, que pueden completar redes superpuestas. Hay dos métodos principales: túneles y enrutamiento. El principio del túnel es encapsular protocolos de red básicos, que es franela.
El otro es implementar la configuración de enrutamiento en el host para lograr la comunicación entre contenedores entre hosts, como Calico.
Calico es una solución de enrutamiento de protocolo BGP de tres capas. No utiliza túneles de paquetes ni NAT, y la pérdida de rendimiento es muy pequeña. Admite protección de aislamiento de seguridad y control ACL detallado, y tiene una gran afinidad por las nubes híbridas. Después de una comparación y consideración exhaustiva, utilizamos calico para lograr la comunicación de red entre hosts.
Instale el clúster ETCD y acceda al clúster ETCD a través del modo VIP de equilibrio de carga (LVS+mantener activo).
etcd_authority=10.10.195.193:2379
Exportar etcd_authorization
Construya un clúster de red Calico y agregue el nodo actual al clúster. Una vez que se inicia el nodo Calico, consultará Etcd y utilizará el protocolo BGP para establecer conexiones con otros nodos Calico.
. /calicoctl node–lib network–IP = 10.10.3 210
Agregue el grupo de direcciones IP disponible
. /calicoctl pool agrega 10 4 .0/24–NAT saliente
. /calicoctl pool display
Cree una red administrada por el complemento Calico IPAM (controlador (incluido IPAM), incluida la asignación y el reciclaje de recursos), -d especifica Calico como el tipo de controlador, creando así una red con el controlador online_net como Calico Network:
docker network create-d calico–ipam-driver calico–subnet = 10 4 .0/24 online _ net
Inicie el contenedor y especifique. la red acaba de crear online_net. Cuando se inicie el contenedor, secuestra la API de Docker correspondiente para inicializar la red. Consulta Etcd para asignar automáticamente una IP disponible, crear un par de interfaces quintas para la comunicación entre el contenedor y el host, configurar la IP en el contenedor, activar el reenvío de IP, agregar una ruta que apunte a la interfaz en la tabla de enrutamiento del host, administrado Tabla de enrutamiento del host 10.10.3.210:
Tabla de enrutamiento del host 10.10.50.145:
El proceso de enrutamiento para enviar un paquete desde un paquete contenedor es como se muestra arriba.
La IP del contenedor 10.4.10.10 en el host 10.3.210.64 envía un paquete a través de la tabla de enrutamiento a otro host 10.10.50.
Para las bases de datos con estado, las máquinas físicas (máquinas virtuales) todavía se usan para el almacenamiento en caché y las máquinas virtuales se usan para los clústeres de aplicaciones entrantes. Los clústeres de contenedores Docker necesitan comunicarse con ellos para interacciones de acceso a datos y servicios. Luego agregue el nodo actual al clúster de red de contenedores en la máquina física (máquina virtual):
etcd_authority=10.10.195.193:2379
salga de etcd_authorization
. /calicoctl node–IP = 10.10.16.201
Descubrimiento y autorregistro de servicios
La puerta de enlace API proporciona un portal de acceso API unificado, dividido en dos capas. La primera capa proporciona funciones unificadas como enrutamiento, control de tráfico, autenticación de seguridad, WAF y liberación de funciones grises. La segunda capa es la capa de aplicación web, que implementa la orquestación de servicios llamando a los servicios Dubbo, proporciona funciones de servicio de orquestación de puerta de enlace externa y protege los cambios en las interfaces de servicios comerciales. Para lograr de manera rápida y sin problemas un acceso rápido y una expansión de la capa web, utilizamos Consul como centro de registro de servicios para realizar el registro y descubrimiento automático de servicios web.
Para el registro de servicios web, implementamos el registro nosotros mismos, llamamos a la API de Consul para registrarnos e informamos periódicamente el estado de salud de la aplicación a través del mecanismo TTL.
Para el descubrimiento de servicios web, lo hemos ampliado y transformado en base a Netflix Zuul, hemos integrado el mecanismo de descubrimiento de Consul en el enrutamiento, hemos agregado métodos de enrutamiento basados en nombres de dominio y hemos mejorado la configuración de enrutamiento, logrando la dinámica. Función de recarga de configuración. La puerta de enlace API inicia la tarea de programación, obtiene el estado de salud de la instancia del servicio web a través de ConsumAPI, actualiza la caché de enrutamiento local e implementa la función de enrutamiento dinámico.
El marco de microservicios de la plataforma se basa en Dubbo RPC, y Dubbo confía en ZooKeeper para el descubrimiento y registro de servicios.
Plan de implementación del consultor en el clúster Mesos Docker:
No se recomienda empaquetar el agente consumidor y la aplicación contenedor en una imagen, por lo que el agente consumidor se implementa en cada host esclavo de Mesos. . ¿Cómo obtiene un contenedor la dirección IP del host para registrar y cancelar servicios? Durante el inicio del contenedor, la IP del host actual se pasará al contenedor como una variable de entorno de forma predeterminada. De esta forma, el módulo de registro de la aplicación contenedora puede obtener la IP del agente del consumidor y llamar a la API del consumidor para registrar y desinstalar el servicio.
En el lanzamiento diario de la aplicación, es necesario garantizar que el proceso de lanzamiento no tenga impacto en los servicios en línea y lograr un lanzamiento continuo y fluido. Por lo tanto, cuando la aplicación se detiene, se debe notificar al enrutador para que cambie el tráfico.
Cuando se ejecuta el comando Docker Stop, primero enviará la señal del sistema SIGTERM al proceso con PID 1 en el contenedor y luego esperará a que la aplicación en el contenedor finalice la ejecución. Si el tiempo de espera alcanza el tiempo de espera establecido o el tiempo predeterminado de 10 segundos, la señal del sistema SIGKILL continuará enviándose para forzar la finalización del proceso. Esto permite que el programa tenga una cierta cantidad de tiempo para procesar y guardar la ubicación de ejecución del programa después de recibir la señal SIGTERM y salir del programa con gracia. Implementamos un script en el script de inicio de la aplicación para recibir y manejar la señal. Después de recibir la señal, podemos encontrar el PID de la aplicación y facilitar el proceso de la aplicación.
Liberación continua y recuperación de interrupciones de aplicaciones sin problemas
Marathon proporciona estrategias de reinicio flexibles para ejecutar aplicaciones. Cuando solo se está ejecutando una instancia de la aplicación, si se reinicia en este momento, Marathon iniciará una nueva instancia de forma predeterminada. Después de reiniciar la nueva instancia, la instancia original se detendrá para lograr un reinicio sin problemas y cumplir con los requisitos. lanzamiento continuo y fluido de la aplicación.
Por supuesto, puede configurar la estrategia de reinicio que desee a través de los parámetros proporcionados por Marathon:
" Upgrade Strategy":{"minimum HealthCapacity":n 1,"maximum Mover " capacidad ":N2 }
Cómo determinar si la nueva instancia puede proporcionar servicios después de su inicio, si la instancia de la aplicación del contenedor actual está en buen estado o si la instancia ya no está disponible y necesita para ser restaurado? Marathon proporciona el módulo de seguimiento del estado de salud.
"Comprobación de estado":[{
"Protocol":"Command",
"Command":{
" Valor ":" sh/data/soft/health check .sh app 10.10.195.193 "
},
" GracePeriodSeconds": 90,
"intervalo de segundos ": 60,
[Tiempo de espera segundos]: 50,
"Número máximo de fallos consecutivos": 3
}]
Healthcheck.sh obtiene el estado de monitoreo de la instancia de la aplicación a través del equilibrio de carga llamando a HealthMonitor, que es nuestro centro de verificación de estado y puede obtener la información de topología general de la instancia de la aplicación.
Monitoreo y registro de contenedores
Para el monitoreo de contenedores, dado que se adopta el marco de gestión de recursos de contenedores de Mesos Docker, se adopta la solución de monitoreo de Mesos-exporter+Prometheus+Grafana. La característica de Mesos-Exporter es que puede recopilar datos de monitoreo de tareas y comprender el uso de recursos desde la perspectiva de la tarea, en lugar de un contenedor irrelevante. Mesos-exporter exporta datos de monitoreo de clústeres de Mesos a Prometheus, que es una combinación de alarmas de monitoreo y bases de datos de series de tiempo. Proporciona un almacenamiento muy potente y consultas multidimensionales.