Запускает Docker Engine в режиме swarm

При первой установке и начале работы с Docker Engine режим swarm по умолчанию отключён. Когда вы включаете режим swarm, вы работаете с концепцией служб, управляемых с помощью команды docker service.

Есть два способа запускает Engine в режиме swarm:

Когда вы запускаете Engine в режиме swarm на локальном компьютере, вы можете создавать и тестировать службы на основе созданных вами образов или других доступных образов. В вашей производственной среде режим swarm обеспечивает отказоустойчивую платформу с функциями управления кластером, чтобы ваши службы работали и были доступны.

В данных инструкциях предполагается, что вы установили Docker Engine 1.12 или более поздней версии на машину, которая будет служить узлом менеджера в вашем swarm.

Если вы ещё этого не сделали, читает Ключевые понятия режима swarm и пытается Руководство по режиму swarm.

Создаёт swarm

Когда вы запускаете команду для создания swarm, Docker Engine начинает работать в режиме swarm.

Запускает docker swarm инициализация, чтобы создать один узел swarm на текущем узле. Engine устанавливает swarm следующим образом:

  • переключает текущий узел в режим swarm.

  • создаёт swarm с именем default.

  • назначает текущий узел ведущим узлом диспетчера для swarm.

  • называет узел именем хоста машины.

  • настраивает диспетчер на прослушивание активного сетевого интерфейса через порт 2377.

  • устанавливает для текущего узла доступность Active, что означает, что он может получать задачи от планировщика.

  • запускает внутреннее распределенное хранилище данных для двигателей, участвующих в swarm, чтобы поддерживать согласованное представление swarm и всех запущенных на нем служб.

  • по умолчанию создаёт самоподписанный корень CA для swarm.

  • по умолчанию генерирует токены для рабочих узлов и узлов менеджера для присоединения к swarm.

  • создаёт оверлейную сеть с именем ingress для публикации сервисных портов, внешних по отношению к swarm.

  • создаёт наложенные по умолчанию IP-адреса и маску подсети для ваших сетей

Выходные данные для docker swarm init содержат команду подключения, которую следует использовать при присоединении новых рабочих узлов к swarm:

$ docker swarm init
Swarm initialized: current node (dxn1zf6l61qsb1josjja83ngz) is now a manager.

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

    docker swarm join \
    --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
    192.168.99.100:2377

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

Настройка пулов адресов по умолчанию

По умолчанию Docker Swarm использует пул адресов по умолчанию 10.0.0.0/8 для глобальных (оверлейных) сетей. Каждая сеть, в которой не указана подсеть, будет иметь подсеть, последовательно выделенную из этого пула. В некоторых случаях может быть желательно использовать другой пул IP-адресов по умолчанию для сетей.

Например, если диапазон 10.0.0.0/8 по умолчанию конфликтует с уже выделенным адресным пространством в вашей сети, желательно убедиться, что сети используют другой диапазон, не требуя от пользователей Swarm указывать каждую подсеть с помощью команды --subnet.

Чтобы настроить пользовательские пулы адресов по умолчанию, необходимо определить пулы при инициализации Swarm с помощью параметра командной строки --default-addr-pool. Данный параметр командной строки использует нотацию CIDR для определения маски подсети. чтобы создать настраиваемый пул адресов для Swarm, необходимо определить по крайней мере один пул адресов по умолчанию и дополнительную маску подсети пула адресов по умолчанию. Например, для 10.0.0.0/27 используйте значение 27.

Docker выделяет адреса подсети из диапазонов адресов, указанных параметром --default-addr-pool. Например, параметр командной строки --default-addr-pool 10.10.0.0/16 указывает, что Docker будет выделять подсети из этого диапазона адресов /16. Если бы --default-addr-pool-mask-len не был указан или явно установлен равным 24, это привело бы к 256 сетям /24 в форме 10.10.X.0/24.

Диапазон подсети исходит из --default-addr-pool (например, 10.10.0.0/16). Размер 16 представляет собой количество сетей, которые можно создать в этом диапазоне default-addr-pool. Параметр --default-addr-pool может встречаться несколько раз, при этом каждый параметр предоставляет дополнительные адреса, которые docker может использовать для оверлейных подсетей.

Формат команды такой:

$ docker swarm init --default-addr-pool <IP range in CIDR> [--default-addr-pool <IP range in CIDR> --default-addr-pool-mask-length <CIDR value>]

Создание пула IP-адресов по умолчанию с/16 (класс B) для сети 10.20.0.0 выглядит следующим образом:

$ docker swarm init --default-addr-pool 10.20.0.0/16

