Info
Content

Swarm

С помощью команды

root@idudin-swarm-01:~# docker system info | grep Swarm
 Swarm: inactive

Мы можем увидеть включен ли сворм на сервере с докером

Включаем если не включен

root@idudin-swarm-01:~# docker swarm init
Swarm initialized: current node (gnf236u9n3gnor2926ro2retb) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-0d3es2bdhqlaozr8qzi7w9gu91bcr2m97pdr81e9n0mfeb29sw-4haan920y2de2z45n4jkyzr5f 172.28.103.198:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

Подключаем вторую ноду

root@idudin-swarm-02:~# docker swarm join --token SWMTKN-1-0d3es2bdhqlaozr8qzi7w9gu91bcr2m97pdr81e9n0mfeb29sw-4haan920y2de2z45n4jkyzr5f 172.28.103.198:2377
This node joined a swarm as a worker.

Видим что все круто

root@idudin-swarm-01:~# docker node ls
ID                            HOSTNAME          STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
gnf236u9n3gnor2926ro2retb *   idudin-swarm-01   Ready     Active         Leader           20.10.12
uwj0b9w0ussmfhkjmdgev9j19     idudin-swarm-02   Ready     Active                          20.10.12

  • Node - это наши виртуальные машины, на которых установлен docker. Есть manager и workers ноды. Manager нода управляет workers нодами. Она отвечает за создание/обновление/удаление сервисов на workers, а также за их масштабирование и поддержку в требуемом состоянии. Workers ноды используются только для выполнения поставленных задач и не могут управлять кластером
  • Stack - это набор сервисов, которые логически связаны между собой. По сути это набор сервисов, которые мы описываем в обычном compose файле. Части stack (services) могут располагаться как на одной ноде, так и на разных
  • Service - это как раз то, из чего состоит stack. Service является описанием того, какие контейнеры будут создаваться. Если вы пользовались docker-compose.yaml, то уже знакомы с этой сущностью. Кроме стандартных полей docker в режиме swarm поддерживает ряд дополнительных, большинство из которых находятся внутри секции deploy
  • Task - это непосредственно созданный контейнер, который docker создал на основе той информации, которую мы указали при описании service. Swarm будет следить за состоянием контейнера и при необходимости его перезапускать или перемещать на другую ноду

Деплоим стэк с wordpress'ом

root@idudin-swarm-01:~# cat wordpress-stack.yaml
version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - wordpress:/var/www/html

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db:/var/lib/mysql

volumes:
  wordpress:
  db:
root@idudin-swarm-01:~# docker stack deploy -c wordpress-stack.yaml wordpress
Ignoring unsupported options: restart

Creating network wordpress_default
Creating service wordpress_db
Creating service wordpress_wordpress

Проверяем

root@idudin-swarm-01:~# docker stack ls
NAME        SERVICES   ORCHESTRATOR
wordpress   2          Swarm
root@idudin-swarm-01:~# docker stack services wordpress
ID             NAME                  MODE         REPLICAS   IMAGE              PORTS
4arvtnm8p1t6   wordpress_db          replicated   1/1        mysql:5.7
pbgau50cuvj8   wordpress_wordpress   replicated   1/1        wordpress:latest   *:8080->80/tcp

Dockerd повесился на порт 8080 на обеих нодах кластера

root@idudin-swarm-01:~# ss -tlpn | grep 8080
LISTEN    0         4096                     *:8080                   *:*        users:(("dockerd",pid=421243,fd=46))
...
root@idudin-swarm-02:~# ss -tlpn | grep 8080
LISTEN    0         4096                     *:8080                   *:*        users:(("dockerd",pid=1894,fd=35))

То есть можно ставить балансер перед кластером и пулять трафик на любую ноду кластера

🚀 curl -I 172.28.103.198:8080/wp-admin/install.php
HTTP/1.1 200 OK
Date: Mon, 27 Feb 2023 07:38:30 GMT
Server: Apache/2.4.54 (Debian)
X-Powered-By: PHP/8.0.28
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Content-Type: text/html; charset=utf-8

🚀 curl -I 172.28.103.98:8080/wp-admin/install.php
HTTP/1.1 200 OK
Date: Mon, 27 Feb 2023 07:38:34 GMT
Server: Apache/2.4.54 (Debian)
X-Powered-By: PHP/8.0.28
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Content-Type: text/html; charset=utf-8
No Comments
Back to top