Содержание
Что такое Docker Swarm?
Docker Swarm — это нативный инструмент оркестрации от Docker, который позволяет запускать контейнеры Docker с высокой доступностью и многими функциями, необходимыми для работы контейнеров в продакшн. Однако в последние годы он оказался в тени Kubernetes.
Не поймите меня неправильно, Kubernetes — отличная технология для тех, кому нужны его возможности. Однако я считаю, что для многих сред, включая production и лабораторные среды, такие как домашние лаборатории, большинству нужно простое решение для запуска контейнеров с высокой доступностью.
Краткое сравнение Docker Swarm и Kubernetes
Области, где Docker Swarm уступает Kubernetes:
- Продвинутые сети
- Автомасштабирование
- Самовосстановление
- Сложные рабочие нагрузки
Области, где Docker Swarm превосходит Kubernetes:
- Простота настройки
- Гораздо более простое управление
- Интеграция с Docker
- Скорость развертывания
- Нативные сети и тома Docker
- Более низкий порог вхождения
- Единый CLI инструмент с Docker CLI
Это лишь некоторые из них.
Что такое Portainer?
На мой взгляд, Portainer — это самый важный инструмент управления Docker, который должен знать и использовать администратор. Он предоставляет графический интерфейс и инструменты для управления Docker, Nomad, Kubernetes и изолированными хостами Docker. Как только вы развернете Portainer и начнете использовать его для ежедневного администрирования, вы спросите себя, почему не начали раньше.
Portainer добавляет функциональность и опыт управления, которого многим не хватает при работе с контейнерами через командную строку. Не поймите меня неправильно, я начинал как сетевой администратор и чувствую себя как дома в командной строке, работая с коммутаторами, маршрутизаторами и другим оборудованием. Однако после первоначального очарования командной строки это становится рутиной, особенно при создании и работе с контейнерами.
Агент Portainer
Portainer управляет хостами Docker swarm с помощью агента Portainer. После того как мои хосты Docker Swarm были запущены с установленным Docker, я просто установил агент Portainer на каждый хост. Это позволяет вашему экземпляру сервера Portainer подключаться и управлять хостами, на которых установлен агент.
Docker Swarm — отличный компромисс
Многие считают Docker Swarm «мертвым» или технологией, «которую никто не использует». Но это не так. И, к сожалению, такое мышление часто мешает компаниям использовать его, хотя он отлично подошел бы для их задач.
Я вижу прогрессию инструментов Docker/контейнеров следующим образом:
- Изолированные хосты — Отлично подходят для начала работы с контейнерами и самый простой вариант. Это может быть приемлемо даже для production, если вы понимаете ограничения, риски и т.д.
- Docker Swarm — Отличный «компромисс» между изолированными хостами и Kubernetes. Часто организациям не нужен Kubernetes, а сложность и управление этим решением перевешивают преимущества. Docker Swarm обеспечивает высокую доступность ваших контейнеров и предоставляет большинство функций, которые, на мой взгляд, действительно нужны малому и среднему бизнесу.
- Kubernetes — Де-факто облачное решение, позволяющее запускать контейнеры для production и облачных сред. Однако Kubernetes приносит много сложностей, которые многим средам могут быть не нужны.
Короче говоря, не стоит сбрасывать со счетов Docker Swarm как отличный вариант, который может решить вашу задачу без сложностей Kubernetes, но с гораздо большей доступностью и функциями оркестрации, чем изолированные хосты Docker.
Насколько сложно установить кластер Docker Swarm?
Совсем не сложно, по сути, одна команда на главном узле и затем команда присоединения на других узлах:
docker swarm init --advertise-addr <master address>

Инициализация кластера Docker swarm
Затем присоединение других узлов — это просто выполнение команды join, которую дает мастер Docker на изображении выше. Просто скопируйте и вставьте команду с мастера на ваши рабочие узлы.

Присоединение рабочих узлов к кластеру
docker node promote <ip address>
Почему стоит использовать Docker Swarm вместо изолированных хостов или Kubernetes?
Как мы уже упоминали выше, Swarm — это отличный компромисс, и я думаю, что он подойдет для большинства задач, связанных с оркестрацией контейнеров, когда вам просто нужно запускать высокодоступные контейнеры. Если вам не нужна сложность Kubernetes, но вам нужно что-то большее, чем изолированный хост Docker, Swarm — это то самое «что-то» на мой взгляд.
Кроме того, для меня есть просто некоторые контейнеры, которые не предназначены для работы внутри Kubernetes. Я могу вспомнить такие решения, как home assistant, с которыми у многих возникают проблемы при работе внутри Kubernetes. Docker Swarm дает вам нативный, беспроблемный опыт работы с контейнерами Docker и просто добавляет слой оркестрации.
Кроме того, если вы хотите иметь лучшую видимость общей картины вашей контейнерной инфраструктуры, работа с несколькими изолированными хостами становится сложной, поскольку вам приходится управлять ими индивидуально. Portainer делает это намного проще, но все равно это может быть громоздко.
С Docker Swarm ваши контейнеры представлены как логическое объединение, поэтому вы можете видеть и иметь представление обо всем, что работает через сервисы Docker.
Docker Swarm с Portainer ощущается так же удобно, как клиент vSphere
Когда вы объединяете хосты Docker Swarm с Portainer, опыт работы становится абсолютно фантастическим. Интерфейс и функциональность Portainer чрезвычайно хороши и дают вам все возможности point-and-click, которые вы хотите/нуждаетесь при работе с вашими хостами Docker Swarm.
Это делает управление сервисами Docker Swarm чрезвычайно простым и позволяет видеть все контейнеры, работающие на всех ваших хостах в кластере Docker Swarm.
Один из инструментов, который я особенно люблю, — это Визуализатор кластера. Этот инструмент, встроенный в Portainer, позволяет визуально видеть хосты вашего кластера Swarm и контейнеры, работающие на каждом хосте.

Визуализатор кластера Portainer для кластера Docker swarm
С помощью визуализатора кластера вы можете просматривать только запущенные задачи или все задачи, даже те, которые не запущены, завершились с ошибкой, отклонены и т.д.
Управление в Docker Swarm
Кроме того, Portainer делает повседневные задачи управления в Docker Swarm очень простыми. Такие вещи, как обновление ваших стеков и сервисов, просты с этим инструментом:

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

Конфигурация доступности для хостов
Настройка безопасности и продвинутые инструменты
Одна из замечательных вещей, которые, на мой взгляд, Portainer делает видимыми и позволяет администраторам реализовать, — это лучшие практики безопасности в управлении контейнерами. В настройках для вашего хоста вы можете с помощью простого переключателя реализовать такие вещи, как отключение bind mounts для не-администраторов, отключение привилегированного режима для не-администраторов, отключение стеков, отключение маппинга устройств и многое другое.
Заключение
Оставайтесь на связи, так как я создам подробный блог о настройке Docker Swarm с GlusterFS и Portainer, чтобы вы могли увидеть, как я настроил свою среду. В целом, я очень доволен тем, как все работает с кластером Swarm в лаборатории, запускающим критические сервисы, которые я хочу иметь с высокой доступностью, но без всей сложности Kubernetes. Portainer — это как вишенка на торте, которая делает это решение просто фантастическим.