Понимание различий Kubernetes и Docker — одна из важнейших тем для cloud native и DevOps. Хотя Kubernetes и Docker часто упоминаются в одних и тех же дискуссиях, их необязательно противопоставлять друг другу. На самом деле, Kubernetes и Docker не являются прямыми конкурентами. Напротив, их следует рассматривать как две технологии, которые дополняют друг друга и могут использоваться совместно.
Как понять, с какой ситуацией придется столкнуться? Прежде всего важно определить, в каких конкретно сферах Kubernetes и Docker совпадают, а в чем различаются.
Docker — это платформа с открытым исходным кодом для контейнеров приложений. Если вы раньше не сталкивались с этим понятием, поясним: контейнер — это автономный формат упаковки, который позволяет собрать весь программный код и зависимости в формат исполняемых файлов. Можно сравнить его с контейнером, в котором поставляется мебель IKEA: со всеми деталями, скобами, винтами (и, конечно, с шестигранным ключом). Но цифровой контейнер не только содержит все необходимое, но и сам собирает стол, когда вы его исполняете.
Docker часто используют разработчики приложений, потому что он предлагает компактный стандартизированный формат. Эти характеристики обеспечивают разработчикам гибкость и масштабируемость при создании, тестировании и развертывании.
У слова Docker есть и другое значение в ИТ-индустрии: существует реальная компания под названием Docker, Inc. Компания разрабатывает инструменты для работы внутри платформы. Эту разницу важно учитывать из-за совпадения названий.
Если Docker предлагает отдельные контейнеры, то Kubernetes — это инструмент для управления сразу многими контейнерами. Как и Docker (платформа, а не компания), Kubernetes представляет собой платформу с открытым исходным кодом, хотя ее управлением занимается Cloud Native Computing Foundation — проект, в который входит более 2300 участников. Kubernetes действует как операционная система для облака, оптимизируя и упрощая управление виртуальными машинами и облаками, чтобы ИТ-отделы могли работать с большими объемами данных.
Что может дать Kubernetes? Kubernetes работает примерно так же, как любой модуль управления локальной системой, но на уровне контейнеров. Подготовка, обновления, графики, удаления и контроль общего состояния — все это делает Kubernetes. Вернемся к аналогии с контейнером IKEA. Если контейнер — это один стол, то Kubernetes — это заведующий складом, который контролирует заказы, доставку и состояние столов, стульев и другой упакованной мебели на складе IKEA.
Обсуждая Docker и Kubernetes, также важно объяснить, что такое среда выполнения контейнеров. Что такое среда выполнения контейнеров? Если говорить кратко, это модуль, который запускает контейнер. В нашей аналогии с IKEA среда выполнения контейнера — это вложенные в контейнер инструкции по сборке. В некоторых случаях это довольно простой процесс, управление которым осуществляется в среде выполнения контейнеров низкого уровня. В более сложных случаях управлением интеграцией API, форматами образов и контролем образов занимается среда выполнения контейнеров высокого уровня. В некоторых случаях термин используется в том же значении, что и Docker, хотя между ними есть некоторые различия.
Kubernetes использует API под названием Container Runtime Interface (CRI). Интерфейс API взаимодействует с каждой средой выполнения контейнеров, обеспечивая исполнение пакетов. Если вернуться к аналогии с IKEA, то Kubernetes CRI — это человек, который читает инструкцию по сборке (среда выполнения контейнеров), вложенную в коробку (контейнер).
Помимо Docker существуют и другие среды выполнения контейнеров. Вот две популярные среды:
Containerd. Среда Containerd создавалась как часть проекта Docker. Но когда потребовалось сделать Docker более гибким и модульным, разработчики решили выделить Containerd в отдельный проект. Containerd обслуживает потребности сред выполнения контейнеров высокого уровня, например извлекает образы из реестров, управляет образами и интегрирует среды выполнения низкого уровня для исполнения и обработки контейнеров.
CRI-O. CRI-O — это еще одна среда выполнения контейнеров с открытым исходным кодом, которая может служить альтернативой Docker. Она использует Kubernetes Container Runtime Interface (CRI), чтобы обеспечить среды выполнения, совместимые со стандартом инициативы Open Container Initiative.
И CRI-O, и Containerd используют спецификации, предоставленные CRI, поэтому они полностью совместимы с Kubernetes.
Docker и Kubernetes часто сравнивают, но на самом деле они не конкурируют друг с другом. Аналогия с IKEA, которую мы использовали в этой статье, показывает, как они соотносятся друг с другом, и подтверждает, что они не заменяют друг друга, а вместе обеспечивают работу современных ИТ-отделов. Обе платформы являются частью экосистемы cloud native. Контейнеры Docker относятся к тем объектам, которыми управляет Kubernetes, а преимущество Kubernetes заключается в том ,что эта платформа способна с легкостью масштабировать объем контейнеров Docker.
Итак, вопрос заключается не в том, что выбрать: Docker или Kubernetes. Скорее руководители ИТ-отделов должны определиться, как они собираются совместно использовать Kubernetes и Docker для управления и выполнения других процедур.
Kubernetes и Docker созданы для совместной работы. Хотя необязательно использовать Kubernetes для управления развертыванием Docker , они составляют очень эффективный тандем, когда нужно контролировать сразу несколько развертываний. Это особенно полезно в ситуациях многочисленных развертываний одного и того же приложения, а также в случаях, когда требуется масштабирование. То, что система оркестровки Kubernetes является системой с открытым исходным кодом, обеспечивает единообразие поддержки платформы управления на нескольких серверах.
Kubernetes позволяет развертывать и контролировать множество пакетов Docker с помощью таких функций, как пакетная обработка исправлений и обновлений, а также отслеживать сбои при требуемом масштабе развертывания. При этом Kubernetes не перестает обрабатывать запросы по мере появления спроса. Используя Kubernetes, ИТ-отделы могут:
Oracle Cloud Infrastructure поддерживает ряд служб для ускорения работы и создания современных приложений cloud native. В частности, Container Engine for Kubernetes и Container Registry, которые контролируют и анализируют образы Docker, —это надежные и бесплатные (входящие в комплект) инструменты, оптимизирующие управление и повышающие производительность. Убедитесь в этом сами, попробовав бесплатно использовать Oracle Cloud для доступа к Kubernetes.
Археологический парк «Помпеи»в Италии был закрыт в марте 2020 года, и любые планы по повторному открытию требовали тщательной подготовки и контроля, чтобы обеспечить необходимую социальную дистанцию. Возникла идея предоставить туристам доступ к новому приложению MyPompeii. Его работу поддерживают несколько продуктов Oracle, которые были специально подобраны для того, чтобы ускорить внедрение решения cloud native, в том числе Oracle Container Engine for Kubernetes и Oracle Container Registry.
Расположенная в Лондоне компания Snap Vision предлагает технологию визуального поиска с использованием искусственного интеллекта, чтобы покупателям было проще находить одежду, которая им нравится. В период пандемии COVID-19 магазины закрывались на долгое время, и компания Snap Vision предложила розничным продавцам Великобритании технологию, которая помогла усовершенствовать процесс покупок через Интернет. Масштабирование вызвало некоторые трудности, но Snap Vision удалось разместить новые среды для розничных магазинов при довольно небольших затратах благодаря Oracle Cloud Infrastructure и Kubernetes.