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

Windows Server 2016 TP4: Nano Server загружается за 5 секунд, IIS в контейнере - перспективно

Тестируем TP4 в лабе: Nano Server занимает 400 МБ против 4 ГБ у Full, грузится за секунды. Пробуем Windows Containers с IIS - работает, но экосистема ещё сырая.

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

Windows Server 2016 Technical Preview 4 добавляет Nano Server и поддержку Windows Containers

Microsoft выкатили четвёртый технический превью Windows Server 2016 в начале декабря, и мы наконец нашли время поставить его в лабу и потрогать руками то, о чём давно говорили на конференциях: Nano Server и Windows Containers. Спойлер: интересно, местами удивительно, местами раздражает.

Nano Server: 400 МБ и никакого GUI

Концепция Nano Server проста - берём Full Installation, выкидываем всё лишнее: графический интерфейс, локальный вход, большинство компонентов, которые никогда не нужны серверу в стойке. На выходе получаем образ размером около 400 МБ против 4 ГБ у стандартного Server Core и ещё большего Full.

Разворачивали через PowerShell-скрипт New-NanoServerImage, который идёт в поставке с TP4. Процедура непривычная для Windows-инфраструктуры - собираешь образ VHD с нужными пакетами заранее, как Dockerfile, только с явно большим количеством командлетов:

New-NanoServerImage `
    -Edition Standard `
    -DeploymentType Guest `
    -MediaPath D:\ `
    -BasePath C:\NanoBase `
    -TargetPath C:\NanoImages\nano01.vhd `
    -ComputerName NANO01 `
    -GuestDrivers `
    -Packages Microsoft-NanoServer-IIS-Package

Собралось, запустилось. Время загрузки - примерно 5 секунд от старта VM до готовности по сети. После Full Server с его двухминутными загрузками первый раз видишь это и думаешь, что что-то сломалось. Нет, просто грузить нечего.

С чем придётся смириться

Nano Server - это не просто маленький Windows Server. Это другая модель управления, к которой надо перестраиваться.

Никакого локального входа. Вообще. Консоль VM показывает аварийную оболочку EMS для самых экстренных случаев, но нормальная работа - только удалённо. WinRM, PowerShell Remoting, вот это всё.

Половина привычных вещей не работает. Нет .NET Framework - только .NET Core, который в 2016 году ещё сам по себе moving target. Нет MSI-установщиков. Нет mmc, нет regedit, нет большинства привычных утилит. Подключаешься через Enter-PSSession и чувствуешь себя немного как на Linux в 2003 году - есть командная строка и надо думать.

WMI урезан. Часть привычных WMI-запросов не работает. Для мониторинга придётся адаптировать скрипты.

Управлять Nano Server через наши текущие Ansible playbook-и не получится напрямую - нет SSH, только WinRM, и это отдельная история с настройкой. Для масштабирования на несколько машин надо либо использовать Desired State Configuration, либо городить что-то своё.

Windows Containers: IIS в контейнере

Вот здесь интереснее. TP4 добавляет два режима контейнеров: Windows Containers (разделяют ядро ОС, как обычные Docker-контейнеры на Linux) и Hyper-V Containers (каждый контейнер работает в отдельной минимальной VM - полная изоляция ядра).

Docker Engine для Windows в TP4 - это форк с патчами Microsoft, который ставится отдельно. Команды знакомые:

docker pull microsoft/windowsservercore
docker run -it microsoft/windowsservercore powershell

Образ windowsservercore весит около 9 ГБ. Это не опечатка. Контейнер с полным Windows Server Core - 9 гигабайт базового образа. После привычных 200 МБ ubuntu или 120 МБ alpine это как-то... впечатляет.

Попробовали поднять IIS в контейнере:

docker run -d -p 80:80 microsoft/iis

Образ microsoft/iis доступен в реестре Microsoft, IIS действительно стартует внутри контейнера, и на порту 80 хоста отвечает знакомая страница-заглушка. Технически - работает.

Практически - есть нюансы. Время старта контейнера с IIS - несколько десятков секунд. На Linux nginx-контейнер стартует за секунду-другую. Логи IIS внутри контейнера ведут себя не совсем так, как ожидаешь. Механизм volumes для Windows Containers в TP4 работает, но с ограничениями.

Инструментов вокруг почти нет. Docker Compose на Windows в этом превью не поддерживает Windows Containers нормально. Kubernetes и Swarm Windows Containers не поддерживают вовсе. То есть поднять один контейнер - да, а выстроить что-то похожее на нормальный оркестрированный деплой - самодеятельность.

Зачем это вообще нужно

Есть категория клиентов, у которых legacy .NET-приложения на Windows, и переход на Linux не обсуждается по разным причинам - лицензионные соглашения, специфические COM-компоненты, корпоративная политика. Для них Windows Containers теоретически дают то же, что Docker дал Linux-миру: воспроизводимые окружения, изоляцию, управляемый деплой.

Nano Server при этом выглядит логичной платформой для таких контейнеров или для ролей без GUI - DNS, DHCP, файловый сервер, агент мониторинга. Не надо тащить 4 ГБ ради демона, который занимает 50 МБ.

Что в итоге

На продакшн это не готово - TP4 он и есть TP4, Microsoft явно предупреждают. Но направление понятное и интересное. Nano Server как концепция - это правильно, Windows-инфраструктуре давно не хватало чего-то похожего на Server Core, только доведённого до логичного конца.

Windows Containers - посмотрим. Экосистема инструментов вокруг них нулевая, базовые образы огромные, производительность запуска не сравнить с Linux. Но сам факт, что IIS поднялся внутри docker run - это уже что-то новое для Windows-мира.

Финальный релиз Server 2016 обещают в этом году. К тому моменту хочется увидеть нормальный Docker Compose, меньше весящие образы и хоть какие-то инструменты оркестрации. Пока это лабораторный эксперимент, но эксперимент любопытный.

Контакт

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

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