Skip to content

erickramirez82/docker-swarm-with-portainer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 

Repository files navigation

Docker-swarm-with-portainer

Docker Swarm with portainer

Docker swarm - Portainer

Requeremientos

Instalar docker y docker compose en cada maquina sea nodo o manager

  • Desinstalar cualquier version venga por defecto en la maquina de linux
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
  • Actualice el índice de paquetes apt e instale paquetes para permitir que apt use un repositorio a través de HTTPS:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings

  • Agregue la clave GPG oficial de Docker:
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
  • Utilice el siguiente comando para configurar el repositorio estable.
# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • Actualice el índice del paquete apt e instale la última versión de Docker Engine y containerd, o vaya al siguiente paso para instalar una versión específica:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  • Para que no tengamos que utilizar sudo cada vez que queramos utilizar Docker, hacemos lo siguiente:
sudo usermod -aG docker <username> 
  • Recomienda reiniciar maquina
sudo init 6
  • Probar que funciona
docker -v
docker compose version
docker ps  

Docker swarm

Img. Docker Swarm

  • Inicializar swarm manager principal la ip es la corresponde a la maquina hemos escogido como manager lider obtener podemos ejecutar el comando ip -a
sudo docker swarm init --advertise-addr  xxx.xxx.xxx.xxx
  • como resultado para agregar un trabajador a este enjambre del manager principal, ejecutamos el siguiente comando ejemplo dentro los workes o nodos:
sudo docker swarm join --token llave_token xxx.xxx.xxx.xxx:2377
  • Agregar otro manager ejecutamos el siguiente comando en el manager principal para generar el token con que los otros manager se van unir:
sudo docker swarm join-token manager
  • como resultado para agregar un trabajador a este enjambre, ejecute el siguiente comando ejemplo dentro los managers :
sudo docker swarm join --token llave_toke xxx.xxx.xxx.xxx:2377
  • Para listar nodos y manager ejecutamos el siguiente comando
sudo docker node ls 
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
v99v60tphabrijq1ervytcq52 *   manager1   Ready     Active         Leader           20.10.12
0hzzug83g0nd7dpmk24v64hp7     manager2   Ready     Active         Reachable        20.10.12
hwt5kzw9qahyn118kj7ozh0u4     manager3   Ready     Active         Reachable        20.10.12
l67ozg632t09c181beyfxx5xb     node1      Ready     Active                          20.10.12
lga3jyawwb7scvxtmyrx0xyf5     node2      Ready     Active                          20.10.12

Portainer con swarm

Portainer

  • Crear el archivo portainer.yml dentro manager1
version: '3.2'

services:
  agent:
    image: portainer/agent:2.11.1
    environment:
      # REQUIRED: Should be equal to the service name prefixed by "tasks." when
      # deployed inside an overlay network
      AGENT_CLUSTER_ADDR: tasks.agent
      # AGENT_PORT: 9001
      # LOG_LEVEL: debug
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /var/lib/docker/volumes:/var/lib/docker/volumes
    networks:
      - agent_network
    deploy:
      mode: global
      placement:
        constraints: [node.platform.os == linux]

  portainer:
    image: portainer/portainer-ce:2.11.1
    command: -H tcp://tasks.agent:9001 --tlsskipverify
    ports:
      - "9000:9000"
      - "8000:8000"
    volumes:
      - portainer_data:/data
    networks:
      - agent_network
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.role == manager]

networks:
  agent_network:
    driver: overlay

volumes:
  portainer_data:

Portainer con NFS (Recomienda para persistencia de los datos)

  • Requeremiento instalar nfs-common en todos los managers, nodos o workes
sudo apt install -y nfs-common
  • Testear conexión en mi caso mi servidor NFs esta ip 192.168.56.11
sudo showmount -e xxx.xxx.xxx.xxx
  • Crear el archivo portainer.yml dentro manager1
version: '3.2'

services:
  agent:
    image: portainer/agent:2.11.1
    environment:
      # REQUIRED: Should be equal to the service name prefixed by "tasks." when
      # deployed inside an overlay network
      AGENT_CLUSTER_ADDR: tasks.agent
      # AGENT_PORT: 9001
      # LOG_LEVEL: debug
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /var/lib/docker/volumes:/var/lib/docker/volumes
    networks:
      - agent_network
    deploy:
      mode: global
      placement:
        constraints: [node.platform.os == linux]

  portainer:
    image: portainer/portainer-ce:2.11.1
    command: -H tcp://tasks.agent:9001 --tlsskipverify
    ports:
      - "9000:9000"
      - "8000:8000"
    volumes:
      - portainer_data:/data
    networks:
      - agent_network
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.role == manager]

networks:
  agent_network:
    driver: overlay

volumes:
  portainer_data:
    driver_opts:
      type: "nfs4"
      o: "addr=xxx.xxx.xxx.xxx,rw"
      device: ":/mnt/Nas/portainer"

  • Ejecutamos el docker portainer

Nota. Ejecutar un stack en el clúster como servicio con el siguiente comando se hace para todos

sudo docker stack deploy --compose-file=portainer.yml portainer 
sudo docker stack rm portainer
  • Desconectar el registro servicio: hay que recurrir al comando docker service rm con el nombre de servicio, en este caso,
sudo docker service rm portainer

About

Docker Swarm with portainer

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published