ADG Оставить заявку
Блог Инфраструктура 4 мин чтения

Windows Server 1709 в production: Process Isolation работает, Hyper-V Isolation остаётся для multi-tenant

Развернули первый Windows-контейнер с .NET Framework на 1709 у заказчика. Process Isolation даёт старт как у Linux. Hyper-V Isolation - только там где реально нужна изоляция ядра.

Контекст момента

Windows Server 1709 в production: Process Isolation для контейнеров и совместимость с Linux-контейнерами через LCOW (экспериментально)

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

Контекст: заказчик и задача

Среда у заказчика - Hyper-V кластер, несколько Windows Server 2016 узлов, всё на managed. Приложение - внутренняя система документооборота на ASP.NET 4.6, полный .NET Framework, миграция с IIS-on-bare-VM на контейнеры шла у них уже несколько месяцев. Образ windowsservercore:2016 был, pipeline был, просто работал через Hyper-V Isolation - потому что в 2016 другого варианта для production нормально не было.

Задача: перейти на 1709-узел, переключить контейнеры в Process Isolation, сравнить поведение.

Что пришлось сделать перед переходом

Добавили в кластер один узел с Windows Server 1709 Server Core. Образ контейнера пересобрали на базе windowsservercore:1709 - это обязательно, смешивать версию хоста и версию образа в Process Isolation нельзя. Приложение само по себе переживало пересборку без изменений в коде: ASP.NET 4.6 на windowsservercore:1709 работает нормально, убедились ещё на стенде в октябре.

Dockerfile поменяли в одном месте - базовый образ. Пайплайн CI ничего не заметил.

Отдельно проверили что в 1709-образе не потеряли ничего критичного для приложения: регистрация COM-компонентов, MSMQ, кастомные перформанс-каунтеры. MSMQ внутри контейнера - это отдельная история, пришлось покопаться, но в итоге завелось.

Process Isolation: что реально изменилось

Время старта контейнера. Это первое что заметно без замеров. С Hyper-V Isolation запуск контейнера занимал несколько десятков секунд - там поднимается облегчённая Hyper-V VM, это не мгновенно. С Process Isolation - секунды. Не «чуть быстрее», а принципиально другое ощущение: сравнимо с тем как стартуют Linux-контейнеры.

Накладные расходы. Process Isolation не гонит отдельный kernel - контейнеры делят ядро хоста. Потребление памяти на контейнер ниже, планировщик работает напрямую. На практике это означает что на том же железе можно разместить больше контейнеров, или те же контейнеры получают больше ресурсов.

Изоляция. Вот тут надо говорить честно: Process Isolation в Windows - это изоляция через Job Objects и namespace-механизмы, она слабее чем Hyper-V Isolation. Для single-tenant среды - нормально. Если на одном хосте должны сосуществовать контейнеры разных клиентов - Hyper-V Isolation остаётся правильным выбором, и это не временное ограничение, это осознанная архитектурная граница.

У заказчика single-tenant, поэтому Process Isolation подошёл без оговорок.

LCOW: потрогали, не в production

В 1709 появилась экспериментальная фича - Linux Containers on Windows (LCOW). Это возможность запускать Linux-контейнеры прямо на Windows-хосте через облегчённую Linux-VM, без отдельной Linux-машины. Включается флагом в Docker daemon, работает через Hyper-V.

Потрогали на стенде отдельно, в production не тащили - статус экспериментальный не для красоты: периодические падения при запуске, не все Docker-команды отрабатывают корректно, документация местами опережает реализацию. Для демонстрации на внутреннем митинге сгодилось, для реальной нагрузки - нет.

Интересно как концепция: если LCOW дойдёт до стабильного состояния, это снимет потребность держать отдельные Linux-узлы для смешанных нагрузок. Но пока это лабораторный инструмент.

Что с Hyper-V Isolation теперь

Мы не выключали Hyper-V Isolation как опцию. На том же 1709-узле можно явно указать --isolation=hyperv и контейнер запустится через Hyper-V слой. Это полезно для тех случаев когда нужен другой образ (например, 2016-based контейнер на 1709-хосте) или когда уровень изоляции важнее производительности старта.

Фактически получается: Process Isolation - режим по умолчанию для доверенных нагрузок на 1709-хосте с 1709-образами. Hyper-V Isolation - явно указывать там где нужна гарантия изоляции ядра. Это разумное разделение, и оно работает.

Итог

Переход прошёл без сюрпризов. Основное наблюдение: Process Isolation в 1709 - это не «более быстрый Hyper-V Isolation», это другая точка на шкале компромиссов. Скорость и плотность лучше, изоляция слабее. Для нашего заказчика с single-tenant нагрузкой это правильный выбор.

Hyper-V Isolation никуда не делась и остаётся инструментом для multi-tenant и для смешанных версий образов на одном хосте. Теперь у Windows-контейнеров есть оба режима, оба работают, и можно выбирать осознанно.

Контакт

Нужна такая же инженерная работа?

Опишите задачу и контекст. Ответим в течение рабочего дня, при необходимости подпишем NDA.