Раскрываем возможности контейнеризации. Зачем дата-сайентистам Docker и Kubernetes?

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

Представляем всесторонний обзор Docker и Kubernetes с описанием их преимуществ и функционала. Чем отличаются эти две технологии и зачем их изучать дата-сайентистам? К концу статьи у вас будет четкое понимание роли контейнеризации и оркестрации в более эффективной работе дата-сайентиста.

Содержание

  1. Всесторонний обзор Docker
    1.1. Что такое Docker?
    1.2. Что такое «контейнер»?
    1.3. Инструменты и терминология Docker.
    1.4. Преимущества Docker.
  2. Всесторонний обзор Kubernetes
    2.1. Что такое Kubernetes?
    2.2. Оркестрация контейнеров с Kubernetes.
    2.3. Функционал Kubernetes.
    2.4. Преимущества Kubernetes.
  3. Разница между Docker и Kubernetes
  4. Зачем дата-сайентистам Kubernetes и Docker?
    4.1. Зачем дата-сайентистам Docker?
    4.2. Зачем дата-сайентистам изучать Docker при наличии команды DevOps?
    4.3. Преимущества Docker для дата-сайентистов.
    4.4. Зачем дата-сайентистам Kubernetes?

1. Всесторонний обзор Docker

1.1. Что такое Docker?

Docker  —  это коммерческая платформа контейнеризации и среда выполнения для создания, развертывания и запуска контейнеров за счет применения клиент-серверной архитектуры с простыми командами и автоматизацией через единый API.

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

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

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

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

Сегодня контейнеризация Docker осуществляется также с Microsoft Windows и Apple macOS. Контейнеры Docker запускаются в любой операционной системе, специализированные службы для создания, развертывания и запуска контейнерных приложений с Docker предлагаются большинством ведущих облачных провайдеров, включая Amazon Web Services, Microsoft Azure и IBM Cloud.

1.2. Что такое «контейнер»?

Контейнер  —  это легковесный и переносимый исполняемый программный пакет со всем необходимым для запуска приложения: кодом, библиотеками, служебными программами, настройками.

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

Контейнеры обычно используются при разработке и развертывании ПО: с ними проще контроль приложений, выше масштабируемость, ниже затраты на инфраструктуру.

Применение контейнеров целесообразно из-за обеспечиваемых ядром Linux функциональных возможностей изоляции процессов и виртуализации, в которые включаются контрольные группы Cgroups и пространства имен: первыми распределяются ресурсы между процессами, вторыми ограничивается доступ процесса к другим системным ресурсам или областям.

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

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

  • Меньше вес. Существенное отличие от виртуальных машин  —  в контейнерах содержатся не весь экземпляр ОС и гипервизор, а только необходимые приложению для выполнения кода процессы и зависимости ОС. Поэтому размер контейнеров намного меньше: обычно измеряется не в Гб, а Мб. Они эффективнее в расходовании аппаратных ресурсов, гораздо быстрее запускаются.
  • Выше продуктивность. Приложения с контейнерами, будучи разработаны однажды, беспроблемно развертываются в различных средах, чем обусловлена их исключительная переносимость и адаптивность. Контейнеры проще и быстрее развертываются, подготавливаются, перезапускаются. Это отличный вариант внедрения конвейеров непрерывной интеграции и непрерывного развертывания для быстрой разработки, тестирования и выпуска приложений командами разработчиков, которые практикуют Agile- и DevOps-методологии быстрой разработки, тестирования и развертывания ПО с минимальными прерываниями и оптимальной продуктивностью.
  • Выше эффективность ресурсов. На одном и том же «железе» с помощью контейнеров запускается в разы больше копий приложения, а значит  —  ниже «облачные» расходы.

1.3. Инструменты и терминология Docker

  • Каждый контейнер Docker начинается с простого текстового файла DockerFile, в котором автоматизируется процесс создания образа Docker. Это огромный, но стандартизированный список инструкций интерфейса командной строки, выполняемых в Docker Engine для сборки образа одинаково и независимо от содержимого, инфраструктуры или других переменных среды.
  • В образах Docker содержится исполняемый исходный код приложения со всеми инструментами, библиотеками, зависимостями для запуска этого кода в контейнере. При запуске образ Docker становится одним или несколькими экземплярами контейнера. Хотя образы Docker можно создавать с нуля, большинство разработчиков берут их из общедоступных репозиториев. Из одного базового образа создается несколько образов Docker с общими чертами своего стека.
  • Контейнеры Docker  —  интерактивные запускаемые экземпляры образов Docker. Если образы Docker  —  это файлы только для чтения, то контейнеры  —  интерактивный, временный, исполняемый контент. Пользователи взаимодействуют с ними, а администраторы с помощью команд Docker меняют их настройки и условия.
  • Docker Hub  —  публичный репозиторий образов Docker с «крупнейшим сообществом и библиотекой образов контейнеров» в мире: более 100 000 образов контейнеров из различных источников, включая поставщиков коммерческого ПО, Open Source проекты и индивидуальных разработчиков. В Docker Hub имеются образы, сгенерированные в Docker, Inc., проверенные образы доверенного реестра Docker и другие.
  • Docker Desktop  —  программный продукт, совместимый с системами Mac и Windows, в котором содержатся такие инструменты, как Docker Engine, Docker CLI client, Docker Compose, Kubernetes и другие, имеется также доступ к Docker Hub.
  • Демон Docker  —  утилита для генерирования образов Docker и манипулирования ими путем обработки команд на стороне клиента. Применяется фактически как операционный центр развертывания Docker и запускается в системе, называемой хостом Docker.
  • Реестр Docker  —  легко масштабируемое решение по хранению и распространению образов Docker для работы в Open Source модели. В реестре с помощью инструмента контроля версий git отслеживаются сохраняемые в репозиториях версии образа, для их различения применяется тегирование.

1.4. Преимущества Docker

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

  • Доработанная, беспроблемная переносимость контейнеров Docker, они запускаются без изменений в любой среде: рабочего стола, ЦОД и облачной.
  • Еще меньше вес, детализированнее обновления. Несколько процессов объединяются в одном контейнере. Так создается приложение, выполнение которого продолжается, пока одна из его частей отключена для обновления или ремонта.
  • Автоматическое создание контейнера Docker из исходного кода приложения.
  • Контроль версий контейнера Docker: отслеживаются версии образа контейнера, кто и как создал версию, выполняется откат к предыдущим версиям, даже подгружаются отдельно изменения между имеющейся версией и новой.
  • Переиспользование контейнеров, имеющиеся контейнеры применяются как базовые образы  —  фактически шаблоны для создания новых контейнеров.
  • Общие библиотеки контейнеров, разработчики получают доступ к Open Source реестру с тысячами пользовательских контейнеров.

2. Всесторонний обзор Kubernetes

2.1. Что такое Kubernetes?

Kubernetes, или K8s,  —  это Open Source платформа оркестрации систем со средами запуска контейнеров в кластере сетевых ресурсов, используемая независимо либо в сочетании с другими инструментами контейнеризации, например Docker.

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

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

Чтобы снизить сетевые накладные расходы и оптимизировать расход ресурсов, в Kubernetes предлагается практичное решение для контролирования группы контейнеров на одной машине, например набор контейнеров, в котором содержатся сервер приложений, кеш Redis и база данных SQL. В Docker же в каждом контейнере запускается один процесс.

А еще Kubernetes  —  важный инструмент построения надежных конвейеров непрерывной интеграции и непрерывного развертывания. Командами DevOps особенно ценится его широкий функционал: обнаружение служб, балансировка нагрузки внутри кластера, автоматические изменения в развертывании и откаты, самовосстановление контейнеров при сбое, управление конфигурацией.

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

2.2. Оркестрация контейнеров с Kubernetes

Из-за роста числа контейнеров  —  в организациях их сотни или даже тысячи  —  командам разработчиков необходимо автоматизировать развертывание, масштабирование, доступность контейнеров и связывание их в сети. Так появился рынок оркестрации контейнеров.

Хотя изначально были популярны другие инструменты оркестрации контейнеров, такие как Docker Swarm и Apache Mesos, самым распространенным быстро стал Kubernetes. В какой-то момент у этого проекта отмечался самый быстрый рост в истории ПО с открытым исходным кодом.

