bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


docker_swarm_stacks

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
docker_swarm_stacks [2022/01/17 14:29]
enrique_mieza_sanchez [Docker Swarm: treballant amb stacks]
docker_swarm_stacks [2026/10/02 20:51] (actual)
enric_mieza_sanchez [Primer docker stack amb traefik]
Línia 1: Línia 1:
-~~REVEAL~~ 
 ====== Docker Swarm: treballant amb stacks ===== ====== Docker Swarm: treballant amb stacks =====
  
Línia 16: Línia 15:
 Anem a posar en marxa una xarxa amb dos serveis: Anem a posar en marxa una xarxa amb dos serveis:
   * **whoami** : container que mostra la IP i algunes dades internes per a fer proves.   * **whoami** : container que mostra la IP i algunes dades internes per a fer proves.
-  * **traefik** : conegut load balancer per gestionar el balanceig de càrrega.+  * **traefik** : conegut //load balancer// i proxy invers per gestionar el balanceig de càrrega.
  
  
 <WRAP tip> <WRAP tip>
-[[https://doc.traefik.io/traefik/|Traefik]] és un balancejador de càrrega basat en el llenguatge de programació Go! de Google molt emprat en orquestradors de contenidors.+[[https://doc.traefik.io/traefik/|Traefik]] és un balancejador de càrrega i proxy invers basat en el llenguatge de programació Go! de Google molt emprat en orquestradors de contenidors.
  
 {{ traefik-architecture.png?400 }} {{ traefik-architecture.png?400 }}
Línia 26: Línia 25:
  
  
-Podràs visualitzar 2 frontends (l'exemple és amb la IP que tenim configurada al Vagrantfile de [[Docker Swarm]]:+<WRAP info> 
 +Podràs visualitzar 2 webs (l'exemple és amb la IP que tenim configurada al Vagrantfile de [[Docker Swarm]]:
   * 10.100.199.200:8080 : veuràs el panell d'administració de //traefik//.   * 10.100.199.200:8080 : veuràs el panell d'administració de //traefik//.
-  * 10.100.199.200 : port 80 on podràs veure el frontend de traefik, però de moment ens mostra un ''Error 404: page not found''. +  * 10.100.199.200 : port 80 on podràs veure el //frontend// de traefik, però de moment ens mostra un ''Error 404: page not found''. 
-    * Si volem veure la web, caldrà que configureu l'arxiu ''/etc/hosts'' i apuntar el domini whoami.docker.local a la IP de la màquina //swarm//.+    * **Si volem veure la web, caldrà que configureu l'arxiu ''/etc/hosts'' i apuntar el domini ''whoami.docker.local'' a la IP de la màquina //swarm//**. 
 +    * OJU perquè el ''/etc/hosts'' que s'ha d'actualitzar és el de la màquina on estiguem executant el //browser//, probablement serà la teva màquina física. 
 +    * Ara sí que podem visualitzar la web de ''whoami'' al navegador a: <code>http://whoami.docker.local</code> 
 +</WRAP> 
 + 
 + 
 +<tabbox Traefik v3> 
 +<file yaml whoami.stack.yml> 
 +version: '3.8' 
 + 
 +services: 
 +  traefik: 
 +    image: traefik:v3.4 
 +    command: 
 +      - --api.insecure=true 
 +      - --providers.docker=true 
 +      - --providers.swarm=true 
 +      - --providers.docker.exposedbydefault=false 
 +      - --providers.swarm.exposedbydefault=false 
 +      - --entrypoints.web.address=:80 
 +    ports: 
 +      - "80:80" 
 +      - "8080:8080"  # Dashboard 
 +    volumes: 
 +      - /var/run/docker.sock:/var/run/docker.sock:ro 
 +    deploy: 
 +      placement: 
 +        constraints: 
 +          - node.role == manager 
 + 
 +  whoami: 
 +    image: traefik/whoami 
 +    deploy: 
 +      replicas: 4 
 +      labels: 
 +        - traefik.enable=true 
 +        - traefik.http.routers.whoami.rule=Host(`whoami.docker.local`) 
 +        - traefik.http.routers.whoami.entrypoints=web 
 +        - traefik.http.services.whoami.loadbalancer.server.port=80 
 +        #- traefik.http.services.whoami.loadbalancer.sticky=true 
 +        #- traefik.http.services.whoami.loadbalancer.sticky.cookie.name=whoami_cookie 
 +        #- traefik.http.services.whoami.loadbalancer.sticky.cookie.secure=false 
 + 
 +</file> 
 + 
 +<tabbox Traefik v1> 
 + 
 +<WRAP important> 
 +ULL si treballes amb aquesta versió obsoleta de Traefik v1, ja que és incompatible amb les APIs de Docker actuals. És preferible utilitzar la v3 de la qual teniu un exemple aquí mateix. 
 + 
 +Si vols poder-la emprar igualment, pots fer-ho fent un //tunning// del motor de Docker Swarm per activar la compatibilitat amb APIs antigues. Caldria **crear aquest arxiu i reiniciar els serveis de Docker a tots els nodes del Swarm**: 
 + 
 +<file javascript /etc/docker/daemon.conf> 
 +{ 
 +  "min-api-version": "1.24" 
 +} 
 +</file> 
 + 
 +Després pots reiniciar els serveis amb: 
 +  $ sudo systemctl restart docker.service docker.socket 
 +</WRAP>
  
 <file yaml whoami.stack.yml> <file yaml whoami.stack.yml>
Línia 72: Línia 132:
 </file> </file>
  
-Per posar en marxa el //stack//: +</tabbox> 
-  docker stack deploy --compose-file whoami.stack.yml hello + 
-  docker stack deploy -c whoami.stack.yml hello +Per posar en marxa el //stack// ho podem fer d'aquestes dues maneres (amb una basta!): 
-  docker stack scale hello_whoami=5+  docker stack deploy --compose-file whoami.stack.yml who 
 +  docker stack deploy -c whoami.stack.yml who 
 + 
 +I ara, escalem el servei ''whoami'': 
 +  docker service scale who_whoami=5
   docker stack ls   docker stack ls
  
Línia 85: Línia 149:
   * Quan refresques t'apareix una IP diferent?   * Quan refresques t'apareix una IP diferent?
  
-Ara descomenta la línia amb ''- "traefik.backend.loadbalancer.sticky=true"'' i posa en marxa de nou el stack.+Ara descomenta les línies del final referents a ''sticky'' i posa en marxa de nou el stack.
   * Quan refresques t'apareix ara una IP diferent?   * Quan refresques t'apareix ara una IP diferent?
   * Canvia la IP si accedeixes a la web via ''curl''?   * Canvia la IP si accedeixes a la web via ''curl''?
 +    * **ULL SPOILER ;) amb el ''curl'' la IP ha de variar. Si no ho fa pot ser que no hagis escalat el servei ''whoami'' (o que hagis actualitzat amb ''docker stack deploy'' i s'haurà resetejat a 1 instància).**
 +    * Assegura't que tens diverses instàncies del servei ''whoami''.
   * Què creus que significa el paràmetre //sticky// i perquè creus que funciona al //browser// però no amb ''curl''?   * Què creus que significa el paràmetre //sticky// i perquè creus que funciona al //browser// però no amb ''curl''?
  
Línia 95: Línia 161:
  
 ===== Wordpress en swarm ===== ===== Wordpress en swarm =====
 +Anem a fer una implementació de Wordpress amb Docker Swarm seguint l'arquitectura proposada en aquest diagrama:
  
-{{ wordpress_swarm.png?500 }}+{{ wordpress_swarm.png?580 }}
  
 <WRAP todo> <WRAP todo>
Línia 138: Línia 205:
     - mysql_password     - mysql_password
       - external: true       - external: true
 +
 +\\
 +
 +===== Gluster Filesystem =====
 +Per tal de facilitar la interoperativitat dels nodes en un Swarm es pot utilitzar un sistema d'arxius distribuit com GlusterFS.
 +
 +Tens aquí algunes referències per instal·lar-lo:
 +  * https://thenewstack.io/tutorial-create-a-docker-swarm-with-persistent-storage-using-glusterfs/
 +  * [[https://docs.gluster.org/en/v3/Administrator%20Guide/Start%20Stop%20Daemon/|Documentació oficial Gluster FS]].
 +
 +\\
 +
  
  
docker_swarm_stacks.1642429787.txt.gz · Darrera modificació: 2022/01/17 14:29 per enrique_mieza_sanchez