Docker Swarm en Containers Proxmox - perfeccion-ar/infraestructura-clasica-y-avanzada GitHub Wiki

Experiencia 2025.05.04

  • Creados 3 CT: 1 Master y dos worker Swarm

Problema encontrado

Si bien con el nesting es suficiente para tener Docker andando, Swarm tiene algún tipo de problema que hace que los services se queden sin red. Especialmente con Ubuntu.

De modo que se sigue un camino parecido al planteado aquí, con un Debian - https://gist.github.com/Drallas/e03eb5a4f68bb526f920a423455bc0c9

Comandos empleados: cuidar el orden

Swarm Master:

  1. Se baja una imagen especial de Debian, desde https://community-scripts.github.io/ProxmoxVE/scripts?id=docker mediante este comando en la terminal del Proxmox
root@bunker4:~# bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/docker.sh)"
  1. En el asistente se escoge
  • Avanzado
  • Se pone un nombre, ejemplo: MasterSwarm (sino queda "docker")
  • Se escoge Container 0 (privilegiado),
  • 2048 MB de RAM, 2 cores.

Las opciones de red parecen confundirlo, dejarlas para cuando termine.

Arrancará encendida: se apaga

  1. Se ajusta la red: DNS Servers 8.8.8.8, y VLAN.

  2. Se toma nota del ID y se edita /etc/pve/lxc/110.conf - que estas líneas estén así:

features: keyctl=1,nesting=1
unprivileged: 0

Ideas para hardenear no el LXC Container, sino el Docker, aquí: https://gist.github.com/Drallas/e03eb5a4f68bb526f920a423455bc0c9#set-userns-remap

  1. Se enciende el container, se entra a él

    pct start 110 pct enter 110

Tiramos un ping google.com - si no anda, puede ser porque ha ignorado 8.8.8.8 en los DNS Servers, e insiste en tomar el DNS de la VLAN (TODO: arreglar eso). Corregir en /etc/resolv.conf

Si tras reiniciar, esa configuración no queda persistirla, utilizar resolvconf como se detalla en https://serverfault.com/a/1162618

  1. Iniciamos un Swarm. Importante porque hasta entonces no estará disponible ingress_sbox
root@Swarm-Master:~# docker swarm init
Swarm initialized: current node (kw4b9ichmb65x4ew8cix64uvl) is now a manager.
  1. Activamos el forward

    nsenter --net=/run/docker/netns/ingress_sbox sysctl -w net.ipv4.ip_forward=1

Si se demora el swarm en arrancar, se espera unos segundos mas antes de lanzar ese comando

  1. Armamos un service de prueba
root@SwarmMaster:~# docker service create --name web --replicas 3 --publish 8080:80 nginx
msd81cq3zsqn4o30twneepkll
overall progress: 3 out of 3 tasks 
1/3: running   [==================================================>] 
2/3: running   [==================================================>] 
3/3: running   [==================================================>] 
verify: Service msd81cq3zsqn4o30twneepkll converged
  1. Controlar (debe aparecer el log!)
root@docker:~# docker service logs web

Además

root@docker:~# curl localhost:8080 | grep Welcome

<title>Welcome to nginx!</title>
<h1>Welcome to nginx!</h1>
  1. El ip_forward no sobrevivirá a un reinicio, de modo que conviene convertirlo en servicio. Siga estas instrucciones para dejarlo fijo.

Además, esta versión del script de arranque parece más sólida.

Workers

Sí se perdieron los tokens para los workers ( o más Managers), hacer

docker swarm join-token worker
docker swarm join-token manager

Agregue más workers mediante docker swarm join - ajuste la ip al final del comando

docker swarm join --token ******************************************* 192.168.89.194:2377

¿Nodos operando?

root@Swarm-Master:~# docker node ls
ID                            HOSTNAME       STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
kw4b9ichmb65x4ew8cix64uvl *   Swarm-Master   Ready     Active         Leader           26.1.3
d6q4xv333a6bwiam6uidyr3th     SwarmNode01    Ready     Active                          26.1.3
pvro1w4rpzjzcvaw6g38m5csd     SwarmNode02    Ready     Active                          26.1.3

Aprendizaje de Docker Swarm

Conceptos clave:

  • Los stacks agrupan servicios. Ejemplos

    • Departamento de Finanzas
    • Procesamientos OLAP
    • Stack de infraestructura
  • Los servicios agrupan containers. Ejemplos

    • Servicio Front
    • Servicio Back
    • Servicios del stack de infraestructura: Jenkins, Gitlab-ce, Youtrack, etc.

Pasos:

  1. Teoría: https://www.youtube.com/watch?v=bvUZuANQdhI
  2. Práctica

Tras haber conseguido andar los nginx de prueba, trabajaremos con docker-compose y Wordpress

El ejemplo del video no está disponible. Posibles sustitutos:

⚠️ **GitHub.com Fallback** ⚠️