Kubernetes против Docker: объяснение различий

Kubernetes против Docker: объяснение различий

17 декабря 2022 г.

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

* Docker, решение для управления контейнерами, его решение для оркестровки контейнеров Docker Compose и Docker Swarm, решение для оркестровки кластер-контейнер.

* Kubernetes, альтернативное решение кластера-контейнера, и сравнивает его с Docker Swarm, чтобы помочь вам выбрать тот, который лучше всего соответствует вашим требованиям.

Что такое контейнеризация?

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

В то время как концепция виртуализации заключается в совместном использовании физических ресурсов между несколькими виртуальными машинами, контейнеры разделяют ядро ​​одной ОС между несколькими контейнерами. В отличие от виртуальных машин, контейнеры легковесны именно потому, что не содержат ОС. Вот почему контейнеры загружаются за секунды. Кроме того, контейнеры можно легко развернуть в разных операционных системах (Windows, Linux, macOS) и в разных средах (облако, виртуальная машина, физический сервер) без каких-либо изменений.

В 2013 году Docker Inc. представила Docker в попытке стандартизировать контейнеры для широкого использования на разных платформах. Год спустя Google представила Kubernetes как решение для управления кластером хостов-контейнеров. Определения двух решений покажут разницу между Kubernetes и Docker.

Что такое Docker?

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

Благодаря клиент-серверной архитектуре Docker состоит из компонентов на стороне клиента и сервера (клиент Docker и демон Docker). Клиент и демон (Dockerd) могут работать в одной системе, или вы можете подключить клиента к удаленному демону. Демон обрабатывает запросы API, отправленные клиентом, в дополнение к управлению другими объектами Docker (контейнерами, сетями, томами, изображениями и т. д.).

Docker Desktop — это установщик клиента и демона Docker, который включает в себя другие компоненты, такие как Docker Compose, Docker CLI (интерфейс командной строки) и другие. Его можно установить на разные платформы: Windows, Linux и macOS.

Разработчики могут разработать приложение для запуска в нескольких контейнерах на одном хосте, что создает необходимость одновременного управления несколькими контейнерами. По этой причине Docker Inc. представила Docker Compose. Docker и Docker Compose можно обобщить следующим образом: Docker может управлять контейнером, а Compose может управлять несколькими контейнерами на одном хосте.

Создание Docker

Управление мультиконтейнерными приложениями на одном хосте — сложная и трудоемкая задача. Docker Compose, инструмент оркестровки для одного хоста, управляет многоконтейнерными приложениями, определенными на одном хосте, с использованием формата файлов Compose.

Docker Compose позволяет запускать несколько контейнеров одновременно, создавая один файл конфигурации YAML, в котором вы определяете все контейнеры. Compose позволяет разделить приложение на несколько контейнеров, а не создавать его в одном контейнере. Вы можете разделить свое приложение на подсервисы, называемые микросервисами, и запускать каждый микросервис в контейнере. Затем вы можете запустить все контейнеры, выполнив одну команду через Compose.

Рой докеров

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

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

Что такое Kubernetes?

Kubernetes (K8s) – это инструмент оркестровки, который управляет контейнерами на одном или нескольких хостах. K8s объединяет хосты в кластеры, независимо от того, находятся ли они локально, в облаке или в гибридных средах, и может интегрироваться с Docker и другими контейнерными платформами. Google изначально разработал и представил Kubernetes для автоматизации развертывания контейнеров и управления ими. K8s предоставляет несколько функций для поддержки отказоустойчивости, таких как отказоустойчивость контейнера, балансировка нагрузки между хостами и автоматическое создание и удаление контейнеров.

Kubernetes управляет кластером из одного или нескольких хостов, которые являются либо главными узлами, либо рабочими узлами. Мастер-узлы содержат компоненты панели управления Kubernetes, а рабочие узлы содержат компоненты, не относящиеся к панели управления (Kubelet и Kube-proxy). Рекомендуется иметь как минимум кластер из четырех хостов: как минимум один главный узел и три рабочих узла для запуска тестов.

Компоненты панели управления (главный узел)

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

