Como ya introdujimos en el anterior post Novedades de Docker 1.12 la novedad más importante se debe a la integración completa de Docker Swarm en el propio núcleo del programa.
Haber integrado Docker Swarm nos permite desde el mismo comando tener todo bajo control en lo que a servicios se refiere:
- Declara el estado del servicio
- Actualizaciones sin perdida de servicio
- Tener una monitorización personalizada del estado de los servicios
- Conciliación de los servicios para comprobar si el estado es el que queremos.
En la primera parte vimos como se declaran los servicios y en este vamos a comprobar como podemos hacer una actualización de nuestros contenedores sin que tengamos perdida de servicio.
Para ello vamos a continuar desde la situación que ya teníamos de 2 nodos, uno principal y otro secundario. En los que hemos desplegado la aplicación de pruebas instavote/vote
y la hemos escalado a 4 contenedores para tener 2 en cada nodo.
El primer ejemplo va a ser una actualización masiva, osea que se destruirán los contenedores y se crearán con la nueva versión a la vez. Siempre pensando en lo que el hardware nos permita ya que aunque queramos actualizar 100 contenedores a la vez si el hardware (o máquina virtual) no es potente habrá demoras.
Vamos con la primera actualización:
>_ docker service update --image instavote/vote:movies demo
Si queremos verificar el cambio en los contenedores lo podemos comprobar con service tasks
>_ docker service tasks demo
ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE
b5vr32jnjgctsuigiz7xk0aan demo.1 demo instavote/vote:movies Preparing 6 seconds Running ip-172-31-22-89
dgvsa201bzwnbsjxviyttaxs8 demo.2 demo instavote/vote:movies Running 9 seconds Running ip-172-31-24-241
2x723b8mcvx6jxfuma3kmulhn demo.3 demo instavote/vote:movies Preparing 7 seconds Running ip-172-31-22-89
bwug8pi2k7ghr827x66veludf demo.4 demo instavote/vote:movies Running 9 seconds Running ip-172-31-24-241
Con esta simple orden conseguimos actualizar todos los nodos a la vez. Obviamente no perdemos servicio dado que no tenemos muchos contenedores ni tampoco un número elevado de nodos.
En la actualización no solo tiene que ser la imagen, también podemos actualizar la red, el directorio de trabajo o el comando del contenedor.
Para no tener perdida de servicio en un sistema muy grande, lo mejor es que esta actualización se haga progresivamente. Para ello el comando update
tiene un dos módificadores que nos permiten gestionar esta migración:
--update-parallelism
que indica el número de contenedores que vamos a migrar a la vez.--update-delay
que indica el tiempo entre la migración de los grupos de contenedores.
Vamos a hacer una actualización de los contenedores, pero esta vez no queremos que haya perdida de servicio. Para que se vea más claro vamos a darle un delay
de un minuto o dos. Con esto veremos como poco a poco se van actualizando los contenedores.
>_ docker service update --update-delay 20s --update-parallelism 1 --image instavote/vote:indent demo
Podremos ir viendo en el sistema como se ve actualizando.
>_ docker service tasks demo
ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE
9m2rnu10pcznbc29hewmawu9z demo.1 demo instavote/vote:movies Running 20 hours Running ip-172-31-24-241
egs1ykz41yuje3ayv3cjq6620 demo.2 demo instavote/vote:movies Running 33 minutes Running ip-172-31-24-241
8ilhvqhfqbzzyid7yrj4i5wcj demo.3 demo instavote/vote:indent Running 51 seconds Running ip-172-31-22-89
b47rc3qgvmf9enfxswcafyhjh demo.4 demo instavote/vote:movies Running 33 minutes Running ip-172-31-24-241
edusnxrg78uz6b08ohiz9ze3x demo.5 demo instavote/vote:movies Running 5 minutes Running ip-172-31-22-89
135euxd7odb8o0c087qaynfmf demo.6 demo instavote/vote:indent Running 20 seconds Running ip-172-31-22-89
>_ docker service tasks demo
ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE
7y91m2ammyo8t12m453msxlha demo.1 demo instavote/vote:indent Running About a minute Running ip-172-31-24-241
egs1ykz41yuje3ayv3cjq6620 demo.2 demo instavote/vote:movies Running 35 minutes Running ip-172-31-24-241
8ilhvqhfqbzzyid7yrj4i5wcj demo.3 demo instavote/vote:indent Running 2 minutes Running ip-172-31-22-89
6j3ewrix42t9fkdqc1t00qlyg demo.4 demo instavote/vote:indent Running About a minute Running ip-172-31-24-241
eyt7oky9a1lhunzfv9zvyq2zt demo.5 demo instavote/vote:indent Running 28 seconds Running ip-172-31-22-89
135euxd7odb8o0c087qaynfmf demo.6 demo instavote/vote:indent Running 2 minutes Running ip-172-31-22-89
Si visitásemos continuamente la aplicación comprobaríamos como la actualización es totalmente silenciosa y sin perdida de servicio. Este tipo de funcionamiento es muy similar a otros sistemas como por ejemplo [Kubernetes.io][3]. Pero dada la reducida complejidad que ha adquirido Docker es el método más sencillo para crear un cluster sobre todo si tu proveedor no es Google Cloud
Espero que esta nueva versión se ponga rápidamente de manera estable y la podamos usar.
Hasta pronto y si te ha gustado o quieres decir algo, comenta o retwittea. Se agradece.
Comentarios recientes