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 como y solo lo conocen como "A". El equilibrador de carga sabe que hay dos o más backends (B, C, etc.), y si son máquinas virtuales o contenedores no importa.
Luego, desea actualizar los backends, que en este caso son instancias de Apache.
- tomar B de los motores para el equilibrador de carga para no aceptar tráfico.
- espere a que se atiendan las solicitudes actualmente activas y se cierren las conexiones existentes.
- actualice el contenedor o la máquina virtual subyacente que sirve a B
- reinicie B, espere a que se cargue y comience a funcionar
- prueba B para asegurarte de que está atendiendo correctamente las nuevas solicitudes
- 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 un abrir solicitud de actualizaciones in situ de contenedores Docker, de 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 con 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. Por lo tanto, necesitamos llegar al estado objetivo ideal anterior, pero de forma incremental.
Supongamos que:
- tiene un nombre DNS que apunta a su 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 ningún lugar
Si estas suposiciones son falsas, primero debe solucionarlo de manera que sea correcto.
A continuación, siga estos pasos:
- cree un equilibrador de carga en una nueva IP y apúntelo al contenedor existente como su único backend
- cambie DNS para que apunte al equilibrador de carga en lugar de a la IP del contenedor directamente
- agregue un backend de Apache idéntico con la misma configuración de VM + contenedor
- ahora tiene un equilibrador de carga con dos backends B y C, así que siga las instrucciones de la sección "escenario de destino ideal" para actualizarlos uno a la vez
Cómo actualizar un equilibrador de carga
La forma 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 servicio, considere usarla y, a continuación, el mantenimiento y la actualización del equilibrador de carga no son un problema.
La forma manual
Si está ejecutando su propio equilibrador de carga, agregar otra capa de indirección (es decir, DNS) ayudará. Supongamos 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 balanceador de carga tiene un grupo de backend de P1, P2, etc.
Procedemos de la siguiente manera:
y has terminado.
Detalles, diagramas y herramientas
Vea estos artículos y herramientas que pueden ayudarlo a automatizar el proceso, pero la idea general es la misma:
moral
"Todos los problemas de la informática se pueden resolver con otro nivel de indirección, excepto, por supuesto, el problema de demasiadas indirectas." — David Wheeler