* Apiserver — это внешний интерфейс панели управления, который предоставляет API другим компонентам Kubernetes. Он обрабатывает доступ и аутентификацию других компонентов. * Etcd — это база данных, в которой хранятся все данные о ключе/значении кластера. Каждый главный узел должен иметь копию etcd для обеспечения высокой доступности. * Планировщик Kube отвечает за назначение узла для вновь созданных модулей. * Диспетчер управления Kube представляет собой набор процессов контроллера, которые выполняются в одном процессе для уменьшения сложности. Процесс контроллера — это цикл управления, который следит за общим состоянием кластера через apiserver. Когда состояние кластера изменяется, он предпринимает действия, чтобы вернуть его обратно в желаемое состояние. Диспетчер управления отслеживает состояние узлов, заданий, учетных записей служб, токенов и многого другого. * Диспетчер облачных контроллеров — это необязательный компонент, который позволяет кластеру взаимодействовать с API-интерфейсами облачных провайдеров. Он отделяет компоненты, взаимодействующие с облаком, от компонентов, взаимодействующих с внутренним кластером.

Компоненты узлов (рабочие узлы)

Рабочие узлы не являются главными узлами. Есть два компонента узла: kubelet и kube-proxy. Они должны работать на каждом рабочем узле в дополнение к программному обеспечению среды выполнения контейнера, такому как Docker.

* Kubelet — это агент, который запускается на рабочем узле, чтобы убедиться, что каждый контейнер работает в поде. Он управляет контейнерами, созданными Kubernetes, чтобы обеспечить их работоспособность. * Kube-proxy — это сетевой прокси, работающий на каждом рабочем узле и являющийся частью сетевой службы Kubernetes. Он обеспечивает связь между модулями и кластером или внешней сетью.

Другие компоненты

  • Сервис — это логический набор модулей, которые работают вместе в определенное время. В отличие от подов, IP-адрес сервиса фиксирован. Это устраняет проблему, возникающую при удалении модуля, чтобы вместо этого другие модули или объекты могли взаимодействовать со службой. Набор модулей одной службы выбирается путем назначения службе политики для фильтрации модулей на основе меток.

* Метка — это пара атрибутов ключ/значение, которые можно назначать модулям, сервисам или другим объектам. Метки позволяют запрашивать объекты на основе общих атрибутов и назначать задачи выбору. Каждый объект может иметь одну или несколько меток. Ключ может быть определен в объекте только один раз.

Kubernetes или Docker Swarm: что лучше?

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

Разработчики могут использовать Docker Compose для управления контейнерами на одном хосте. Но сравнение Docker Compose и Kubernetes также некорректно, поскольку решения предназначены для разных областей применения. Область Compose ограничена одним хостом, а Kubernetes — кластером хостов.

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

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

Следующие пункты подчеркнут различия, которые делают K8s более надежным решением для рассмотрения.

Установка

  • Swarm уже включен в движок Docker. Используя определенные стандартные команды Docker CLI (интерфейс командной строки), можно легко включить Swarm.
  • Однако развертывание Kubernetes является более сложным, поскольку для его установки и использования необходимо изучить новые нестандартные команды. Кроме того, вам нужно научиться использовать специальные инструменты развертывания, используемые в Kubernetes. Узлы кластера следует настраивать вручную в Kubernetes, например определять мастер, контроллер, планировщик и т. д.

Примечание. Сложность установки Kubernetes можно преодолеть, используя Kubernetes как услугу (KaaS). Основные облачные платформы предлагают Kaas, в том числе Google Kubernetes Engine (GKE), который является частью Google Cloud Platform (GCP), и Amazon Elastic Kubernetes Service (EKS).

Масштабируемость

Оба решения поддерживают масштабируемость. Однако с помощью Swarm проще добиться масштабируемости, а с Kubernetes — более гибко.

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

Балансировка нагрузки

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

Высокая доступность

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

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

Мониторинг

  • В Swarm нет встроенных инструментов мониторинга и ведения журнала. Для этого требуются сторонние инструменты, такие как Reimann или Elasticsearch и Kibana (ELK).
  • В Kubernetes есть встроенный инструмент мониторинга ELK для естественного мониторинга состояния кластера. Кроме того, поддерживается ряд инструментов мониторинга для мониторинга других объектов, таких как узлы, контейнеры, модули и т. д.

Заключение

Docker — это платформа контейнеризации для создания и развертывания приложений в контейнерах независимо от операционной системы. Его можно установить с помощью Docker Desktop в Windows, Linux или macOS, и он включает в себя другие решения, такие как Compose и Swarm. Когда на одном хосте создается несколько контейнеров, управлять ими становится сложнее. В этом случае Docker Compose можно использовать для простого управления несколькими контейнерами одного приложения на одном хосте.

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


См. оригинальную статью здесь.

н


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE