Контейнеры

menu icon

Контейнеры

В данном руководстве рассказано о важности контейнеров для облачных вычислений, их основных преимуществах и новой экосистеме связанных технологий, включая Docker, Kubernetes, Istio и Knative.

Что такое контейнеры?

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

Для этого контейнеры используют разновидность виртуализации операционной системы (ОС), в которой используются системные функции (в случае ядра Linux это пространства имен и примитивы cgroup) для изоляции процессов и управления объемом ресурсов процессора, оперативной памяти и диска, выделяемого этим процессам.

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

Первые разновидности контейнеров возникли несколько десятилетий назад (FreeBSD Jails и AIX Workload Partitions), но большинство современных разработчиков считают началом широкого распространения контейнеров появление Docker в 2013 году.

В чем отличие контейнеров от виртуальных машин

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

Вместо виртуализации базового оборудования контейнеры виртуализируют операционную систему (обычно Linux), т. е. каждый отдельный контейнер содержит только приложение, его библиотеки и зависимости. Легкость, высокая скорость и переносимость контейнеров объясняется именно отсутствием гостевой ОС.

Более подробная информация приведена в статье «Сравнение контейнеров и виртуальных машин».

Преимущества контейнеров

Основным преимуществом контейнеров, особенно в сравнении с виртуальными машинами, является уровень абстракции, который обеспечивает их простоту и переносимость.

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

В недавно проведенном опросе IBM (PDF, 1,4 МБ) разработчики и ИТ-руководители отметили множество других преимуществ использования контейнеров. Изучите их с помощью интерактивного инструмента ниже:

Загрузить полный текст отчета«Контейнеры на предприятии» (PDF, 1,4 МБ)

Практическое применение контейнеров

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

  • Микросервисы: благодаря своему небольшому размеру и простоте контейнеры идеально подходят для микросервисных архитектур, в которых приложения строятся из множества слабосвязанных сервисов меньшего размера с возможностью независимого развертывания.
  • DevOps: сочетание микросервисов как архитектуры и контейнеров как платформы может служить единой платформой для многих команд, внедряющих DevOps в качестве методологии разработки, доставки и выполнения ПО.
  • Гибридное мультиоблако: одинаково эффективная работа в любой среде — на портативных компьютерах, локально или в облаке — делает контейнеры идеальной базовой архитектурой для стратегий гибридного облака и мультиоблака, основанных на применении нескольких общедоступных облачных сред в сочетании с корпоративным ЦОД.
  • Модернизация и миграция приложений: один из самых распространенных подходов к модернизации приложений начинается с контейнеризации кода для последующей миграции в облако.

Контейнеризация

Контейнеризация — это особый подход к проектированию и упаковке программного обеспечения на основе контейнеров.

Процесс контейнеризации включает в себя упаковку приложения вместе с необходимыми переменными среды, файлами конфигурации, библиотеками и зависимостями. Результатом является образ контейнеров, который может быть запущен на контейнерной платформе. Более подробно об этом рассказывается в видеоролике «Контейнеризация простыми словами» (08:09):

Управление контейнерами с помощью Kubernetes

По мере освоения контейнеров — зачастую в составе современных, облачных архитектур — компании столкнулись со следующей проблемой: простота отдельных контейнеров стала противоречить сложным процедурам управления сотнями (и даже тысячами) контейнеров в распределенной системе.

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

  • Предоставление ресурсов
  • Резервирование
  • Мониторинг состояния
  • Выделение ресурсов
  • Масштабирование и распределение нагрузки
  • Перемещение между физическими хостами

Для выполнения этих задач было разработано множество платформ оркестрации контейнеров (например, Apache Mesos, Nomad и Docker Swarm), однако наибольшую популярность завоевала платформа Kubernetes — проект с открытым исходным кодом, представленный Google в 2014 году. На сегодняшний день большинство организаций в отрасли используют именно Kubernetes в качестве стандарта.

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

В следующем видеоролике Сай Веннам подробно рассказывает обо всех тонкостях Kubernetes (10:59):

 

В настоящее время обслуживанием Kubernetes занимается отраслевая группа Cloud Native Computing Foundation (CNCF), не привязанная к определенному поставщику, под покровительством Linux Foundation.

Istio, Knative и расширяющаяся экосистема контейнеров

С ростом популярности контейнеров как способа упаковки и запуска приложений развивается и экосистема инструментов и проектов, усиливающих и расширяющих возможности использования контейнеров в рабочих средах. Помимо Kubernetes, экосистема контейнеров включает еще два популярных проекта: Istio и Knative.

Istio

По мере расширения использования контейнеров для проектирования и выполнения микросервисных архитектур все более актуальными становятся вопросы управления не отдельными контейнерами, а огромным количеством связанных и взаимодействующих между собой небольших сервисов (так называемой «сервисной сетки»). Проект Istio был создан с целью упростить разработчикам решение проблем, связанных с обнаружением, трафиком, мониторингом, безопасностью и пр. Видео с подробным объяснением принципа работы Istio: «Что такое Istio?» (05:06):

 

Knative

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

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

Более подробно о проекте Knative рассказывается в видеоролике «Что такое Knative?» (07:58):

Контейнеры и IBM Cloud

Контейнерные решения IBM Cloud, разработанные на основе технологий с открытым исходным кодом, упрощают и ускоряют внедрение облака. Воспользуйтесь инструментами непрерывной интеграции и доставки (CI/CD) для разработки контейнеризованных приложений. Координируйте работу контейнеров с помощью управляемых услуг Red Hat OpenShift или Kubernetes. Модернизируйте имеющиеся приложения, используя контейнеризованное промежуточное ПО IBM и компоненты с открытым исходным кодом в IBM Cloud Paks.

Узнайте больше о контейнерах в IBM Cloud.

Зарегистрируйтесь для получения IBMid и создайте учетную запись IBM Cloud.