Сравнение: Docker swarm, Kubernetes, Rancher и D2C

С того момента как мы начали вести корп. блог, на демо и при обращениях в поддержку нас стали чаще сравнивать с оркестраторами. И если раньше были вопросы о том, в чем отличия D2C от Heroku, Clou66  и тому подобных сервисов, то теперь, видимо, нас стали рассматривать как альтернативное решение для оркестрации.

Что ж, попробую поправить ситуацию и провести сравнения с несколькими популярными решениями, о которых слышно чаще: Docker swarm, Kubernetes и Rancher. А чтобы зайти не «с конца», кратко дам по маленькому обзору на каждую из них.

Artem Zaytsev
Evil marketer

Docker swarm

Docker swarm mode — абстракция Docker, стирающая границы между разными машинами. Тот же Docker engine, но работающий в кластере. Несколько контейнеров-воркеров объединяются в сервис, обслуживает который Swarm менеджер. Swarm менеджер размещает контейнеры с приложением на свободный хостах и принимает команды на управление кластером.Также, Swarm работает как балансировщик нагрузки между несколькими «воркерами», равномерно распределяя запросы, приходящие с любой из сторон кластера.

Manager: управляющая нода, отправляющая задачи
Worker: нода, выполняющая задачи
Docker CLI: пользователь взаимодействует со Swarm через Docker CLI, оперируя помимо привычных, еще и дополнительными командами типа docker node и docker service.
Docker Hub: репозиторий готовых образов

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

Минусы: узкий функционал, не так крут с точки зрения отказоустойчивости как kubernetes, плюс ко всему, если опыта работы с Docker контейнерами нет, придется все равно въезжать в матчасть.

Kubernetes

Kubernetes, как сказано в официальной документации, это система для автоматизации процесса развертывания, масштабирования и управления контейнеризированными приложениями с открытым кодом. Я бы дополнил это утверждение, сказав, что Kubernetes это скорее фреймворк, который помогает построить отказоустойчивую и масштабируемую платформу управления контейнерами, нежели готовое к употребление easy-to-use решение, отчего порог входа в эту технологию выше.

Pods — контейнеры в Kubernetes объединены в группы, называемые Pods (Поды). Обычно Pod включает в себя от 1 до 5 контейнеров.

Flat Networking Space — сетевая модель в Kubernetes плоская и позволяет Подам взаимодействовать друг с другом. Контейнеры в каждому Поде используют общий IP и взаимодействуют друг с другом, используя порты на локалхосте.

Services — это абстракция над pods, определяющая политику доступа к ним. Service автоматически распределяет нагрузку между Подами.

Replication Controllers контролируют количество «реплик» Pods внутри сервера и гарантируют запуск «реплик» для поддержания работоспособности ноды, чем улучшают отказоустойчивость.

Плюсы: Kubernetes — это бесплатный и мощный инструмент. Умеет управлять контейнерами и сочетает в себе бесконечную масштабируемость и автоматизацию.

Минусы: изучать его сильно не просто. Хорошая штука в руках грамотного OPS, но разработчику без админа с ним придется туго.

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

Также, у Ранчера есть обширный каталог приложений, которые можно быстро поставить поверх собственной инфраструктуры.

Однако на 100% готовым к употреблению продуктом Rancher не назовешь. Собственные приложения с его помощью можно разворачивать только из Docker образов. Исходников будет недостаточно, потребуется еще и окружение подготовить. Будут некоторые затруднения с масштабированием БД. В пару кликов мыши изменить конфигурацию на master-slave или multimaster не получится.

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

Минусы: Все же, Ранчер — не самая простая платформа и в нем придется разбираться. Чтобы развернуть с его помощью собственное приложение, как минимум надо уметь создавать Docker-образы, отчего определенный порог входа в технологию имеется.

D2C

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

Да, под капотом мы тоже используем Docker контейнеры и далеко не тривиальную оркестровку в виде Ansible в качестве «управляющего», однако от пользователя эта кухня спрятана и подана в виде достаточно понятного интерфейса, выраженного в простых действиях:

Плюсы: В D2C разработчику не надо вникать в подкапотную история при разработке масштабируемых приложения, можно даже без OPS решать достаточно серьезные проблемы. Так же D2C интегрирован с Letsencrypt, а тестовым хостам присваиваются домены вида *.d2c.io.

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

Не hosted-решение, что позволяет эффективно задействовать как ресурсы облачных провайдеров, так и отдавать под управление собственные хосты.

Минусы: Бесплатная только урезанная версия на 1 хост, полноценная версия платная. Для бывалых админов сервис может оказаться не достаточно гибким, так как основной фокус на простоту для разработчика.