В статье рассмотрим две популярные технологии абстракции физического оборудования: виртуализацию и контейнеризацию. Представим общий обзор каждой из них, а также поговорим об отличиях виртуализации и контейнеризации.
Главной составляющей этой технологии является виртуальная машина (ВМ). ВМ представляет собой изолированную программную среду, которая эмулирует аппаратное обеспечение определенной платформы. То есть ВМ является абстракцией, позволяя превращать один реальный сервер в несколько виртуальных.
Создание ВМ имеет смысл при необходимости управления всеми настройками ядра ОС. Это дает возможность избегать конфликтов ядра с аппаратным обеспечением, поддерживать больше функций, чем предусматривает определенная сборка, оптимизировать и устанавливать системы с модифицированным ядром.
Контейнеры работают по-другому: для установки и запуска платформы контейнеризации нужно уже установленное ядро операционной системы (в том числе виртуальной). ОС выделяет системные ресурсы под контейнеры, внутри которых содержится полностью настроенная среда для развертывания приложений.
Контейнеры так же, как и виртуальные машины, без проблем переносятся между серверами, обеспечивая определенный уровень изоляции. При этом для успешного развертывания достаточно, чтобы совпадала база ядра (например, Linux, Windows или macOS), а конкретные версии ОС не имеют значения. Таким образом, контейнеры являются связующим звеном между уровнем системного ядра и уровнем приложений.
Некоторые, особенно новички в IT, нередко ставят вопрос ребром: виртуализация vs контейнеризация. Но противопоставлять эти технологии не стоит, потому что на самом деле они дополняют друг друга. Давайте выясним, в чем разница между виртуализацией и контейнеризацией, а также выявим их сходства. Для этого рассмотрим, как обе технологии выполняют определенные функции.
Виртуализация дает возможность полностью изолировать ВМ от остальной части сервера, в том числе и от других ВМ. Поэтому виртуальные машины полезно разворачивать при необходимости отделения собственных приложений от остальных, расположенных на тех же серверах или в пределах кластера. ВМ повышают уровень сетевой безопасности.
Контейнеризация также обеспечивает определенный уровень изоляции, но контейнеры не столь надежны в плане пограничной безопасности в сравнении с ВМ. Однако существуют решения, которые позволяют выполнять изоляцию отдельных контейнеров в ВМ — одно из таких решений называется Hyper-V.
ВМ фактически представляет полноценную ОС с ядром, что удобно, однако накладывает большие требования в плане выделяемых аппаратных ресурсов (объемы оперативной памяти и хранилища, процессорные мощности).
При контейнеризации задействуется лишь малая часть ресурсов системы, особенно с учетом адаптации контейнеров. При формировании образов (Image) в гипервизоре (платформа контейнеризации — например, Docker) создается минимально необходимая программная среда, которая гарантированно позволит запускать контейнеры под ОС с определенным ядром. Таким образом, контейнеризация значительно более экономична в плане выделения системных ресурсов.
При виртуализации придется загружать и устанавливать обновления ОС на каждой ВМ. Для инсталляции очередной версии ОС потребуется выполнить обновление ВМ, а в ряде случае создать новую ВМ. Понятно, что это влечет за собой немалые временные затраты, тем более если развернуто много ВМ.
С контейнерами ситуация похожая. Сначала изменяют файл (он называется Dockerfile), содержащий информацию об образе (Image). Там меняют строчки, в которых содержится указание на используемую версию ОС. Далее образ пересобирается и отправляется в реестр. Но это не всё: затем образ требует повторного развертывания. Для этого используют оркестраторы — платформы для управления контейнерами и масштабирования. Программы оркестрации (наиболее известные — Kubernetes и Docker Swarm) позволяют автоматизировать эти процедуры, однако перед этим разработчику придется их установить и освоить.
kube
Чтобы развернуть одну ВМ, подойдут инструменты Windows (или Linux), а также инструментарий упомянутого выше Hyper-V. Однако если ВМ две или более, удобнее использовать решения наподобие PowerShell.
Одиночные контейнеры из образов развертывают через гипервизор (тот же Docker), но если планируется массовое развертывание, не обойтись без платформы оркестрации. Таким образом, по механизмам развертывания виртуализация и контейнеризация похожи: при развертывании разного количества объектов задействуются разные инструменты.
При виртуализации используются VHD, если нужно организовать локальное хранилище для одной ВМ. Если же ВМ или серверов несколько, задействуют протокол SMB для общего доступа к файлам.
Гипервизоры для создания контейнеров имеют собственные инструменты для хранения данных. Например, в Docker есть локальный репозиторий Registry, при помощи которого создают приватные хранилища и отслеживают версии образов. Также существует и публичный репозиторий Docker Hub, который также используют для интеграции с GitHub. Похожий инструментарий предлагают и платформы оркестрации: например, Kubernetes организует файловые хранилища на мощностях Azure.
Docker Hub закрыл доступ к своему сервису пользователям из России. Мы подготовили бесплатный прокси, который возобновляет этот доступ.
Для балансировки нагрузки ВМ их перемещают между серверами и даже кластерами, выбирая кластер с лучшей отказоустойчивостью.
Контейнеры балансируются иначе. Перемещению они не поддаются, однако оркестраторы обеспечивают автоматический запуск или прекращение работы отдельных контейнеров либо целых групп. За счет этого достигается гибкое распределение нагрузки между узлами кластера.
Проблема отказов также решается похожим образом. В случае отказа отдельной ВМ нетрудно перенести эту ВМ на другой сервер, перезапустив там ОС.
При неполадках сервера, на котором развернута платформа контейнеризации, можно оперативно пересоздать контейнеры на другом сервере при помощи оркестратора.
К преимуществам виртуализации отнесем следующие особенности:
Есть у виртуализации и недостатки:
У контейнеризации свои преимущества:
Из минусов контейнеризации отметим:
Выгодные тарифы на облако в Timeweb Cloud
Изучив особенности виртуализации и контейнеризации, сделаем логичный вывод: каждая технология подходит для решения определенных задач. Контейнеры быстрые и производительные, потребляют мало аппаратных ресурсов и оптимальны для разработчиков, занимающихся тестированием микросервисной архитектуры и компонентов приложений. Виртуальные машины — полноценные ОС, подходящие для безопасной работы с корпоративным софтом. Поэтому рассмотренные технологии не конкурируют, а дополняют друг друга.
Очень больно авторизовываться, чтобы начать комментировать...