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
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
Swarm Master:
- 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)"
- 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
-
Se ajusta la red: DNS Servers 8.8.8.8, y VLAN.
-
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
-
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
- 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.
-
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
- 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
- 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>
- 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.
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
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:
- Teoría: https://www.youtube.com/watch?v=bvUZuANQdhI
- 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:
- https://github.com/sskender/wordpress-docker, con MySQL
- https://gitlab.com/pancutan/perfeccion.ar/-/blob/master/docker-compose.yml?ref_type=heads#L319-366, con MariaDB (cerrado, de sergio)