AutomatedLab. Часть 1 — Введение

imageЭтот перевод открывает серию записей о замечательном инструменте автоматизации развертывания лабораторий для тестирования AutomatedLab. С оригиналами можно ознакомиться в блоге Hey, Scripting Guy!

Резюме: Microsoft PFE’s, Реймунтд Андре и Пьер Педерсен, представляют серию публикаций по использованию Windows Powershell для развертывания решения под названием AutomatedLab.

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

Скажем, Вам нужно проверить интеграцию программного продукта с Active Directory. Вы устанавливаете полный набор серверов. И, так Вам больше “делать нечего”, как смотреть на процесс установки, Вы берете на себя множество других задач параллельно настройке лаборатории. И пока Вы выполняете эти задачи, то можете пропустить один-другой важный параметр при развертывании, к примеру, функциональный уровень леса или домена. В следствии такой ошибки Вам придется потратить еще больше времени, чтобы начать все с начала. Или еще хуже – Вы не заметили, что с установкой что-то не так и в итоге получите ненадежные результаты испытаний.

Здесь описаны лучшие практики для автоматизации этих процессов в максимально возможной степени. Это быстрее, эффективнее и (что может быть даже более важно) надежнее. Если Вы запустите скрипт 2 раза – получите тот же результат 2 раза. Тем не менее, если Вы создали лабораторию с пятью машинами более чем один раз, то вполне возможно, что эти лаборатории будут иметь некоторые различия.

Люди, работающие с AutomatedLab, консультанты и инженеры, работают с очень разными клиентами. В ряде случаев, мы должны написать код, основанный на конкретных требованиях к инфраструктуре, или нам нужно оттраблшутить конкретную проблему. Очевидно, что имея только одну тестовую среду, это не получится. Есть слишком много различных конструкций, версий ПО и специфичных конфигураций клиента. Так что создание лабораторий, включающих все эти параметры, могут занять довольно продолжительное время.

Что включает AutomatedLab

AutomatedLab является решением, которое поможет Вам установить сценарий лаборатории необходимой сложности за короткое время. Например создание домена с одним сервером или клиентом занимает около 15 минут. Настройка большой лаборатории с более чем 10 машинами занимает от 1,5 до 2 часов (зависит в основном от скорости вашего диска). Вы можете задать все важные настройки, такие как имена, IP-адреса, сетевую конфигурацию, версии ОС и функциональные уровни домена и леса. Вы так же можете назначить роли машин – IIS, Exchange Server или контроллер домена. Установка любой машины с любой ролью в AutomatedLab, конечно же полностью автоматическая (unattended).

Чтобы Вы могли быстро приступить к работе, AutomatedLab поставляется с кучей всевозможных примеров скриптов установки, которые охватывают самые различные сценарии. Есть примеры скриптов для простых вещей, вроде отдельных клиентов или доменов с одним участником. Так же есть примеры сценариев развертывания Exchange Server 2013, SQL Server 2012, клиентов с Visual Studio 2013 и веб-сервера. Представьте себе сколько времени нужно чтобы установить все это вручную. AutomatedLab сделает это за 2 часа на SSD диске.

Обратите внимание. AutomatedLab предназначен для развертывания лабораторий и тестовых сред. Он не предназначен для развертывания продуктивных сред.

Как AutomatedLab работает

AutomatedLab поставляется в виде MSI-файла. Файл включает себя модули Powershell, примеры сценариев, документацию и исходники лаборатории. Вы можете найти необходимую информацию на сайте Microsoft TechNet: AutomatedLab.

Модули Windows Powershell

90% AutomatedLab это чистый Powershell. Тем не менее, часть кода была написана на C#. Модули Powershell обеспечивают удобный и простой способ создания пакетов сценариев. Если Вам нужна дополнительная информация о том как работают модули Powershell, посмотрите раздел about_Modules.

AutomatedLab поставляется с семью модулями Powershell, которые будут подробно описаны ниже. Эти модули должны находиться по правильному пути, что бы автоматически загружаться при старте сессии Powershell. Расположение по умолчанию для модулей Powershell при установке – папка WindowsPowerShell в папке Документы (Documents) текущего пользователя (пользователя устанавливающего AutomatedLab).

Примеры скриптов

В наличии ряд примеров скриптов, которые демонстрируют возможности AutomatedLab. Возможно, Вам придется изменить типовой скрипт до запуска, чтобы он заработал на вашем компьютере. Каждый сценарий ищет папку под названием LabSources на диске E:\ и пытается установить виртуальные машины на диск D:\. Пожалуйста, измените эти имена дисков, что бы они соответствовали дискам на вашем компьютере.

Конечно же, Вы также можете удалить или добавить виртуальные машины. Это требует минимального знания Powershell, но можно просто копировать и вставлять вызовы Add-LabMachineDefenition и менять параметры со значениями по Вашему выбору.

Документация

Да, это пояснительные документы. По умолчанию они копируются в папку Документы (Documents) текущего пользователя.

Источники лаборатории (Lab Sources)

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

  • ISOs

Поместите все необходимые образы ISO, которые используются в скриптах, в эту папку. Если Вы загружаете образы с MSDN или других источников, названия могут отличаться, поэтому убедитесь, что вы изменили сценарий соответствующим образом.

  • PostInstallationActivities

AutomatedLab поставляется со встроенными роле-ориентированными постустановочными действиями. Они включают в себя создание пользователей Active Directory, установка известных образов баз данных на SQL Server, а так же создание доверительных отношений между всем установленными лесами Active Directory. Как написать собственные постустановочные действия будет рассказано позже.

  • SoftwarePackages

AutomatedLab предоставляет Вам простой способ установки ПО на некоторые или все лабораторные машины. Все что Вам нужно знать, это как сделать “тихую” (silent) установку. Например чтобы установить Notepad++ на всех лабораторных машинах, необходимо две строки кода и копия дистрибутива Notepad++ в этой папке.

  • Tools

AutomatedLab может скопировать эту папку в виртуальную машину, пока создает ее. По умолчанию AutomatedLab устанавливает инструменты SysInternals на каждую виртуальную машину используя эту папку Tools. Все что вы положите в эту папку будет скопировано на каждую ВМ в папку C:\Tools. В следующих записях будет более подробно рассказано об этом.

Модули Windows Powershell

AutomatedLab поставляется в виде семи модулей Powershell. Почему у нас семь модулей, а не один, как у большинства продуктов? Мы постарались разделить решение на основные блоки, это делает написание кода и отладку гораздо легче.

Следующая запись будет объяснять как использовать командлеты каждого модуля Powershell. (Эта запись является обзором и не объясняет как развернуть свою лабораторию).

Давайте узнаем о модулях один за другим.

AutomatedLabDefinition

Этот модуль предназначен для сбора ваших требований. Он содержит командлеты для определения областей, машин, ролей, виртуальных сетевых адаптеров, образов ISO и действий после установки. Конфигурации тестовых сред AutomatedLab базируются на XML-файлах. И тем не менее, командлеты, предоставленные AutomatedLabDefinition позволяют определить желаемую конфигурацию с помощью Powershell. Таким образом, знание XML не потребуется. Если Вам нужно сделать конфигурацию постоянной, после завершения настройки Вы можете экспортировать ее в XML-файлы.

AutomatedLab

Это основной модуль. Он запускает все действия, основанные на конфигурации, которую Вы создали (и экспортировали в лабораторные XML-файлы) с AutomatedLabDefinition. После экспорта, необходимо импортировать файлы лабораторий в AutomatedLab. Это делается для того, чтобы выполнить ряд проверок, чтобы убедиться в том, что технические характеристики правильны (например убедиться в отсутствии дублирования имен и IP-адресов, убедиться что указанные пути доступны). Если все проверки успешны, текущая конфигурация лаборатории может быть развернута. Детали этого действия будут обсуждаться в следующей записи.

AutomatedLabUnattended

Развертывание ОС выполняется с помощью классической автоматической (unattended) установки. Оно основано на XML-файле содержащем детали машины. AutomatedLabUnattended изменяет стандартный XML-файл используемый при развертывании. Использование модуля за пределами AutomatedLab бессмысленно.

AutomatedLabWorker

Мы постарались разделить основные части решения на два модуля. AutomatedLab основан на XML-файлах и подключен к большинству других модулей Powershell, в то же время AutomatedLabWorker более независим и обрабатывает нагрузку. Данные нагрузки вызываются функциями AutomatedLab. AutomatedLabWorker не имеет отношения к XML-файлам и к сведениям о лаборатории вообще.

HostsFile

AutomatedLab в значительной степени основывается на Windows Powershell Remoting (об этом будет рассказано позже), поэтому ему (Powershell Remoting) необходимо разрешение имен. Так как мы создаем лаборатории, мы не можем использовать корпоративный DNS. Кроме того, мы не хотим лабораторных машин в DNS, поэтому AutomatedLab использует старый добрый файл hosts, чтобы убедиться в том, что он (AutomatedLab) может связаться с виртуальными машинами. Имена лабораторных машин (записи в файле hosts) короткие (не FQDN), это позволяет избежать использования Kerberos при аутентификации в лабораторных машинах.

PSFileTransfer

Каждый раз, когда AutomatedLab копирует что-то в лабораторную машину, он использует Powershell Remoting (и никогда SMB). Этот модуль написан основываясь на некоторых функциях Ли Холмса.

PSLog

Этот модуль отвечает за ведение журнала и запись всех сообщений в одном месте.

Виртуальные жесткие диски

AutomatedLab использует дифференциальные диски для экономии дискового пространства и ускорения процесса установки. Это требует от AutomatedLab создание родительских дисков – по одному на каждую используемую операционную систему. Так что, если у Вас есть лаборатория с 10 машинами, часть из которых на базе Windows Server 2012 R2, часть Windows Server 2008 R2 и один клиент на Windows 8.1, то у Вас будет три родительских диска. Все виртуальные машины ссылаются на один из родительских дисков. При запуске развертывания лаборатории, вы увидите как мы взаимодействуем с виртуальными жесткими дисками.

Windows PowerShell Remoting

AutomatedLab требуется внешний (External) или внутренний (Internal) виртуальный сетевой адаптер для работы с ВМ. Частный (Isolated) адаптер не поддерживается, так как AutomatedLab на хостовой машине должен иметь возможность коммуникации с ВМ.

Хост создает виртуальные жесткие диски и виртуальные машины. После запуска лаборатории они становятся доступными. А благодаря файлу hosts, AutomatedLab может связаться с ВМ по имени.

Используя Powershell Remoting, AutomatedLab может вызвать любую команду или выполнить блок сценария на лабораторных машинах. Он похож на PsExec, но более удобный и мощный. По этой технологии есть много соответствующих ресурсов в интернете, но для начала можно ознакомиться с about_Remote и Poweshell Remoting 2.0 guide.

Ниже пример того как развертывается контроллер домена:

  • AutomatedLab создает родительский диск (если такового не существует)
  • AutomatedLab создает дифференциальный диск и виртуальную машину
  • AutomatedLab запускает ВМ и ждет пока ВМ не станет доступна (проверки по ICMP и WSMan)
  • Когда ВМ доступна, AutomatedLab (с хостовой машины) посылает блок сценария для развертывания контроллера домена и запускает его
  • AutomatedLab ждет пока ВМ не перезагрузится
  • AutomatedLab ждет пока ВМ снова будет доступна

Вот и все, контроллер домена развернут.

Некоторые действия требуют от лабораторного компьютера сетевых соединений с другим лабораторным компьютером. Это требует “двойной” аутентификации, которая отключена по умолчанию из соображений безопасности. Что бы сделать это, AutomatedLab использует CredSSP. Для получения более подробной информации о CredSSP смотрите PowerShell 2.0 remoting guide: Part 12 – Using CredSSP for multi-hop authentication.

AutomatedLab и требования Powershell Remoting

Есть несколько вещей, которые необходимо настроить на хостовой машине до удаленной работы сценариев лаборатории. По умолчанию, Powershell Remoting использует протокол Kerberos для проверки подлинности. Протокол Kerberos не будет работать между хостом и лабораторными ВМ, поскольку ряд требований не выполняется. По этому AutomatedLab использует NTLM.

Однако, по умолчанию, Powershell Remoting подключается только к “доверенным” (Trusted) машинам. К “доверенным” относятся, например, члены домена. Но так как лабораторные машины либо автономны, либо являются членами лабораторного домена, они не являются “доверенными” по отношению к хостовой машине. Таким образом, нужно настроить TrustedHosts, чтобы позволить хосту доверять лабораторным машинам.

Перед созданием лаборатории можно запустить командлет Set-LabHostRemoting. (Этот вызов является частью любого примера сценария AutomatedLab). Этот командлет включает Powershell Remoting и устанавливает на хосте TrustedHosts в “*”. Это означает что мы можем подключиться к любому компьютеру с помощью Powershell Remoting, а так же будет разрешен нешифрованный трафик и CredSSP, так что хостовый компьютер сможет посылать необходимые учетные данные для лабораторных машин, а лабораторная машина сможет передать эти данные любой другой лабораторной машине.

Контрольные точки (Checkpoints, Snapshots)

Если Вы хотите проверить что-то опасное в лаборатории, то в первую очередь неплохо бы создать контрольную точку. Создание контрольной точки для одной-двух машин дело не сложное, но как быть когда этих машин 10 или 20? Для этого в AutomatedLab есть командлеты Checkpoint-LabVM и Restore-LabVM.

Эти командлеты могут создавать и восстанавливать контрольные точки для всех лабораторных машин при указании переключателя -All. Если Вы уверены что контрольные точки более не нужны, используйте Remove-LabVMSnapshot для удаления контрольных точек. Это быстрый способ “заморозить” состояние всей лаборатории.

Примечание. Когда Вы планируете создание и восстановления контрольных точек для контроллера домена, убедитесь, что у Вас есть понимание об откате USN и механизме защиты виртуализированных контроллеров домена, появившихся в Windows Server 2012. По умолчанию, функция GenerationID отключена на всех контроллерах домена под управлением Windows Server 2012, которые установлены с помощью AutomatedLab.

Действия после установки и удаленное выполнение команд

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

Действия после установки вызывают указанные скрипты на машине для которой они назначены. Вам не нужно заботиться о проверке подлинности, так как это делается с помощью AutomatedLab. Если Ваш сценарий на основе файлов, или требуется доступ к образу ISO, они будут автоматически скопированы и смонтированы в системе для Вас. Следующие записи будут объяснять это более подробно.

Пакеты ПО

Еще трудоемкой задачей при создании лаборатории является установка ПО на всех машинах. AutomatedLab берет на себя эту задачу. Все что Вам нужно, это указать имя исполняемого (exe) файла или MSI-файла для установки. Если Вы используете исполняемый файл для установки, Вам необходимо использовать параметры командной строки, для запуска автоматической установки. Примеры сценариев показывают как одной строкой устанавливать ПО на всех лабораторных машинах.

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

(с) Раймунд и Пьер.

Источник.

Только один комментарий Комментировать

  1. Обратная ссылка: AutomatedLab. Часть 2 — Развертывание простой лаборатории | Блог IT-KB /

Добавить комментарий