docker swarm: first service


Docker 1.12 Swarm Mode Deep Dive Part 1: Topology
Docker 1.12 Swarm Mode Deep Dive Part 2: Orchestration
Administer and maintain a swarm of Docker Engines
Deploy services to a swarm
How services work
How nodes work
How to Configure the Linux Firewall for Docker Swarm on CentOS 7
Firewall ports

Функция управления кластером и оркестровки в докере реализована с помощью swarmkit.
Swarmkit это отдельный проект который реализует слой оркестровки докера и используется непосредственно в докере.

Ключевыми понятия в swarm являются: ноды, сервисы и таски.
Нода — это хост с установленным докером и запущенным в swarm режиме.
Cервис — это образ микросервиса в контексте более крупного приложения. Например сервисы могут включать в себя HTTP сервер, или сервер баз данных или любых других программ запускаемых в рамках распределенной среды.
Таск — это экземпляр контейнер запускаемый в рамках сервиса.

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

Как выше сказано, существует два типа нод: менеджер и воркер.

Manager nodes

Нода-менеджер обрабатывает задачи управления кластером:
-управление/мониторинг состоянием кластера
-планирование сервисов
-служит точкой входя для HTTP API

Нода-менеджер может иметь следующие статусы:
— Пусто — если при выполнении команды docker node ls в поле STATUS пусто, это это означает, что данная нода-воркер.
— Leader — означает что нода главный менеджер которые принимает все решения по управлению swarm и оркестрации.
— Reachable — означает, что нода менеджер которая принимает участие в кворуме. В случае пропадания лидера, данная нода имеет право на избрание в качестве нового лидера.
— Unavailable — означает что данный менеджер в данный момен по каким то причинам не доступен. В данном случае либо воркер получает роль менеджера либо добавить нового менеджера.

Manager ноды взаимодействуют между собой посредством протокола RAFT, а worker используют протокол Gossip.
Рекомендуемое кол-во менеджеров — это 3,5 или 7, именно такое кол-во является отпимальным для сохранения кворума при потери одного из менеджеров. Кол-во воркеров не ограничено.
С помоью api можно менять роли нод динамически.
Мэнеджеры и воркеры взаимодействуют по протоколу gRPC.

Worker nodes

Нода-воркер предназначена только для обработки тасков т.е. для запуска контейнеров. Существует возможность создать swarm кластер только из одного менеджера (по умолчанию менеджер также выполняет роль воркера), но из одного воркера нет. Воркер должен иметь хотяб одного менеджера.
Чтоб запретить запуск тасков на менеджере нужно сменить его доступность с Active на Drain командой:

docker node update --availability drain ИМЯ_НОДЫ

В качесвте примера запустим swarm на каком нибудь сервере.

Смтрим запущен ли swarm:
 docker info

Ищем строку состояния swarm:
Swarm: inactive // не запущен

инициализируем swarm
docker swarm init

В ответ нам прилетит что-то типа:
Swarm initialized: current node (szpgk0vjm52902fbayeelew8h) is now a manager.

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

    docker swarm join --token SWMTKN-1-0g9j0cw98vy8k1xyut9p0ogppuu0fdbiqnmum2wm13t569fh8v-1p4dq90f44arpgz51nc8ikrc9 ВАШIPАДРЕС:2377

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

Где соответсвенно перавая команда — используется для добавления воркеров, исполняется на самом воркере.
Вторая команда генерит ключ для добавления менеджера. т.е. в ответ мы получаем команду с ключем которую выполняем на менеджере.

После ввода команды docker swarm init в нашей системе произошли следующие изменения:
— сгенерировался рутовый сертификат для swarm, который будет использоваться для подписи сертификатов всех менеджеров и воркеров
— сгенерировался первый серт для менеджера (комп на котором запустили docker swarm init)
— сгенерировался токен для добавления нод-воркеров

Команды:

Смотрим список нод в кластере:
docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
szpgk0vjm52902fbayeelew8h *   DockerPC         Ready               Active              Leader              18.05.0-ce

Сейчас в данном списке толкьо одна нода-менеджер 

Команда для запуска и управления сервисами swarm:
docker service 

Пример - запустим alpine образ с ping командной:
docker service create alpine ping 1.1.1.1
u1xphmmvmg8i8gd1y4qg1r7bw
В ответ мы получаем id сервиса.

Смотрим список запущенных сервисов:
docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
u1xphmmvmg8i        brave_panini        replicated          1/1                 alpine:latest       
где REPLICAS 1/1 указывает кол-во работающих тасков и сколько их должно быть

Смотрим список запущенных тасков:
docker service ps u1
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
oxfzydbipx0u        brave_panini.1      alpine:latest       DockerPC         Running             Running 2 minutes ago                       

Увеличим кол-во тасков нашего сервиса.
docker service update brave_panini --replicas 3

Смотрим:
docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
u1xphmmvmg8i        brave_panini        replicated          3/3                 alpine:latest       
теперь кол-во тасков увеличилось REPLICAS 3/3

Смотрим инфу про наши таски:
docker service ps u1xphmmvmg8i
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS
oxfzydbipx0u        brave_panini.1      alpine:latest       DockerPC         Running             Running 11 minutes ago                           
op815uf57xsr        brave_panini.2      alpine:latest       DockerPC         Running             Running about a minute ago                       
ldjnjksw8ojg        brave_panini.3      alpine:latest       DockerPC         Running             Running about a minute ago

Удаляем сервис:
docker service rm brave_panini

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *