Kubernetes и Docker для дата-сайентистов

Kubernetes и Docker для дата-сайентистов

https://t.me/ai_machinelearning_big_data

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

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


Содержание

  1. Всесторонний обзор Docker
  2. 1.1. Что такое Docker?
  3. 1.2. Что такое «контейнер»?
  4. 1.3. Инструменты и терминология Docker.
  5. 1.4. Преимущества Docker.
  6. Всесторонний обзор Kubernetes
  7. 2.1. Что такое Kubernetes?
  8. 2.2. Оркестрация контейнеров с Kubernetes.
  9. 2.3. Функционал Kubernetes.
  10. 2.4. Преимущества Kubernetes.
  11. Разница между Docker и Kubernetes
  12. Зачем дата-сайентистам Kubernetes и Docker?
  13. 4.1. Зачем дата-сайентистам Docker?
  14. 4.2. Зачем дата-сайентистам изучать Docker при наличии команды DevOps?
  15. 4.3. Преимущества Docker для дата-сайентистов.
  16. 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 — это портативная расширяемая платформа с открытым исходным кодом для управления контейнеризованными рабочими нагрузками и сервисами, которая облегчает как декларативную настройку, так и автоматизацию. У платформы есть большая, быстро растущая экосистема. Сервисы, поддержка и инструменты Kubernetes широко доступны.

Изначально 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, общее представление об этой технологии полезно для эффективного взаимодействия с другими командами, развертывания моделей и приложений.

Источник



Report Page