Наука о данных неуклонно развивается, и специалистам важно следить за новейшими инструментами и технологиями. С появлением Docker и Kubernetes разработка и развертывание программных продуктов изменились. Но что это за инструменты и зачем они дата-сайентистам?
Представляем всесторонний обзор Docker и Kubernetes с описанием их преимуществ и функционала. Чем отличаются эти две технологии и зачем их изучать дата-сайентистам? К концу статьи у вас будет четкое понимание роли контейнеризации и оркестрации в более эффективной работе дата-сайентиста.
Содержание
- Всесторонний обзор Docker
1.1. Что такое Docker?
1.2. Что такое «контейнер»?
1.3. Инструменты и терминология Docker.
1.4. Преимущества Docker. - Всесторонний обзор Kubernetes
2.1. Что такое Kubernetes?
2.2. Оркестрация контейнеров с Kubernetes.
2.3. Функционал Kubernetes.
2.4. Преимущества Kubernetes. - Разница между Docker и Kubernetes
- Зачем дата-сайентистам 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 для дата-сайентистов
- Согласованность и воспроизводимость: весь проект с кодом, зависимостями, средой упаковывается и помещается в один контейнер, чем гарантируется согласованное выполнение в разных машинах и средах без проблем с совместимостью и контролем версий. С контейнерами Docker работа воспроизводится точно такой, какой она была в любой момент времени, а значит, делиться ею с другими и просматривать прошлые результаты здесь проще.
- Простота развертывания в разных средах, будь то локальный компьютер или облако. Инкапсулированный в контейнере проект развертывается с минимальной конфигурацией, без проблем зависимостей или совместимости.
- Совместная работа команды над одним проектом облегчается: он упаковывается в контейнер с одной для всех рабочей средой, чем упрощается обмен кодом и воспроизведение результатов.
- Скорость: легкие контейнеры Docker запускаются быстро, поэтому код выполняется и тестируется намного скорее, чем традиционными методами, а значит — рабочий процесс эффективнее, время итераций меньше.
4.4. Зачем дата-сайентистам Kubernetes?
Общее представление о таких технологиях контейнеризации и оркестрации, как Kubernetes, полезно для взаимодействия с DevOps- и инфраструктурными командами, понимания их требований по развертыванию моделей и приложений в продакшене. Как итог — эффективнее рабочий процесс, быстрее развертывание.
В Kubernetes легко, надежно, масштабируемо, автоматизированно развертываются и контролируются модели и приложения, отчего упрощается обработка больших объемов запросов и данных.
Чтобы сложные модели и приложения машинного обучения выполнялись эффективно, часто требуется больше ресурсов инфраструктуры. В Kubernetes эти ресурсы эффективно контролируются, сложные модели и приложения масштабируемо выполняются без ограничений инфраструктуры.
В целом, хотя дата-сайентистам не обязательно становиться экспертами по Kubernetes, общее представление об этой технологии полезно для эффективного взаимодействия с другими командами, развертывания моделей и приложений.
Читайте также:
- Собеседование в области науки о данных: 7 распространенных ошибок
- Kubernetes: сэкономьте до 50% с вытесняемыми объектами
- Как распознавать объекты 600 классов, используя 9 миллионов изображений из Open Images
Читайте нас в Telegram, VK и Дзен
Перевод статьи Youssef Hosni: Unlocking the Power of Containerization: Why Data Scientists Need to Learn Dockers and Kubernetes?