Что следует использовать? — CloudSavvy ИТ

Иллюстрация с логотипами Docker и Kubernetes

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

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

Обзор

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

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

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

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

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

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

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

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

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

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

Docker Swarm также использует файлы YAML, но без них можно создавать простые развертывания. Swarm CLI предлагает императивные команды в качестве альтернативы, поэтому вы можете запустить трио контейнеров 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, это означает, что нужно изучить несколько шагов и абстракций. Ваши контейнеры Pod должны ссылаться на службу, на которую ссылается Ingress, определяющий ваши правила маршрутизации. Плюс в том, что все это встроено в Kubernetes; единственное предварительное условие — внешний балансировщик нагрузки, указывающий на основной IP-адрес вашего кластера. Поставщики управляемых облаков Kubernetes обычно предлагают способ создания такого балансировщика нагрузки одним щелчком мыши.

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

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

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

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

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

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

Заключение

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

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

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

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

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

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

Похожие записи

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

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