Различия между контейнерами и виртуальными машинами
Администратору Contoso Windows Server необходимо определить, какие рабочие нагрузки и сценарии подходят для виртуальных машин и которые подходят для контейнеров. Они будут оценивать характеристики рабочих нагрузок виртуальных машин и контейнеров, сценариев, где их можно использовать, и в каких случаях рабочие нагрузки контейнеров можно использовать для повышения эффективности.
Виртуальные машины и контейнеры
И виртуальные машины, и контейнеры — это технологии виртуализации, обеспечивающие изолированные, переносимые вычислительные среды для приложений и служб.
Виртуальная машина имитирует целый компьютер, включая виртуализированное оборудование, ОС, пользовательский режим и собственный режим ядра. Виртуальные машины довольно гибкие и обеспечивают огромную поддержку приложений; Однако виртуальные машины, как правило, являются большими и используют ресурсы хост-компьютера.
Контейнеры (как описано выше) основаны на ядре операционной системы узла и предоставляют изолированный процесс пользовательского режима для упакованного приложения. Благодаря этому они очень компактны и быстро запускаются. Отличается от виртуальных машин, контейнеры можно легко перемещать из разработки, тестирования в рабочие среды. Тем не менее, так как ОС не совсем одинакова, не все приложения выполняются одинаково (или вообще) в среде контейнера.
Сходство и различия
В приведенной ниже таблице перечислены сходства и различия между возможностями виртуальных машин и контейнеров.
Компонент | Виртуальная машина | Контейнер |
---|---|---|
Изоляция | Обеспечивает полную изоляцию от ОС узла и других виртуальных машин. | Обеспечивает упрощенную изоляцию от узла и других контейнеров. |
ОС | Содержит полноценную ОС, включая ядро. | Запускает часть ОС в пользовательском режиме. |
Совместимость с гостевой системой | В виртуальной машине может выполняться любая поддерживаемая ОС. | Для контейнеров Windows требуются соответствующие версии узлов и контейнеров. (Дополнительные сведения и альтернативные варианты см. в режиме изоляции) |
Развертывание | Развертывается с помощью диспетчера Hyper-V или других средств управления виртуальными машинами. | Развертывается и управляется с помощью Docker или другой среды выполнения контейнера. Несколько контейнеров можно развернуть с помощью оркестратора, например Kubernetes. |
Постоянное хранилище | Использует виртуальный жесткий диск или общий файловый ресурс SMB. | Данные не сохраняются, если контейнер больше не существует. Чтобы сохранить данные в контейнере с Windows Server, необходимо использовать постоянное хранилище. |
Балансировка нагрузки и высокий уровень доступности | Использует отказоустойчивый кластер Windows или подсистему балансировки нагрузки Windows для перемещения виртуальных машин по мере необходимости и поддержки более высокого тома. | Использует оркестратор контейнеров для автоматического запуска и остановки контейнеров, автоматического масштабирования и поддержки дополнительного трафика. |
Сеть | Использует виртуальные сетевые адаптеры. | Различные параметры сети доступны в зависимости от сценария. По умолчанию используется сеть преобразования сетевых адресов (NAT), которая использует внутренний коммутатор и сопоставляет порты с узла на контейнер. |
Примечание.
Контейнеры часто подготавливаются в высокооптимизированной виртуальной машине для обеспечения более высокой степени изоляции и безопасности.
Преимущества контейнеров
В общем плане контейнеры имеют следующие достоинства:
Требуют относительно мало ресурсов. Они менее ресурсоемки, чем виртуальные машины.
Быстро запускаются. На запуск контейнера требуется примерно столько же времени, сколько и на запуск нового процесса.
Повышают плотность серверов. Контейнеры более эффективно используют доступную память, диски и ЦП, чем виртуальные машины. Это уменьшает простои серверов, благодаря чему лучше используются имеющиеся вычислительные ресурсы. Особенно важно это для поставщиков и пользователей облачных служб, так как позволяет снизить затраты.
Мобильность. Контейнеры ведут себя одинаково независимо от среды, которую они выполняют. Контейнер будет иметь зависимости для работы приложения. Это позволяет контейнеру выполнять то же самое между разработчиками, тестами и рабочей средой, а также между локальной средой и облаком.
На приведенном ниже рисунке представлено сравнение возможностей изоляции и эффективности, обеспечиваемых компьютерами, виртуальными машинами, контейнерами и процессами. Из него можно сделать следующие выводы:
Компьютеры обеспечивают максимальную степень изоляции. Степень изоляция снижается в следующем порядке: виртуальные машины, контейнеры, процессы.
Процессы обеспечивают максимальную эффективность и, следовательно, возможную плотность. Эффективность снижается в следующем порядке: контейнеры, виртуальные машины, компьютеры.
Оборудование, ядро и системные ресурсы (например, файловая система) используются совместно следующим образом:
Виртуальные машины имеют только общее оборудование.
Контейнеры имеют общее оборудование и ядро (за исключением контейнеров Windows Hyper-V, которые не имеют общего доступа к ядру).
Процессы имеют общее оборудование, ядро и системные ресурсы.
Компьютеры не имеют общих ресурсов.
Совет
Для постоянного хранения можно использовать подключение с привязкой, которое позволяет подключить расположение на локальном компьютере. Файлы в этом расположении будут доступны при перезапуске контейнера или если несколько контейнеров должны иметь общий доступ к файлам. Если контейнер должен выполняться на нескольких компьютерах и иметь доступ к одним и тем же файлам, вместо этого следует использовать именованный том или подключение SMB.
Оркестраторы, такие как Kubernetes, имеют собственную реализацию постоянного хранилища.
Внимание
Не привязывайте конфиденциальные каталоги подключения, такие как C:\ к ненадежному контейнеру. Это позволит контейнеру изменять файлы на узле, к которым обычно у него нет доступа, из-за чего может возникнуть брешь в системе безопасности. Кроме того, убедитесь, что контейнер будет работать правильно при переходе в другую среду. Это означает, что не следует привязывать контейнер к конкретному диску на определенном узле.
Когда выбрать виртуальную машину
Используйте виртуальную машину в следующих случаях:
Вам необходимо управлять несколькими операционными системами.
Приложению требуются все ресурсы и службы операционной системы, например графический пользовательский интерфейс.
Вам необходима среда с возможностью постоянного хранения изменений. Пример. Базы данных не являются хорошими кандидатами на выполнение в контейнерах.
Вам требуется полная изоляция и максимальная безопасность.
Когда выбрать контейнер
Используйте контейнер в следующих случаях:
Вам необходим упрощенный пакет приложения, который быстро запускается.
Требуется развернуть несколько экземпляров одного приложения— требуется автоматическое масштабирование и (или) горизонтальное масштабирование.
Необходимо запустить приложение или процесс, который не является постоянным в зависимости от спроса.
Вам необходимо развернуть приложение, которое может выполняться на основе любой базовой инфраструктуры.