Сравнение Kubernetes и Docker
Основные различия между Kubernetes и Docker и связь этих инструментов с контейнеризацией
Джош Кэмпбелл
менеджера по продукту
ПОД РЕДАКЦИЕЙ ЧЕНДЛЕРА ХАРРИСА
Docker — это платформа контейнеризации и среда выполнения, а Kubernetes — платформа для запуска и управления контейнерами в нескольких контейнерных средах выполнения. Kubernetes поддерживает целый ряд контейнерных сред выполнения, включая Docker.
С появлением Docker в 2013 году наступила эпоха контейнеров и было положено начало вычислительной модели, основанной на микросервисах. Поскольку контейнеры не зависят от собственной операционной системы, их удобно использовать для разработки слабосвязанных масштабируемых микросервисов, так как они позволяют командам декларативно упаковать приложение, его зависимости и конфигурацию в один образ контейнера.
Однако по мере того, как приложения усложнялись в связи с размещением контейнеров на множестве серверов, возникали новые проблемы: как координировать и планировать многочисленные контейнеры, как обеспечить взаимодействие между ними, как масштабировать экземпляры контейнеров и пр. Платформа Kubernetes была предложена как способ решения этих проблем.
Когда говорят о технологии контейнеризации, чаще всего упоминают платформы Docker и Kubernetes. Вы можете спросить: какая из этих платформ лучше? Но часто это не вопрос выбора: вы можете с успехом использовать обе.
Попробуйте Compass бесплатно
Повышайте удовлетворенность разработчиков, каталогизируйте все сервисы и улучшайте работоспособность программного обеспечения.
Что такое Docker?
Docker — это коммерческая платформа контейнеризации и среда выполнения, с помощью которой разработчики могут создавать, развертывать и запускать контейнеры. В ней используется клиент-серверная архитектура с простыми командами и автоматизацией через единый API.
Кроме того, в Docker имеется набор инструментов, которые обычно используют для упаковки приложений в неизменяемые образы контейнеров. Для этого требуется создать Dockerfile, а затем выполнить соответствующие команды для построения образа с помощью сервера Docker. Для создания контейнеров разработчикам необязательно использовать Docker, однако эта платформа облегчает задачу. Затем образы контейнеров можно развернуть и запустить на любой платформе, которая поддерживает контейнеры: Kubernetes, Docker Swarm, Mesos, HashiCorp Nomad или другой.
Хотя Docker эффективно упаковывает и распределяет контейнерные приложения, запускать контейнеры и управлять ими в нужном масштабе, используя только Docker, — непростая задача. Координация и планирование контейнеров на нескольких серверах или в нескольких кластерах, обновление и развертывание приложений без остановки работы, мониторинг состояния контейнеров — вот лишь несколько аспектов, которые необходимо учитывать.
Для устранения этих и других проблем были созданы решения для оркестрации контейнеров: Kubernetes, Docker Swarm, Mesos, HashiCorp Nomad и др. С их помощью организации могут управлять большим количеством контейнеров и пользователей, эффективно балансировать нагрузку, обеспечивать аутентификацию и безопасность, выполнять многоплатформенное развертывание и делать многое другое.
Связанные материалы
Сравнение микросервисной и монолитной архитектур
СМ. РЕШЕНИЕ
Улучшите процесс разработки с помощью Compass
Что такое Kubernetes?
Kubernetes (которую иногда называют K8s) — это популярная платформа с открытым исходным кодом, предназначенная для оркестрации контейнерных систем среды выполнения в кластере сетевых ресурсов. Kubernetes можно использовать с платформой Docker или без нее.
Kubernetes была создана компанией Google, которой понадобился новый способ запуска миллиардов контейнеров в неделю с поддержкой масштабирования. Google выпустила Kubernetes как платформу с открытым исходным кодом в 2014 году, и сейчас она является признанным лидером на рынке и стандартным инструментом оркестрации при развертывании контейнеров и распределенных приложений. Как отмечает Google, «основная цель разработки Kubernetes заключалась в том, чтобы упростить развертывание и контроль сложных распределенных систем, сохраняя при этом пользу от оптимизации использования ресурсов, которая достигается с помощью контейнеров».
Kubernetes объединяет несколько контейнеров в группу и управляет ими на одной машине, чтобы уменьшить нагрузку на сеть и более эффективно использовать ресурсы. Например, такой набор контейнеров может включать сервер приложений, кэш Redis и базу данных SQL. Каждый контейнер Docker может содержать только один процесс.
Платформа Kubernetes особенно полезна для команд DevOps, поскольку обеспечивает обнаружение сервисов, балансировку нагрузки внутри кластера, автоматические развертывания и откаты, самовосстановление контейнеров в случае сбоя и управление конфигурацией. Кроме того, Kubernetes — критически важный инструмент для создания надежных конвейеров CI/CD в DevOps.
Однако Kubernetes — это не полноценная платформа как сервис (PaaS), поэтому при создании кластеров Kubernetes и управлении ими приходится учитывать множество аспектов. Из-за сложности управления Kubernetes многие клиенты предпочитают использовать управляемые сервисы Kubernetes от поставщиков облачных решений.
Преимущества Kubernetes
Kubernetes, которую часто называют «Linux для облака», неслучайно является самой популярной платформой для оркестрации контейнеров. Для этого есть причины, и мы укажем некоторые из них.
Автоматизация оперативного управления
В Kubernetes имеется эффективный API и инструмент командной строки kubectl, который выполняет основной объем тяжелой работы по управлению контейнерами и позволяет автоматизировать оперативное управление. Шаблон контроллера в Kubernetes обеспечивает работу приложений и контейнеров в точном соответствии с требованиями.
Абстрагирование от инфраструктуры
Платформа Kubernetes управляет доступными ей ресурсами от вашего имени. Поэтому разработчики могут сосредоточиться на написании кода приложения, не заботясь о базовой инфраструктуре (вычислительной, сетевой или инфраструктуре хранения данных).
Мониторинг состояния сервисов
Kubernetes контролирует состояние среды выполнения и сравнивает его с требуемым. Платформа выполняет автоматическую проверку работоспособности сервисов и перезапускает контейнеры в случае их сбоя или остановки. Kubernetes предоставляет доступ только к запущенным и готовым к работе сервисам.
Сравнение Kubernetes и Docker
Docker — это контейнерная среда выполнения, а Kubernetes — платформа для запуска контейнеров и управления ими в нескольких контейнерных средах выполнения. Kubernetes поддерживает целый ряд контейнерных сред выполнения, включая Docker, containerd, CRI-O, а также все реализации Kubernetes CRI (интерфейса контейнерной среды выполнения). Kubernetes можно образно сравнить с операционной системой, а контейнеры Docker — с устанавливаемыми в ней приложениями.
Платформа Docker сама по себе очень полезна для современной разработки приложений. Она решает классическую проблему кода, который работает только на одной машине и нигде больше. Инструмент оркестрации контейнеров Docker Swarm может выполнить развертывание в производственной среде рабочей нагрузки, состоящей из нескольких контейнеров. Если система растет и возникает необходимость добавить несколько контейнеров, объединенных друг с другом в сеть, автономная платформа Docker может столкнуться с трудностями роста. В этом случае поможет Kubernetes.
При сравнении этих платформ лучше сравнивать Kubernetes с Docker Swarm. Docker Swarm (или режим роя Docker) — это инструмент оркестрации контейнеров, подобный Kubernetes. Он позволяет управлять несколькими контейнерами, развернутыми на нескольких хостах, на которых запущен сервер Docker. По умолчанию режим роя отключен; его должна настроить команда DevOps.
Kubernetes оркеструет кластер машин, чтобы он работал как единое целое, и планирует запуск контейнеров на этих машинах с учетом имеющихся ресурсов. Путем декларативного описания контейнеры группируются в модули. Модуль является базовой единицей в Kubernetes. Платформа Kubernetes автоматически управляет обнаружением сервисов, балансировкой нагрузки, распределением ресурсов, изоляцией и вертикальным или горизонтальным масштабированием модулей. Она была принята сообществом разработчиков ПО с открытым исходным кодом и вошла в состав Cloud Native Computing Foundation. Amazon, Microsoft, Google — все эти компании предлагают управляемые сервисы Kubernetes на своих платформах облачных вычислений, что значительно снижает эксплуатационные расходы на запуск и обслуживание кластеров Kubernetes и их контейнерных рабочих нагрузок.
Docker или Kubernetes: какая платформа вам подходит?
Итак, если и Docker Swarm, и Kubernetes являются платформами для оркестрации контейнеров, какую из них выбрать?
Если вы создаете и используете собственную инфраструктуру, настройка Docker Swarm обычно занимает меньше времени, чем настройка Kubernetes. Эта платформа обладает теми же преимуществами, что и Kubernetes: развертывание приложений с помощью декларативных файлов YAML, автоматическое масштабирование сервисов до требуемого состояния, балансировка нагрузки между контейнерами в кластере, безопасность и контроль доступа к сервисам. Если рабочих нагрузок у вас немного, вы готовы управлять собственной инфраструктурой и не нуждаетесь в каких-то конкретных возможностях Kubernetes, тогда Docker Swarm может стать отличным выбором.
Kubernetes сложнее настроить на первом этапе, однако эта платформа более гибкая и предлагает больше возможностей. Кроме того, она имеет широкую поддержку со стороны активного сообщества разработчиков ПО с открытым исходным кодом. Kubernetes может управлять входом в сеть, имеет несколько встроенных стратегий развертывания и встроенные возможности наблюдения за контейнерами. Управляемые сервисы Kubernetes предлагаются всеми основными поставщиками облачных решений. Поэтому вам будет гораздо проще приступить к работе и использовать преимущества облака, например автоматическое масштабирование. Если у вас много рабочих нагрузок и требуется взаимодействие в облаке, в вашей организации много команд и нужна хорошая изоляция сервисов, тогда вам стоит подумать об использовании Kubernetes.
Compass и оркестрация контейнеров
Независимо от того, какое решение для оркестрации контейнеров вы выберете, важно использовать подходящий инструмент, чтобы управлять сложностью распределенной архитектуры по мере масштабирования. Atlassian Compass — это расширяемая платформа для разработчиков, которая объединяет разрозненные сведения о результатах разработки и совместной работе команд в едином центре с возможностью поиска. Решение Compass поддержит вас в борьбе с разрастанием микросервисов благодаря каталогу компонентов. Кроме того, с его помощью можно внедрить рекомендации, оценить работоспособность программного обеспечения по картам оценки, а также распространить данные и аналитику по всему пакету инструментов DevOps с помощью расширений на платформе Atlassian Forge.
Поделитесь этой статьей
Следующая тема
Рекомендуемые статьи
Добавьте эти ресурсы в закладки, чтобы изучить типы команд DevOps или получать регулярные обновления по DevOps в Atlassian.