Разработчики выбрали его за обширный функционал, большую и постоянно растущую экосистему вспомогательных Open Source инструментов, работу с различными поставщиками облачных сервисов. Полностью управляемые Kubernetes-сервисы популярны в отрасли: они предлагаются всеми основными поставщиками общедоступной облачной среды, включая Amazon Web Services, Google Cloud, IBM Cloud и Microsoft Azure.

2.3. Функционал Kubernetes

В Kubernetes на протяжении всего жизненного цикла приложений планируются и автоматизируются связанные с контейнерами задачи.

  • Развертывание контейнеров  —  их количество указывается  —  в конкретном хосте, поддержание их в желаемом состоянии.
  • Изменения в развертывании, их инициирование, приостановка, возобновление или откат.
  • Обнаружение служб, автоматический доступ к контейнеру из интернета или других контейнеров по DNS-имени или IP-адресу.
  • Выделение ресурсов хранения, при необходимости подключается постоянное локальное или облачное хранилище для контейнеров.
  • Балансировка нагрузки: чтобы поддержать производительность и стабильность, рабочая нагрузка распределяется по сети в соответствии с пользовательскими метриками или загрузкой ЦП.
  • Автомасштабирование: чтобы при всплесках трафика обработать дополнительную рабочую нагрузку, поднимаются новые кластеры.
  • Самовосстановление для высокой доступности, во избежание простоев при сбое контейнера он автоматически перезапускается или заменяется. При несоответствии требованиям проверки работоспособности контейнеры убираются.

2.4. Преимущества Kubernetes

  • Автоматизированные операции: здесь имеются утилита командной строки kubectl для эффективного  —  за счет применения автоматизации  —  управления операциями контейнера и мощный API. Шаблоном контроллера гарантируется, что приложения/контейнеры запускаются точно в соответствии с их спецификациями.
  • Абстракция инфраструктуры: выделенные от вашего имени ресурсы остаются за Kubernetes, разработчики же концентрируются на создании кода приложения, не отвлекаясь на базовую инфраструктуру вычислений, сети́ или хранилища.
  • Отслеживание работоспособности служб: рабочая среда постоянно отслеживается и сопоставляется с целевой конфигурацией, автоматически оценивается работоспособность служб. Доступ к ним предоставляется, только когда они готовы к работе, в случае сбоя или остановки инициируются перезапуски контейнера.

3. Различия между Docker и Kubernetes

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

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

4. Зачем дата-сайентистам Kubernetes и Docker?

4.1. Зачем дата-сайентистам Docker?

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

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

4.2. Зачем дата-сайентистам изучать Docker при наличии команды DevOps?

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

4.3. Преимущества Docker для дата-сайентистов

  1. Согласованность и воспроизводимость: весь проект с кодом, зависимостями, средой упаковывается и помещается в один контейнер, чем гарантируется согласованное выполнение в разных машинах и средах без проблем с совместимостью и контролем версий. С контейнерами Docker работа воспроизводится точно такой, какой она была в любой момент времени, а значит, делиться ею с другими и просматривать прошлые результаты здесь проще.
  2. Простота развертывания в разных средах, будь то локальный компьютер или облако. Инкапсулированный в контейнере проект развертывается с минимальной конфигурацией, без проблем зависимостей или совместимости.
  3. Совместная работа команды над одним проектом облегчается: он упаковывается в контейнер с одной для всех рабочей средой, чем упрощается обмен кодом и воспроизведение результатов.
  4. Скорость: легкие контейнеры Docker запускаются быстро, поэтому код выполняется и тестируется намного скорее, чем традиционными методами, а значит  —  рабочий процесс эффективнее, время итераций меньше.

4.4. Зачем дата-сайентистам Kubernetes?

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

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

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

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

Читайте также:

Читайте нас в TelegramVK и Дзен


Перевод статьи Youssef Hosni: Unlocking the Power of Containerization: Why Data Scientists Need to Learn Dockers and Kubernetes?

Предыдущая статьяКак определить и протестировать SLO
Следующая статьяИспользование Kubernetes для развертывания 3-уровневой инфраструктуры контейнерных приложений