Масштабирование за пределы одного сервера - важная особенность контейнеров, которую нужно понимать. Когда вы начинаете использовать контейнеры, чтобы упростить масштабирование приложения, все становится действительно интересным. Представьте, что вы использовали контейнеры Docker для разработки и тестирования. Теперь вы готовы к запуску.

Как убедиться, что у вашего приложения достаточно ресурсов? Если вы станете вирусным, как вы будете масштабироваться?

Здесь вам следует начать использовать оркестратор контейнеров, например Swarm. Та же группа, которая привела вас к Docker, создала Swarm. Swarm существует для управления контейнерами Docker на кластере машин. Docker Swarm упрощает развертывание, управление и масштабирование ваших контейнеров.

В этой статье мы рассмотрим основы оркестрации контейнеров в кластере. Мы обсудим особенности Docker Swarm, в том числе то, как запустить Swarm, развернуть приложение и масштабировать это приложение. Если вы не знакомы с Docker, взгляните на другие мои статьи.

Что такое Docker?
Запуск вашего первого контейнера
Создание вашего первого Dockerfile
Создание вашего первого образа
Переход за пределы одного контейнера

Возвращайтесь сюда, когда будете готовы.

Возможно, вы слышали, как я называл Swarm оркестратором контейнеров. Что я имею в виду? Swarm берет на себя управление и организацию как хостов, так и контейнеров Docker, работающих в вашем кластере.

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

В этой статье мы собираемся запустить Docker Swarm на вашем локальном компьютере. В нашем локальном Swarm мы познакомимся с наиболее распространенными командами и развернем некоторые службы.

Запуск роя

Для начала вам потребуется установить Docker-CE. Чтобы помочь вам установить Docker на ваш компьютер, посетите сайт Docker-CE.

После успешной установки Docker запустить свой первый Docker Swarm так же просто, как запустить одну команду. Откройте свой терминал или командную строку и выполните команду ниже.

> docker swarm init

Вы сделали это! Вы запускаете свой первый Рой.

Если вы используете этот хост на облачной платформе, такой как AWS, или в серверной ферме, добавить больше узлов в свой кластер Swarm просто. Просто следуйте инструкциям в документации Docker о том, как создать Swarm. Эта документация покажет вам, как вручную инициализировать и добавлять узлы в кластер Docker Swarm.

Другой вариант - создать собственный кластер Rancher. После того, как вы настроите Rancher, вы можете позволить ему сделать всю тяжелую работу за вас. Rancher - это сервис, который я использую при изучении возможностей различных оркестраторов контейнеров. Rancher позволяет легко развернуть кластер машин и запустить оркестратор контейнеров по вашему выбору. Rancher имеет приятную интерактивную веб-панель управления, которая позволяет легко запускать различные оркестраторы, включая Swarm, Mesos или Kubernetes.

Вы можете найти информацию о Приступая к работе с владельцем ранчо и Использование ранчо для создания роя в документации владельца ранчо.

Для целей этой статьи мы будем придерживаться одного узла, работающего на вашем локальном компьютере. Это значительно упростит знакомство с Docker Swarm и Swarm CLI.

Развернуть в Swarm

Теперь, когда ваш рой запущен, давайте запустим несколько контейнеров! Если вы знакомы с Docker, развертывание в Docker Swarm должно быть простым делом. Команды, используемые для развертывания сервисов и стеков для Docker-CE, аналогичны командам, используемым для Docker Swarm.

Чтобы развернуть образ докера pintail-whoami, выполните команду ниже.

> docker service create --name pintail-whoami -p 80:80 pintailai/pintail-whoami:0.0.1

Откройте свои браузеры и перейдите по адресу http: // localhost, и вы должны увидеть страницу ниже.

Команда, используемая для запуска этой службы, может быть такой же, как у Docker-CE, но при подключении к Swarm все работает немного иначе.

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

Итак, как получить доступ к службе, которую можно запустить в любом месте кластера?

В Docker Swarm есть очень полезный инструмент для решения этой проблемы, называемый сеткой маршрутизации Swarm. Сетка маршрутизации управляет входом в ваши работающие контейнеры. По умолчанию Swarm делает все сервисы доступными через их опубликованный порт на каждом хосте Docker.

Допустим, у вас есть Swarm, содержащий три хоста Docker. Если вы развертываете службу в своем Swarm, опубликованном на порту 80, не имеет значения, с какого хоста вы получаете доступ к этому порту - вы будете перенаправлены на свою службу.

В реальном мире, если у вас есть веб-приложение и Rest API, вы можете развернуть веб-приложение на 80-м порту, а ваш API-интерфейс - на 8080. С такой конфигурацией вы можете масштабировать количество контейнеров, в которых выполняются различные части вашего приложения. Но вы всегда можете быть уверены, что порт 80 на любом узле в кластере Swarm приведет вас на веб-сайт, а порт 8080 - на Rest API.

Сетка маршрутизации Swarm имеет свои плюсы и минусы. Эта конфигурация по умолчанию имеет свои ограничения, но она разработана, чтобы максимально упростить начало работы. По мере того, как ваши приложения становятся более сложными, сетку маршрутизации можно настроить так, чтобы она работала по-разному, и можно развернуть разные службы для использования разных конфигураций маршрутизации. Для получения дополнительной информации, пожалуйста, ознакомьтесь с документацией по сетке маршрутизации в режиме Swarm.

Масштабирование вашего сервиса

Теперь, когда у нас запущена служба, давайте немного ускорим ее!

Представьте, что вы запускаете свой веб-сайт в производственной среде Docker Swarm, и ваш сайт начинает набирать популярность в Hacker News. Ваш трафик утроится, и вам нужно справиться с дополнительной нагрузкой. Чтобы утроить количество запущенных контейнеров, просто выполните команду ниже:

> docker service scale pintail-whoami_pintail-whoami=3

Престо! Docker Swarm масштабирует количество запущенных реплик и направляет трафик в контейнеры. После выполнения приведенной выше команды вернитесь к «примеру Pintail.ai Docker» в своем браузере и несколько раз нажмите «Обновить». Вы должны увидеть изменение числа, когда сетка маршрутизации перемещает вас к разным контейнерам.

Swarm упрощает масштабирование сервисов, поэтому вы можете беспокоиться о более серьезных проблемах.

Очистить

Теперь давайте очистим наши контейнеры и Swarm.

Чтобы удалить стек pintail-whoami, запустите

> docker stack rm pintail-whoami

Будьте осторожны со следующей командой. Если вы запускаете что-нибудь еще в рое, оно будет удалено.

Чтобы удалить кластер Swarm, запустите

> docker swarm leave --force

Итак, в этой статье мы запустили Swarm Host, обсудили добавление узлов в наш кластер, мы запустили и масштабировали сервис, а также поговорили о сетке маршрутизации Swarm. Надеюсь, это введение поможет вам лучше понять оркестровку контейнеров и Docker Swarm.

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

Пожалуйста, дайте мне знать, если у вас есть какие-либо комментарии, вопросы или проблемы в комментариях. Я всегда открыт для отзывов и хотел бы услышать ваши предложения. Если вам понравилась статья, пожалуйста, оставьте мне много аплодисментов, чтобы сообщить мне об этом.