Создание пула IP-адресов по умолчанию с /16 (класс B) для сетей 10.20.0.0 и 10.30.0.0 и создание маски подсети /26 для каждой сети выглядит следующим образом:

$ docker swarm init --default-addr-pool 10.20.0.0/16 --default-addr-pool 10.30.0.0/16 --default-addr-pool-mask-length 26

В этом примере docker network create -d overlay net1 приведёт к 10.20.0.0/26 в качестве выделенной подсети для net1, а docker network create -d overlay net2 приведёт к 10.20.0.64/26 в качестве выделенной подсети для net2. Это продолжается до тех пор, пока все подсети не будут исчерпаны.

Дополнительные сведения см. на следующих страницах:

  • Swarm чистая рабочая для получения дополнительной информации об использовании пула адресов по умолчанию

  • docker swarm init CLIсправка для более подробной информации о флаге --default-addr-pool.

Настраивает рекламный адрес

Узлы-менеджеры используют рекламный адрес, чтобы разрешить другим узлам в swarm доступ к API Swarmkit и оверлейной сети. Другие узлы в swarm должны иметь доступ к узлу-менеджеру по его рекламному адресу.

Если вы не укажете рекламный адрес, Docker проверит, имеет ли система один IP-адрес. Если это так, Docker по умолчанию использует IP-адрес с портом прослушивания 2377. Если система имеет несколько IP-адресов, необходимо указывает правильный --advertise-addr, чтобы включить связь между менеджерами и наложенную сеть:

$ docker swarm init --advertise-addr <MANAGER-IP>

Вы также должны указывает --advertise-addr, если адрес, по которому другие узлы достигают первого узла менеджера, не совпадает с адресом, который менеджер считает своим собственным. Например, в облачной конфигурации, охватывающей разные регионы, узлы имеют как внутренние адреса для доступа внутри региона, так и внешние адреса, которые вы используете для доступа из-за пределов этого региона. В этом случае указывает внешний адрес с --advertise-addr, чтобы узел мог распространять эту информацию на другие узлы, которые впоследствии подключатся к нему.

Обратитесь к docker swarm init Справка по интерфейсу командной строки для более подробной информации об адресе рекламы.

Просмотрите команду присоединения или обновляет токен присоединения swarm

Узлам требуется секретный токен для присоединения к swarm. Токен для рабочих узлов отличается от токена для управляющих узлов. Узлы используют токен присоединения только в тот момент, когда они присоединяются к swarm. Смена маркера присоединения после того, как узел уже присоединился к swarm, не влияет на членство узла в swarm. Ротация токена гарантирует, что старый токен не может быть использован какими-либо новыми узлами, пытающимися присоединиться к swarm.

Чтобы получает команду присоединения, включая токен присоединения для рабочих узлов, запускает:

$ docker swarm join-token worker

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

    docker swarm join \
    --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
    192.168.99.100:2377

This node joined a swarm as a worker.

Чтобы просмотреть команду соединения и токен для узлов менеджера, запускает:

$ docker swarm join-token manager

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

    docker swarm join \
    --token SWMTKN-1-59egwe8qangbzbqb3ryawxzk3jn97ifahlsrw01yar60pmkr90-bdjfnkcflhooyafetgjod97sz \
    192.168.99.100:2377

Передать флаг --quiet, чтобы напечатать только токен:

$ docker swarm join-token --quiet worker

SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c

Будьте осторожны с токенами присоединения, потому что это секреты, необходимые для присоединения к swarm. В частности, проверка секрета в системе управления версиями является плохой практикой, поскольку это позволит любому, у кого есть доступ к исходному коду приложения, добавлять новые узлы в swarm. Токены менеджера особенно важны, потому что они позволяют новому узлу менеджера присоединиться и получает контроль над всем swarm.

Мы рекомендуем чередовать токены присоединения в следующих случаях:

  • Если токен был случайно зарегистрирован в системе контроля версий, групповом чате или случайно напечатан в ваших журналах.

  • Если вы подозреваете, что узел был скомпрометирован.

  • Если вы хотите гарантировать, что никакие новые узлы не смогут присоединиться к swarm.

Кроме того, рекомендуется внедрить график регулярной ротации для любого секрета, включая токены присоединения swarm. Мы рекомендуем вам менять токены не реже одного раза в 6 месяцев.

Запускает swarm join-token --rotate, чтобы сделать старый токен недействительным и создать новый. Указывает, хотите ли вы чередовать токен для узлов worker или manager:

$ docker swarm join-token  --rotate worker

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

    docker swarm join \
    --token SWMTKN-1-2kscvs0zuymrsc9t0ocyy1rdns9dhaodvpl639j2bqx55uptag-ebmn5u927reawo27s3azntd44 \
    192.168.99.100:2377

Узнать больше