Различия между контейнерами и виртуальными машинами

Завершено

Администратору Contoso Windows Server необходимо определить, какие рабочие нагрузки и сценарии подходят для виртуальных машин и которые подходят для контейнеров. Они будут оценивать характеристики рабочих нагрузок виртуальных машин и контейнеров, сценариев, где их можно использовать, и в каких случаях рабочие нагрузки контейнеров можно использовать для повышения эффективности.

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

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

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

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

Сходство и различия

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

Компонент Виртуальная машина Контейнер
Изоляция Обеспечивает полную изоляцию от ОС узла и других виртуальных машин. Обеспечивает упрощенную изоляцию от узла и других контейнеров.
ОС Содержит полноценную ОС, включая ядро. Запускает часть ОС в пользовательском режиме.
Совместимость с гостевой системой В виртуальной машине может выполняться любая поддерживаемая ОС. Для контейнеров Windows требуются соответствующие версии узлов и контейнеров. (Дополнительные сведения и альтернативные варианты см. в режиме изоляции)
Развертывание Развертывается с помощью диспетчера Hyper-V или других средств управления виртуальными машинами. Развертывается и управляется с помощью Docker или другой среды выполнения контейнера. Несколько контейнеров можно развернуть с помощью оркестратора, например Kubernetes.
Постоянное хранилище Использует виртуальный жесткий диск или общий файловый ресурс SMB. Данные не сохраняются, если контейнер больше не существует. Чтобы сохранить данные в контейнере с Windows Server, необходимо использовать постоянное хранилище.
Балансировка нагрузки и высокий уровень доступности Использует отказоустойчивый кластер Windows или подсистему балансировки нагрузки Windows для перемещения виртуальных машин по мере необходимости и поддержки более высокого тома. Использует оркестратор контейнеров для автоматического запуска и остановки контейнеров, автоматического масштабирования и поддержки дополнительного трафика.
Сеть Использует виртуальные сетевые адаптеры. Различные параметры сети доступны в зависимости от сценария. По умолчанию используется сеть преобразования сетевых адресов (NAT), которая использует внутренний коммутатор и сопоставляет порты с узла на контейнер.

Примечание.

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

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

В общем плане контейнеры имеют следующие достоинства:

  • Требуют относительно мало ресурсов. Они менее ресурсоемки, чем виртуальные машины.

  • Быстро запускаются. На запуск контейнера требуется примерно столько же времени, сколько и на запуск нового процесса.

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

  • Мобильность. Контейнеры ведут себя одинаково независимо от среды, которую они выполняют. Контейнер будет иметь зависимости для работы приложения. Это позволяет контейнеру выполнять то же самое между разработчиками, тестами и рабочей средой, а также между локальной средой и облаком.

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

  • Компьютеры обеспечивают максимальную степень изоляции. Степень изоляция снижается в следующем порядке: виртуальные машины, контейнеры, процессы.

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

  • Оборудование, ядро и системные ресурсы (например, файловая система) используются совместно следующим образом:

    • Виртуальные машины имеют только общее оборудование.

    • Контейнеры имеют общее оборудование и ядро (за исключением контейнеров Windows Hyper-V, которые не имеют общего доступа к ядру).

    • Процессы имеют общее оборудование, ядро и системные ресурсы.

    • Компьютеры не имеют общих ресурсов.

Схема сравнения изоляции и эффективности между компьютерами, виртуальными машинами, контейнерами и процессами.

Совет

Для постоянного хранения можно использовать подключение с привязкой, которое позволяет подключить расположение на локальном компьютере. Файлы в этом расположении будут доступны при перезапуске контейнера или если несколько контейнеров должны иметь общий доступ к файлам. Если контейнер должен выполняться на нескольких компьютерах и иметь доступ к одним и тем же файлам, вместо этого следует использовать именованный том или подключение SMB.

Оркестраторы, такие как Kubernetes, имеют собственную реализацию постоянного хранилища.

Внимание

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

Когда выбрать виртуальную машину

Используйте виртуальную машину в следующих случаях:

  • Вам необходимо управлять несколькими операционными системами.

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

  • Вам необходима среда с возможностью постоянного хранения изменений. Пример. Базы данных не являются хорошими кандидатами на выполнение в контейнерах.

  • Вам требуется полная изоляция и максимальная безопасность.

Когда выбрать контейнер

Используйте контейнер в следующих случаях:

  • Вам необходим упрощенный пакет приложения, который быстро запускается.

  • Требуется развернуть несколько экземпляров одного приложения— требуется автоматическое масштабирование и (или) горизонтальное масштабирование.

  • Необходимо запустить приложение или процесс, который не является постоянным в зависимости от спроса.

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