El escenario objetivo ideal
Sí, debe usar un equilibrador de carga y actualizar una instancia a la vez. No estoy seguro de dónde entra la comunicación entre contenedores.
Como ejemplo, imagine que tiene un equilibrador de carga que sirve a su sitio A. Los usuarios solo se conectan a él y solo lo conocen como "A". El equilibrador de carga sabe que hay dos o más backends (B, C, etc.), y no importa si son máquinas virtuales o contenedores.
Luego, desea actualizar los backends, que en este caso son instancias de Apache.
- saque B de los backends elegibles para el equilibrador de carga para que ya no acepte ningún tráfico.
- espere a que se atiendan las solicitudes actualmente en vivo y se cierren las conexiones existentes.
- actualizar el contenedor o la VM subyacente que sirve B
- reinicie B, espere a que se cargue y comience a funcionar
- prueba B para asegurarse de que atiende solicitudes nuevas correctamente
- agregue B de nuevo al grupo de backend del equilibrador de carga para volver a habilitar el tráfico
Luego, haga el mismo proceso para C, D, etc.
Tenga en cuenta que hay una solicitud abierta para actualizaciones en el lugar de los contenedores Docker , desde noviembre de 2013, pero no parece tener mucho progreso, por lo que la solución anterior es lo que debe hacer mientras tanto.
Qué hacer para un sitio en vivo existente
Presumiblemente, está preguntando esto porque ya está ejecutando un sitio en vivo en este modelo y le gustaría actualizarlo sin tiempo de inactividad. Entonces, necesitamos llegar al estado objetivo ideal arriba, pero de manera incremental.
Asumamos que:
- tienes un nombre DNS que apunta a tu contenedor
- su contenedor se ejecuta en alguna dirección IP
- sus usuarios no conocen la dirección IP del contenedor y no está codificada en ninguna parte
Si estas suposiciones son falsas, primero debe corregirlo de manera que sea correcto.
Luego, sigue estos pasos:
- cree un equilibrador de carga en una nueva IP y apúntelo al contenedor existente como su único backend
- cambiar DNS para apuntar al equilibrador de carga en lugar de la IP del contenedor directamente
- agregue un servidor de Apache idéntico con la misma configuración de contenedor VM +
- ahora tiene un equilibrador de carga con dos backends B y C, así que siga las instrucciones en la sección "escenario de destino ideal" para actualizarlos uno por vez
Cómo actualizar un equilibrador de carga
La manera fácil (alojada)
La opción más fácil es no ejecutar su propio equilibrador. Por ejemplo, si está utilizando una plataforma en la nube que proporciona equilibrio de carga como un servicio, considere usarla y luego el mantenimiento y la actualización del equilibrador de carga no es un problema.
La forma manual
Si está ejecutando su propio equilibrador de carga, será útil agregar otra capa de indirección (es decir, DNS). Asumamos lo siguiente:
- que tenemos un nombre de host que se resuelve en la IP de nuestro equilibrador de carga A que nos gustaría actualizar
- nuestro equilibrador de carga tiene un grupo de back-end de P1, P2, etc.
Procedemos de la siguiente manera:
y tu estas listo.
Detalles, diagramas y herramientas.
Vea estos informes y herramientas que pueden ayudarlo a automatizar el proceso, pero la idea general es la misma:
La moral
"Todos los problemas en informática pueden resolverse mediante otro nivel de indirección, excepto, por supuesto, el problema de demasiadas indirecciones". - David Wheeler