‫Ahora que comprende los conceptos básicos de la creación de un enjambre de múltiples nodos y la creación de redes superpuestas y servicios Docker,
‫vamos a cubrir la siguiente cosa realmente genial sobre Swarm, que son las pilas. No hay montones de panqueques,
‫sino montones de servicios. En 1. 13, Docker agregó esta gran característica que agrega otra
‫capa de abstracción en la parte superior de las pilas. Básicamente se trata de archivos Compose para la producción de Swarm. Ahora las pilas aceptan
‫archivos de composición.
‫En el interior hay lo que llamaríamos una definición declarativa, donde estamos diciendo que esto es lo que
‫quiero que sea el resultado final.
‫Y es el trabajo del enjambre descubrir todo eso. son solo servicios; son redes y volúmenes también.
‫Ahora no
‫Y un pequeño adelanto.
‫De hecho, incluirá secretos, de los que hablaremos en las próximas conferencias.
‫Podemos usar un nuevo comando, que es el despliegue de la pila docker para importar este archivo Compose y ejecutar el comando que
‫colocamos en él.
‫La pila maneja todo esto.
‫No necesita que vayamos primero y creemos redes, o primero creamos volúmenes, pero podemos hacerlo totalmente.
‫Externo en nuestro archivo de composición para decir hola, estos ya son cosas que existen en mi enjambre.
‫Podemos usar algo llamado Adelante y usa esos, no te molestes en crearlos.
‫Pero por lo general terminas teniendo tus stacks haciendo todo por ti porque es más fácil de esa manera.
‫Vamos a obtener algunas características nuevas en nuestro archivo Compose, así que vamos a comenzar
‫con las que se parecen mucho a las que teníamos antes. Pero vamos a obtener esta nueva clave implementada allí, o
‫diccionario, que nos permite especificar las cosas que son específicas de Swarm.
‫¿Cuántas réplicas queremos?
‫¿Qué queremos hacer cuando fallamos? ¿Cómo queremos hacer actualizaciones continuas y todo ese
‫tipo de cosas que no nos importarían en nuestra máquina de desarrollo local?
‫Pero eso tiene un precio, es decir, que aún no podemos hacer el comando de compilación. Eso puede ser algo que nunca sucederá
‫en Swarm porque la mentalidad aquí es que la construcción no debería ocurrir en su
‫enjambre de producción. La construcción es algo que tu sistema de CI debe hacer.
‫Tal vez Jenkins o algo así como Codeship.
‫Una vez que haya creado sus imágenes y las haya colocado en su repositorio, esta pila será la
‫que realmente desplegará esas imágenes y las desplegará con las opciones de despliegue.
‫Las buenas noticias allí, sin embargo, es que en realidad se llevan bien.
‫En su máquina local, Compose ignorará cuando ejecute el comando docker-compose.
‫En
‫realidad, ignorará la información de implementación. De hecho, dirá 'hey, tienes que desplegar información aquí.
‫Realmente no puedo usarlo, así que voy a ignorarlo. 'Del mismo modo,
‫cuando estás en Swarm y estás desplegando una nueva pila o una actualización en una pila, en realidad
‫dirá' hey, tienes comandos de compilación aquí.
‫No hago compilaciones, así que las ignoraré y seguiré. 'Lo bueno es que
‫no tienes que cambiar tu archivo. tener un único archivo Compose que haga todo
‫lo que necesitamos que haga en el lado del desarrollo y en el lado de la implementación de producción.
‫Más adelante veremos cómo podemos
‫Es genial.
‫Finalmente, realmente no necesita Docker Compose CLI, el binario. Eso no necesita estar
‫en tu enjambre. Porque nuevamente compose, el comando real, no es una herramienta de producción.
‫No fue diseñado para ser producción.
‫Fue diseñado para ser una herramienta de ayuda de desarrollador y sysadmin.
‫Es realmente mejor para el trabajo local en nuestras máquinas.
‫El enjambre, que es básicamente el motor Docker. composición usando ese comando de pila.
‫Docker Engine ahora puede aceptar archivos de Lee los archivos de composición sin necesidad de Docker Compose en ningún lugar del servidor.
‫Repasemos muy rápido cuando miramos hacia atrás en nuestros servicios.
‫Así es como se vería nuestro servicio. digamos que es Y digamos que especificamos tres réplicas de eso.
‫Creamos un servicio. Nginx. Entonces, iría y crearía tres tareas en el
‫orquestador, y esas tareas encontrarían ciertos servidores o nodos para colocarlos y crearían contenedores.
‫En los nuevos stacks, estamos hablando de servicios múltiples, uno o más, correcto. Puede tener docenas de
‫servicios allí. En ese solo archivo YAML.
‫solo que ahora podemos hacer volúmenes y superponer redes en ese archivo Compose.
‫Actúan como los servicios que teníamos antes, Y eso
‫da como resultado lo que llamaríamos una pila. Una pila controla todas esas cosas.
‫Y en realidad colocará su nombre correctamente en todos
‫los objetos para que pueda saber fácilmente cuáles están relacionados con cada pila. De hecho, pondrá etiquetas allí también, que
‫veremos más adelante, que son más metadatos para que puedas determinar de qué pila proviene esta cosa en particular.
‫Entonces esto es realmente genial.
‫Ahora podemos usar un archivo YAML para hacer realmente todas esas cosas que no queríamos tener que escribir en
‫los comandos de servicio. Porque los comandos de servicio ya eran cada vez más difíciles de manejar. volvió tedioso, ¿verdad?
‫Y luego terminamos haciendo scripts Bash para ejecutar esos comandos, y luego se
‫Entonces, ahora que hemos tenido
‫Swarm por ocho meses, ahora obtenemos esta función de pila que administra esos servicios.
‫Tenga en cuenta que la pila es solo para un enjambre.
‫¿Derecha? No puede hacer muchos enjambres.
‫Solo se ejecutará en un enjambre para que pueda controlar todos los nodos y desplegar todos
‫estos servicios, redes y volúmenes.
‫realmente puede tener una cosa más, secretos, porque la pila también puede controlarlos.
‫Debo decir que este diagrama Veremos eso en una conferencia posterior en esta sección. DE ACUERDO.
‫Miremos las pilas y cómo funcionan.
‫Estoy de vuelta en mi enjambre de 3 nodos que construimos antes. Voy a maximizar la ventana en el nodo 1
‫porque realmente no necesito los otros dos nodos.
‫Al menos no necesito su línea de comando ssh.
‫Vamos a usar el ejemplo de la aplicación de votación que hicimos en conferencias anteriores para esta sección.
‫Si recuerdas nuestro diseño
‫para eso, fueron cinco servicios diferentes, y todos tenían dependencias entre ellos.
‫Y finalmente nos dio dos sitios web diferentes.
‫Lo hiciste y estoy seguro
‫de que elaboraste la mejor lista de servicios con todos los valores y opciones que necesitaba y fue perfecto, ¿no?
‫Estoy aquí para decirte que ahora eso ya no es necesario.
‫Fue muy importante para nosotros usarlos y no todo va a necesitar un archivo de pila.
‫Pero ahora tengo un archivo de pila.
‫Echemos un vistazo rápido porque notará que se parece mucho a
‫un archivo Compose porque así es. al menos la versión 3 o superior.
‫La única clave real que tiene que cambiar, ya que tiene que ser
‫La última versión ahora es la versión 3. 1, pero estoy seguro de que eso cambiará a medida que continúe
‫cambiando y madurando.
‫Pero necesitas la versión 3 para usar pilas.
‫Notarás que tenemos nuestro redis y nuestro
‫db, y nuestro voto, y todas estas cosas que probablemente sean muy similares a las de tu propio trabajo. Probablemente estés muy familiarizado con esas y las imágenes
‫que necesitan, y los puertos que necesitan abrir y todo eso.
‫Pero en este caso, notarás implementación.
‫Implementar aquí es una nueva opción. Verá aquí que estaba especificando cuántas réplicas
‫quiero, que es cuántas copias de esa imagen deben ejecutarse a la vez.
‫Y qué sucede cuando hago una actualización.
‫Entonces cuando realizo una actualización de la pila real, entonces haré las actualizaciones del servicio.
‫¿Cómo quiero que se despliegue?
‫¿Derecha?
‫¿Quiero que todos bajen al mismo tiempo? ¿Solo quiero uno a la vez?
‫¿Cuánto demora entre ellos?
‫Hay todo tipo de opciones aquí.
‫Simplemente estamos arañando la superficie, pero se puede ver como si tuviera una política
‫de reinicio aquí que si el contenedor falla, lo reinicia automáticamente.
‫Puedes ver aquí debajo de la base de datos, de hecho tuve restricciones para
‫asegurarme de que esté en un nodo específico.
‫Todavía no hemos hablado mucho acerca de las
‫limitaciones, pero existen formas de etiquetar objetos, es decir, contenedores o imágenes o cualquier cosa que podamos crear o destruir en Swarm o en Docker.
‫que es un administrador obtiene sus propias etiquetas.
‫De hecho, podemos asignar etiquetas a cualquiera de ellos, incluidos los nodos, y un nodo
‫Esto es muy fácil para nosotros solo decir, hey, este contenedor tiene que ejecutarse en un nodo que tenga este
‫rol particular.
‫Gran ejemplo allí. A medida que nos desplazamos hacia abajo, tenemos algunas opciones de paralelismo que hemos visto anteriormente.
‫Esta opción de demora es genial. Si tiene una especie de
‫tiempo de calentamiento cuando tiene contenedores que giran hacia arriba. Tal vez hayan comenzado, pero en realidad no se activan durante unos 60 segundos o algo así.
‫Puede agregar retrasos allí. De hecho, los veremos más adelante
‫durante las implementaciones de producción azul-verde. Por ahora, puedes ver que todos son bastante estándar.
‫De hecho, tenemos más opciones aquí. De hecho, puedes ver que le asigno una etiqueta específica.
‫Tengo una ventana y un intento máximo para reiniciar la política.
‫Por lo tanto, si intenta reiniciarse y continúa fallando, no lo intentará más de tres veces.
‫Vamos a ver.
‫Todo lo que tengo que hacer es hacer una pila de docker desplegar -c para componer. Así que voy a usar un archivo Compose.
‫Ahora voy a llamarlo voteapp. Y ahí vamos. En realidad,
‫no creó todo y lo hizo girar tan rápido.
‫programador, que luego pasará por el proceso de creación de los servicios, que luego crean las tareas, que luego crean los contenedores.
‫Todo lo que hizo fue crear esos objetos en el
‫También tiene que crear las redes como lo verá aquí. Recuerda que teníamos el frontend y el backend, así que creó esos, así
‫como una red predeterminada, que ese archivo de pila en particular
‫que tenía estaba usando una red predeterminada.
‫Y luego verá esta opción para el visualizador, que es una nueva que no usamos antes.
‫Veremos eso en un minuto.
‫Así que echemos un vistazo a la orden de la pila acoplable un poco más.
‫Verás que podemos implementar. Ya lo hemos hecho.
‫Entonces tenemos un ls, un ps, un rm
‫y servicios.
‫Entonces este comando no tiene muchas funciones.
‫Es bastante simple porque toda la funcionalidad está realmente en el
‫archivo Compose y realmente en los objetos que está creando. Vaya,
‫Como ya hemos hecho todo eso, podemos hacer cosas como ls, que solo nos muestra todas nuestras pilas. tengo que especificar el
‫Es un comando bastante básico. Solo tenemos el uno. Entonces, si hago un ps, en realidad me lo muestra. nombre. votar.
‫Se llama voteapp.
‫Tengo que hacerlo bien.
‫DE ACUERDO.
‫Déjame respaldar eso para que puedas ver eso un poco mejor. Justo ahí.
‫Estas son las tareas reales. Luego puede ver en qué nodo se están ejecutando.
‫En realidad no son los contenedores. En realidad, es la tarea que estamos viendo aquí. Porque si fuera el contenedor real, veríamos
‫un nombre grande y largo. Porque si
‫recuerdas, los servicios que creamos anteriormente, tenían estos nombres realmente
‫largos si realmente fuimos y lo hicimos docker ps. ¿Derecha? o un docker ps, obtienes estos nombres realmente largos.
‫Si hice un contenedor docker ls, Y eso es porque todos obtienen
‫un GUID, porque cada contenedor tiene un nombre único.
‫Así es como garantizan que siempre son únicos y nunca colisionan.
‫Entonces el último
‫aquí es Docker stack services voteapp.
‫De hecho, me gusta esta, la mejor, porque me muestra mis réplicas.
‫Es como hacer un
‫servicio ls. ya tengo el número adecuado de contenedores.
‫Me muestra cuántas réplicas he comenzado, así sé si Entonces, si quiero sumergirme más profundo,
‫entonces podría hacer una pila acoplada ps. De hecho, obtenemos los nombres de las tareas aquí y vemos qué nodos ejecutan.
‫Estos dos juntos en realidad le dan una imagen completa de cómo se está ejecutando esta aplicación completa.
‫Si quisiera sumergirme en la red, podría hacer una
‫red de acopladores como lo haríamos normalmente.
‫Y puede ver estas tres nuevas redes superpuestas que se crearon para esta aplicación. Y observe que el
‫nombre de la aplicación siempre está al principio. La pila siempre precede al nombre del servicio.
‫Entonces, cada pila se asegurará de que su nombre esté en la parte delantera.
‫Y luego vamos a verlo.
‫Déjame abrir mi navegador.
‫Todo bien.
‫Podemos verlos en el puerto 5000.
‫Tengo el sitio de votación en funcionamiento.
‫Voy a 5001.
‫Tengo el sitio de resultados para poder ver esto y luego ver el resultado.
‫Entonces este nuevo que tenemos se llama Visualizador. en la sección de Recursos de esta sección.
‫Está en 8080. El Visualizador es en realidad una herramienta bastante ordenada para demostraciones. todo esto es hecho por Docker, dicho sea de paso, y
‫Eso está realmente hecho. todos estos son un repositorio de código abierto que puede ver Así que tenemos diferentes colores para cada servicio.
‫El resultado de voteapp es verde.
‫Y luego, el redis es una especie de mostarda, y el voto es de color rosa. Puedes ver que hay dos
‫votos y hay dos redes.
‫Es bastante bueno mostrar lo que sucede a medida que las cosas se mueven por el enjambre.
‫Si realmente entré en mi archivo e hice un cambio.
‫Vayamos a la aplicación de votación y supongamos que queremos cambiar las réplicas a cinco.
‫Podríamos ir y actualizar el servicio. Pero eso es como un AntiPattern. Si entramos y escribimos manualmente, los comandos en el servicio, como la actualización del servicio
‫del acoplador, eso significaría que la próxima vez que vuelva a aplicar este archivo
‫YAML, sobrescribirá esos cambios.
‫Si alguna vez ha realizado una formación en la nube en AWS o en cualquier otra administración
‫de configuración, sabrá que una vez que esté utilizando un archivo de configuración como este
‫para administrar su infraestructura, realmente desea utilizar este archivo porque será la fuente de verdad.
‫Entonces, probablemente, en producción, sería algún tipo de archivo que guardas en un repositorio de Git
‫en el que tienes control de versión, y controlas los cambios, y de esa manera puedes revertir los cambios.
‫En este caso, voy a cambiar ese archivo muy rápido, y
‫vamos a ejecutar el mismo comando, Docker stack deploy.
‫Tenga en cuenta que no tenemos una actualización. Porque vamos a implementar en la misma pila y reconocerá que existe, y que vamos
‫a actualizarla en función de estos cambios.
‫Para actualizarlo, debemos asegurarnos de usar el nombre correcto.
‫Entonces es voteapp. Y luego observe que está diciendo actualizar servicios, pero reconoce que necesita cambiarlos.
‫Luego, si vamos a nuestro visualizador, puede ver que ya lo tenemos.
‫Hoy somos demasiado lentos, ¿verdad?
‫No podemos mantener el ritmo del enjambre. Ahora tenemos cinco de estas aplicaciones de votación en funcionamiento.
‫Si tardaran un tiempo en ejecutarse y lanzarse, realmente veríamos sus
‫estados cambiar aquí cuando se conectaran.
‫Pero es una aplicación web simple, por lo que se iniciará bastante rápido.
‫Bueno.
‫Eso es pilas.
‫Ahora agreguemos los secretos a nuestras pilas.
‫