Skip to content

Latest commit

 

History

History
296 lines (233 loc) · 9.13 KB

10030.docker_swarm.md

File metadata and controls

296 lines (233 loc) · 9.13 KB

Docker_swarm - справочник

Терминология:

  • Service - описание того, какие контейнеры будут создаваться. Кроме стандартных полей docker в режиме swarm поддерживает ряд дополнительных, большинство из которых находятся внутри секции deploy. Один service запускает определенное количество tasks.

  • Stack - это набор сервисов, которые логически связаны между собой. По сути это набор сервисов, которые мы описываем в обычном compose файле. Части stack (services) могут располагаться как на одной ноде, так и на разных.

  • Task — это атомарная запланированная единица Docker Swarm, которая содержит информацию о контейнере и команду, которая должна запущена внутри контейнера.

  • Реплика – каждый контейнер, который запускается на ноде. Количество реплик — это ожидаемое число всех контейнеров для данной service

Режимы деплоя сервисов:

  • replicated service - указанное количество реплицируемых контейнеров распределяются между узлами на основе стратегии планированния
  • global service - один контейнер запускается на каждом доступном узле в кластере

Порты

Для manager нод:

firewall-cmd --add-port=2376/tcp --permanent;
firewall-cmd --add-port=2377/tcp --permanent;
firewall-cmd --add-port=7946/tcp --permanent;
firewall-cmd --add-port=7946/udp --permanent;
firewall-cmd --add-port=4789/udp --permanent;
firewall-cmd --reload;

Для worker нод:

firewall-cmd --add-port=2376/tcp --permanent;
firewall-cmd --add-port=7946/tcp --permanent;
firewall-cmd --add-port=7946/udp --permanent;
firewall-cmd --add-port=4789/udp --permanent;
firewall-cmd --reload;

Инициализация и управление Swarm-кластером

  • Инициализация Docker Swarm, превращая текущий узел в менеджер кластера.
docker swarm init --advertise-addr <manager_ip>
#<manager_ip> - IP-адрес менеджера (указание необходимо в случае с несколькими интерфейсами)
  • Выводит токен для присоединения к кластеру как рабочий узел или менеджер.
docker swarm join-token worker  # Токен для рабочих узлов
docker swarm join-token manager # Токен для менеджеров
  • Присоединение узла к существующему кластеру.
docker swarm join --token <join_token> <manager_ip>:2377
#<join_token> - токен для добавления в кластер
#<manager_ip>:2377 - IP-адрес и порт менеджера
  • Отключение узла от кластера.
docker swarm leave --force

Управление нодами

  • Выводит список узлов в Swarm-кластере.
docker node ls
  • Выводит список тасок на ноде в Swarm-кластере.
docker node ps
  • Посмотреть параметры ноды:
docker node inspect <node_id> --pretty
#<node_id> - идентификатор узла
  • Обновление настроек узла (например, понижение или повышение до менеджера или временное выключение-включение (drain-active)).
docker node update --role manager <node_id>

docker node update --availability drain 
docker node update <node_id> --availability active

docker node update --label-add foo --label-add bar=baz <node_id>
#foo,bar=baz - добавляемые ярлыки на ноду
  • Повысить до менеджера (promote) или понизить до воркера (demote) ноду
docker node promote <node_id>
docker node demote <node_id>
  • Удаление узла из кластера.
docker node rm <node_id>

Работа со стеками

  • Развертывание стека из docker-compose.yml в Swarm-кластере.
docker stack deploy --with-registry-auth -c <compose_file> <stack_name>
#--with-registry-auth - позволяет передать авторизационные данные на worker ноды, для того чтобы использовался один и тот же образ из регистра (Опционально)
#<compose_file> - путь к файлу docker-compose.yml
#<stack_name> - имя стека
  • список всех стеков в кластере
docker stack ls
  • Список тасок стека
docker stack ps stack_name
  • Удаление стека и его сервисов.
docker stack rm <stack_name>
  • Список всех сервисов, работающих в стеке.
docker stack services <stack_name>

Управление сервисами

  • Создание нового сервиса.
docker service create --name <service_name> <image>
#<service_name> - имя сервиса
#<image> - образ для запуска
  • Вывод списка всех сервисов.
docker service ls
  • Обновление сервиса (например, изменение числа реплик).
docker service update --replicas <number> <service_name>
#<number> - число реплик
#<service_name> - имя сервиса

docker service update --image user/container:1.2 userserv

docker service update --force --update-parallelism 1 --update-delay 30s nginx

docker service update --update-parallelism 5--update-delay 2s --image user/container:1.2 userserv

docker service update --limit-cpu 2 nginx

docker service update --replicas=5 nginx
  • Просмотр журнала для конкретного сервиса:
docker service logs <service_name>
  • Удаление сервиса.
docker service rm <service_name>
#<service_name> - имя сервиса
  • Масштабирование сервиса до указанного числа реплик.
docker service scale <service_name>=<replicas>
#<replicas> - количество реплик

Работа с секретами

Swarm предоставляет хранилище для приватных данных (secrets), которые необходимы контейнерам. Как правило эта функциональность используется для хранения логинов, паролей, ключей шифрования и токенов доступа от внешних систем, БД и т.д.

  • Создание секрета:
docker secret create main_config <example.yaml>

#example.yaml:
#token: sfsjksajflsf_secret
  • Посмотреть список секретов:
docker secret ls

Работа с сетью

  • Создание сети в режиме overlay (для использования в Swarm).
docker network create --driver overlay <network_name>
#<network_name> - имя сети
  • Список сетей, доступных в кластере.
docker network ls
  • Удаление сети.
docker network rm <network_name>
#<network_name> - имя сети

Работа с томами

  • Создание нового тома.
docker volume create <volume_name>
#<volume_name> - имя тома
  • Вывод списка томов.
docker volume ls
  • Удаление тома
docker volume rm <volume_name>
#<volume_name> - имя тома

stack-шаблон

version: "3"
services:
  some-db:
    image: my-db:latest
    volumes:
      - db-data:/data
    networks:
      my-net:
        aliases:
          - db
    deploy:
      placement:
        constraints: [node.role == manager]

  some-app:
    image: some-app:latest
    networks:
      - my-net
    depends_on:
      - some-db
    deploy:
      mode: replicated
      replicas: 2
      labels: [APP=SOME-APP]
      resources:
        limits:
          cpus: '0.25'
          memory: 512M
        reservations:
          cpus: '0.25'
          memory: 256M
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
        window: 120s
      update_config:
        parallelism: 1
        delay: 10s
        failure_action: continue
        monitor: 60s
        max_failure_ratio: 0.3
      placement:
        constraints: [node.role == worker]

networks:
  my-app:

volumes:
  db-data: