Поиск по сайту:

Kubernetes против Docker Swarm: что использовать?


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

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

Обзор

Kubernetes изначально разрабатывался как проект с открытым исходным кодом в Google. В настоящее время он находится в Cloud Native Computing Foundation (CNCF), межотраслевой организации по продвижению и поддержке широко используемых облачных проектов.

Для настройки Kubernetes требуется создать кластер физических машин, называемых узлами. Эти машины запускают ваши контейнеры и контролируются централизованным первичным узлом, который выдает инструкции по планированию контейнеров. Рабочие узлы действуют в соответствии с этими инструкциями, чтобы извлекать образы из реестров и запускать ваши контейнеры.

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

Режим Swarm — это встроенный в Docker оркестратор, входящий в состав стандартного дистрибутива Docker. Любой компьютер с установленным docker может создать кластер swarm или присоединиться к нему.

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

Как и в Kubernetes, один узел диспетчера Swarm отвечает за планирование и мониторинг контейнеров. Менеджер может реагировать на инциденты в кластере, такие как переход узла в автономный режим, и соответствующим образом перепланировать контейнеры. Он также поддерживает чередующиеся обновления, позволяя масштабировать рабочие нагрузки, не влияя на доступность.

Добавление новых рабочих нагрузок

Приложения Kubernetes развертываются путем создания декларативного представления ресурсов вашего стека в файле YAML. YAML «применяется» к вашему кластеру, обычно с помощью интерфейса командной строки, такого как kubectl, а затем обрабатывается плоскостью управления Kubernetes, работающей на основном узле.

Дополнительные инструменты через такие проекты, как Helm, позволяют вам «устанавливать» приложения, используя предварительно настроенные «диаграммы». Это наборы файлов YAML, которые были упакованы для простого добавления в ваш кластер.

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

Docker Swarm также использует файлы YAML, но простые развертывания можно создавать и без них. В качестве альтернативы интерфейс командной строки Swarm предлагает императивные команды, поэтому вы можете запустить три контейнера NGINX, запустив:

docker service create --replicas 3 --name nginx nginx:latest

Когда используются файлы YAML, формат по-прежнему гораздо более лаконичен, чем ресурсы Kubernetes. Определения стека Swarm очень похожи на файлы Docker Compose; Swarm может развертывать большинство файлов Compose как есть, что позволяет легко переводить существующие рабочие нагрузки Dockerized в масштабируемую работу в многоузловом кластере Swarm.

Kubernetes работает с абстракциями, которые намного превосходят ваши настоящие контейнеры. Вам необходимо понимать такие термины, как «Набор реплик», «Развертывание» и «Под», а также то, как они относятся к контейнерам, которые вы используете. Напротив, определение сервисов Swarm будет знакомо всем, кто уже использовал Docker и Docker Compose.

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

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

Kubernetes обеспечивает надежные гарантии репликации, согласованности и распространения. Он может автоматически масштабировать ваши службы в зависимости от внешних факторов, обеспечивая доступность ваших рабочих нагрузок даже в периоды пикового спроса. Эта автоматизация может стать решающим фактором для занятых операционных групп.

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

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

Сеть и балансировка нагрузки

Kubernetes предоставляет рабочие нагрузки через «сервисы», которые действуют как балансировщики нагрузки в кластере. Трафик обычно поступает в службу через Ingress, ресурс, который позволяет фильтровать входящие запросы на основе таких свойств, как их имя хоста и URL-адрес.

Как обычно в Kubernetes, это означает, что нужно изучить несколько шагов и абстракций. Ваши поды-контейнеры должны ссылаться на службу, на которую сам ссылается вход, определяющий ваши правила маршрутизации. Положительным моментом является то, что все это встроено в Kubernetes; единственное необходимое условие — внешний балансировщик нагрузки, указывающий на основной IP-адрес вашего кластера. Поставщики управляемых облаков Kubernetes обычно предлагают способ создания такого балансировщика нагрузки одним щелчком мыши.

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

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

Наблюдаемость

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

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

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

Заключение

Kubernetes и Docker Swarm — это два оркестратора контейнеров, которые вы можете использовать для масштабирования своих сервисов. Что вам следует использовать, зависит от размера и сложности вашего сервиса, ваших целей в отношении репликации и любых особых требований, которые вы предъявляете к сети и наблюдаемости.

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

Развертывание в Kubernetes требует понимания основных концепций, того, как они абстрагируются от основ контейнера, и типа ресурса, который следует использовать в каждом сценарии. Это делает кривую обучения относительно крутой; Kubernetes известен своей сложностью и путаницей для новичков, о чем стоит помнить, если у вас нет специальной операционной группы.

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

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

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