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

Виртуализация и контейнеризация: обзор технологий и в чем разница

Роман Андреев
Роман Андреев
Технический писатель
23 ноября 2022 г.
5197
8 минут чтения
Средний рейтинг статьи: 5

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

Балансировщики Нагрузки Application (3)

Что такое виртуализация

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

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

Что такое контейнеризация

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

Контейнеры так же, как и виртуальные машины, без проблем переносятся между серверами, обеспечивая определенный уровень изоляции. При этом для успешного развертывания достаточно, чтобы совпадала база ядра (например, Linux, Windows или macOS), а конкретные версии ОС не имеют значения. Таким образом, контейнеры являются связующим звеном между уровнем системного ядра и уровнем приложений.

Чем отличается контейнеризация от виртуализации

Некоторые, особенно новички в IT, нередко ставят вопрос ребром: виртуализация vs контейнеризация. Но противопоставлять эти технологии не стоит, потому что на самом деле они дополняют друг друга. Давайте выясним, в чем разница между виртуализацией и контейнеризацией, а также выявим их сходства. Для этого рассмотрим, как обе технологии выполняют определенные функции.

Изоляция и обеспечение безопасности

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

Контейнеризация также обеспечивает определенный уровень изоляции, но контейнеры не столь надежны в плане пограничной безопасности в сравнении с ВМ. Однако существуют решения, которые позволяют выполнять изоляцию отдельных контейнеров в ВМ — одно из таких решений называется Hyper-V.

Работа с операционной системой

ВМ фактически представляет полноценную ОС с ядром, что удобно, однако накладывает большие требования в плане выделяемых аппаратных ресурсов (объемы оперативной памяти и хранилища, процессорные мощности).

При контейнеризации задействуется лишь малая часть ресурсов системы, особенно с учетом адаптации контейнеров. При формировании образов (Image) в гипервизоре (платформа контейнеризации — например, Docker) создается минимально необходимая программная среда, которая гарантированно позволит запускать контейнеры под ОС с определенным ядром. Таким образом, контейнеризация значительно более экономична в плане выделения системных ресурсов.

Обновления ОС

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

С контейнерами ситуация похожая. Сначала изменяют файл (он называется Dockerfile), содержащий информацию об образе (Image). Там меняют строчки, в которых содержится указание на используемую версию ОС. Далее образ пересобирается и отправляется в реестр. Но это не всё: затем образ требует повторного развертывания. Для этого используют оркестраторы — платформы для управления контейнерами и масштабирования. Программы оркестрации (наиболее известные — Kubernetes и Docker Swarm) позволяют автоматизировать эти процедуры, однако перед этим разработчику придется их установить и освоить.

Механизмы развертывания

Чтобы развернуть одну ВМ, подойдут инструменты Windows (или Linux), а также инструментарий упомянутого выше Hyper-V. Однако если ВМ две или более, удобнее использовать решения наподобие PowerShell.

Одиночные контейнеры из образов развертывают через гипервизор (тот же Docker), но если планируется массовое развертывание, не обойтись без платформы оркестрации. Таким образом, по механизмам развертывания виртуализация и контейнеризация похожи: при развертывании разного количества объектов задействуются разные инструменты.

Особенности хранения данных

При виртуализации используются VHD, если нужно организовать локальное хранилище для одной ВМ. Если же ВМ или серверов несколько, задействуют протокол SMB для общего доступа к файлам.

Гипервизоры для создания контейнеров имеют собственные инструменты для хранения данных. Например, в Docker есть локальный репозиторий Registry, при помощи которого создают приватные хранилища и отслеживают версии образов. Также существует и публичный репозиторий Docker Hub, который также используют для интеграции с GitHub. Похожий инструментарий предлагают и платформы оркестрации: например, Kubernetes организует файловые хранилища на мощностях Azure.

Распределение нагрузки

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

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

Отказоустойчивость

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

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

Плюсы и минусы виртуализации

К преимуществам виртуализации отнесем следующие особенности:

  • Надежная изоляция. За счет логической изоляции ВМ сбои и отказы одной ВМ не влияют на работоспособность других, расположенных на том же сервере. Кроме того, ВМ обеспечивают достаточный уровень сетевой безопасности: если заражена отдельная ВМ, изолированность каждой машины исключает заражение остальных.
  • Оптимизация ресурсов. На одном сервере можно развернуть несколько ВМ, что позволяет экономить на покупке дополнительных серверных мощностей. Это также облегчает формирование кластеров в ЦОД.
  • Гибкость и балансировка нагрузки. За счет того, что ВМ легко переносятся, нетрудно повысить производительность всего кластера и упростить их обслуживание. Также ВМ копируются с последующим восстановлением из копии. Кроме того, хотя разным ВМ требуются разные ОС, ядро может быть любым. Поэтому на одном сервере без проблем соседствуют ВМ на Linux, Windows, macOS.

Есть у виртуализации и недостатки:

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

Плюсы и минусы контейнеризации

У контейнеризации свои преимущества:

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

Из минусов контейнеризации отметим:

  • Проблемы совместимости. Контейнеры, созданные в одном гипервизоре (например, Docker), не всегда подходят для работы с остальными. Также возникают проблемы и с оркестраторами, которые могут не поддерживать определенные инструменты (например, Docker Swarm вряд ли будет корректно работать с OpenShift, в отличие от Kubernetes). Поэтому разработчикам, использующим контейнеризацию, придется подумать над инструментарием, который они будут задействовать в работе.
  • Ограниченный жизненный цикл. Постоянное хранение контейнеров возможно, однако для этого нужно использовать специальные инструменты (например, Data Volumes от Docker). В остальном же учитывайте, что с уничтожением контейнера пропадает и вся информация, которая связана с ним. Поэтому нужно заранее предусмотреть, куда будут копироваться данные.
  • Размер приложений. Контейнеры предназначены для работы на уровне микросервисов и отдельных компонентов приложений. Поэтому тяжеловесные контейнеры, содержащие, например, корпоративные продукты с полным функционалом, вызывают проблемы при развертывании и в работе.

Вывод

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

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону