AutomatedLab. Часть 2 - Развертывание простой лаборатории

imageЭта запись является второй частью серии о замечательном инструменте автоматизации развертывания лабораторий для тестирования – AutomatedLab. В этой записи Вы узнаете о том как создать простую лабораторию используя AutomatedLab. Прежде чем читать эту запись, Вы можете прочесть первую часть - AutomatedLab. Часть 1 - Введение.

Установка

Установка AutomatedLab очень легка. Вы можете найти всю необходимую информацию на сайте Microsoft TechNet: AutomatedLab. Загрузка состоит из одного MSI-файла.

После запуска файла установки Вы увидите три варианта: Обычный (Typical), Выборочный (Custom) и Полный (Complete). Если у Вас есть более одного логического диска (или, что лучше, более одного физического диска), Вы можете воспользоваться Выборочной установкой.

pic1

Через некоторое время папка LabSources может стать довольно большой, так что вы можете выбрать для нее диск, отличный от диска C:\.

Примечание: Не стесняйтесь изменять папки установки по своему желанию, однако, что бы автоматически импортировать модули Powershell, с которыми поставляются с AutomatedLab, они должны быть установлены по пользовательскому пути модулей (C:\Users\<user>\Documents\WindowsPowerShell\Modules), либо по общему пути (C:\Windows\System32\WindowsPowerShell\v1.0\Modules).

Если Вы не измените каталоги по умолчанию, после установки Вы будете иметь семь новых модулей Powershell, размещенных по пользовательскому пути (C:\Users\<user>\Documents\WindowsPowerShell\Modules).

В папке Документов (Documents) Вы найдете примеры скриптов (AutomatedLab Sample Scripts) и документацию (AutomatedLab Documentation).

Важной частью является иерархия папок LabSources (Задачи этой папки были объяснены ранее).

pic2

Необходимые условия для развертывания первой лаборатории

Три требования необходимо выполнить, для развертывания лаборатории:

  1. AutomatedLab требует Hyper-V в Windows Server 2012 R2 или Windows 8.1
  2. ISO-файлы, которые будут использоваться для создания лаборатории, должны находиться в LabSources\ISOs
  3. Windows Powershell Remoting должна быть включена на хостовой машине

Первое что нужно сделать, это получить образы ISO c Windows Server 2012 R2 c версиями Standard или Datacenter и Windows 8.1 версий Professional или Enterprise.

Что бы узнать какие версии операционных систем содержат Ваши образы ISO, используйте следующую команду:

Get-LabAvailableOperatingSystems -Path <path>

pic3

Включить Powershell Remoting на хостовом компьютере (описано в предыдущей записи). Это необходимо и нужно сделать только один раз.

Откройте консоль Powershell с повышенными привилегиями и вызовите командлет Set-LabHostRemoting. Вывод будет приблизительно таким:

VERBOSE: starting log
VERBOSE: Set-LabHostRemoting Entering... )
VERBOSE: Enabeling CredSSP on the host machine for role 'Client'. Delegated computers = *
VERBOSE: '*' added to TrustedHosts
VERBOSE: Local policy 'Computer Configuration -> Administrative Templates -> System -> Credentials Delegation -> Allow
Delegating Fresh Credentials' configured correctly
WARNING: Configuring the local policy for allowing credentials to be delegated to all machines (*). You can find the
modified policy using gpedit.msc by navigating to: Computer Configuration -> Administrative Templates -> System ->
Credentials Delegation -> Allow Delegating Fresh Credentials with NTLM-only server authentication
VERBOSE: Set-LabHostRemoting...leaving.

Примечание: Поскольку выполнение команды Set-LabHostRemoting устанавливает TrustedHosts в “*”, Ваш хостовый компьютер теперь будет разрешать любые полномочия, которые будут посылаться с него на любой другой компьютер. Это потенциальная проблема в безопасности, потому Вы должны знать об этом. Если это недопустимо для Вас, Вам необходимо изменить конфигурацию вручную после запуска Set-LabHostRemoting. Что бы изменить TrustedHosts:

  1. Откройте gpedit.msc. Перейдите к Computer Configuration > Administrative Templates > System > Credentials Delegation
  2. Измените следующие политики: Allow delegating fresh credentials и Allow delegating fresh credentials with NTLM-only server authentication
  3. Измените содержимое так, что бы только разрешенные полномочия отправлялись на выбранные Вами компьютеры.

Создание первой лаборатории

Когда все необходимые условия выполнены можно приступить к созданию лаборатории. Создание лаборатории состоит из нескольких задач, которые описаны далее.

Сбор основной информации

Прежде всего, необходимо определить метаданные о том, где искать необходимую информацию и где ее хранить. Файлы с информацией для чтения должны быть в LabSources. Так же нужно собрать информацию об описании лаборатории (чтобы сохранить ее при выходе из сеанса Powershell или перезапуске хоста). Кроме того, информацию о том где сохранять виртуальные машины, если это необходимо.

Примечание: Для повышения производительности, хорошей идеей будет размещение виртуальных машин на диске отличном от диска операционной системы. Еще лучше, если это будет SSD. AutomatedLab использует родительские диски для каждой используемой ОС и дифференциальные диски для виртуальных машин с родительскими дисками в качестве базовых. Размещайте образы ISO в другом расположении, нежели виртуальные машины – тогда создание родительских дисков будет проходить быстрее (хотя эта задача делается только один раз, так как родительские диски не изменяются после создания). Кроме того, для повышения производительности желательно исключить папку с ISO и папку с виртуальными машинами из проверки антивирусом (сканирование в реальном времени).

В следующем примере LabSources (содержащем фалы ISO) будет находиться на диске E:\ (HDD), а виртуальные машины будут развертываться на диск D:\ (SSD).

$labSources = 'E:\LabSources' #это папка с исходниками
$vmDrive = 'D:' #это диск для развертывания ВМ
$labName = 'FirstLab' #имя лаборатории, папка с ВМ и виртуальный сетевой адаптер

#создание пути к папке с ВМ через Join-Path
$labPath = Join-Path -Path $vmDrive -ChildPath $labName
#создание папки для ВМ если она не существует
if (-not (Test-Path $labPath)) { New-Item $labPath -ItemType Directory | Out-Null }
Описание лаборатории

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

Следующая команда создает описание лаборатории:

New-LabDefinition -Path $labPath -VmPath $labPath -Name $labName -ReferenceDiskSizeInGB 60
Описание сети

Все виртуальные машины в лаборатории должны иметь сетевой адаптер. Этот сетевой адаптер должен быть подключен к виртуальному коммутатору Hyper-V. Данный коммутатор должен быть создан для лаборатории. По умолчанию, этот коммутатор создается Внутренним (Internal), обеспечивая хостовый компьютер доступом к сети лабораторных виртуальных машин и наоборот. И, конечно, это изолирует лабораторные виртуальные машины от вашей физической сети. Для простоты, называние сети будет совпадать с именем лаборатории:

#описание сети
Add-LabVirtualNetworkDefinition -Name $labNetworkName -IpAddress 192.168.81.1 -PrefixLength 24

В этом сценарии лаборатория будет использовать IP адреса из сети 192.168.81.x с маской сети 255.255.255.0. Возможные адреса 192.168.81.1-192.168.81.254.

Примечание: IP адрес 192.168.81.1 будет автоматически использоваться в качестве IP адреса виртуального коммутатора Hyper-V, что видно из хостовой операционной системы. Таким образом, этот адрес не может быть использован для виртуальных машин лаборатории.

Описание доменов

Если Вы хотите создать только автономные машины (машины в рабочей группе), домен не требуется. Тем не менее, в этой лаборатории будет один домен с одним контроллером домена и один рядовой сервер. Так что домену требуется описание для этой лаборатории.

Это описание будет включать в себя доменное имя, администратора и пароль администратора. Эта учетная запись будет использоваться для всех “доменных” задач, будь то повышение сервера до контроллера домена, установка DSRM/DSREPAIR пароля и присоединения компьютеров к домену.

#Описание домена с учетной записью администратора домена
Add-LabDomainDefinition -Name test1.net -AdminUser administrator -AdminPassword Password1
Добавление образов ISO в лабораторию

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

#этот образ будет использоваться для развертывания виртуальных машин
Add-LabIsoImageDefinition -Name Server2012R2 -Path $labSources\ISOs\en_windows_server_2012_r2_with_update_x64_dvd_4065220.iso –IsOperatingSystem
Выбор учетных данных, для подключения к виртуальным машинам

Для первоначальной настройки каждой виртуальной машины ей требуется определение имени пользователя и пароля локального администратора. Эта информация сохраняется в файле unattended.xml. Этот файл используется для выполнения начальной настройки каждой виртуальной машины.

Внимание: создание объекта PSCredentional с помощью пароля открытым текстом, безусловно не лучшая практика для любой продуктивной среды. Однако, так как это тестовая среда мы будем этим пользоваться.

#Это учетная запись для подключения к виртуальным машинам
$installationCredential = New-Object PSCredential('Administrator', ('Password1' | ConvertTo-SecureString -AsPlainText -Force))
Описание ролей

Использование ролей в AutomatedLab это самый простой способ, чтобы настроить виртуальную машину как необходимо. В версии 2.1.0 AutomatedLab поддерживает следующие роли:

RootDC Контроллер домена для корневого домена
FirstChildDC Первый контроллер домена для дочернего домена
DC Дополнительный контроллер для домена
DHCP Роль DHCP-сервер
FileServer Роль файлового сервера
WebServer Роль веб-сервера (все веб-службы роли)
SQLServer2012 SQL Server 2012 с экземпляром по умолчанию
Exchange2013 Exchange Server 2013
Orchestrator System Center Orchestrator 2012
CaRoot Корневой центр сертификации (предприятия или автономный)
CaSubordinate Подчиненный центр сертификации (предприятия или автономный)
Office2013 Microsoft Office 2013
DevTools Visual Studio 2012/2013

В этой лаборатории мы будем использовать только роль RootDC. Лаборатория будет содержать домен и лес Active Directory, и конечно же это будет корневой контроллер домена. Требования для описания корневого контроллера домена - это функциональный уровень леса (свойство ForestFunctionalLevel) и функциональный уровень домена (свойство DomainFunctionalLevel).

Эта информация определяется с помощью параметра Properties который является хэш-таблицей (hashtable). Для этой части нет никакой документации, так что это хорошая возможность наделать ошибок. Тем не менее, ошибки в этом параметры не очень критичны, так как все описания лаборатории будут проверяться до фактического развертывания.

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

Командлет Get-LabMachineRoleDefinition имеет параметр -Role и параметр -Properties. И хотя параметр -Properties не является обязательным для некоторых ролей, для роли RootDC он обязателен. Вызов Get-LabMachineRoleDefinition возвращает объект Role. Этот объект мы позже используем для описания лабораторной машины.

$role = Get-LabMachineRoleDefinition -Role RootDC -Properties @{ DomainFunctionalLevel = 'Win2012R2'; ForestFunctionalLevel = 'Win2012R2' }
Описание виртуальной машины

Первую виртуальную машину лаборатории мы опишем используя командлет Add-LabMachineDefinition. Здесь имя машины указывается вкупе с основной информацией о машине, будь то количество процессоров, памяти и конфигурации IP.

Кроме того описывается то, что машина должна быть присоединена к домену test1.net, и что она должна быть в роли корневого контроллера домена (то что мы описали на предыдущем шаге).

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

Параметр ToolsPath не является обязательным и указывает на папку хоста по Вашему выбору. Если Вы используете этот параметр, AutomatedLab будет копировать содержимое этой папки на виртуальные машины до их старта. Это эффективный способ копирования инструментов и утилит на Ваш выбор для всех машин лаборатории.

И, наконец, должна быть определена операционная система. Этот параметр ограничивается числом поддерживаемых операционных систем. IntelliSence в Powershell поможет Вам найти нужное значение. Убедитесь в том, что после выбора с помощью IntelliSence Вы заключили значение в кавычки, так как имена операционных систем содержат пробелы.

Add-LabMachineDefinition -Name S1DC1
    -MemoryInMb 512
    -Network $labNetworkName
    -IpAddress 192.168.81.10
    -DnsServer1 192.168.81.10
    -DomainName test1.net
    -IsDomainJoined
    -Roles $role
    -InstallationUserCredential $installationCredential
    -ToolsPath $labSources\Tools
    -OperatingSystem 'Windows Server 2012 R2 SERVERDATACENTER'

Первая машина описана.

Чтобы добавить вторую машину в лабораторию, просто скопируем и вставим предыдущую команду, изменив имя, IP адрес и удалив роль. Если никакой роли машине не назначено – она будет обычным членом домена.

Add-LabMachineDefinition -Name S1Server1
    -MemoryInMb 512
    -Network $labNetworkName
    -IpAddress 192.168.81.20
    -DnsServer1 192.168.81.10
    -DomainName test1.net
    -IsDomainJoined
    -InstallationUserCredential $installationCredential
    -ToolsPath $labSources\Tools
    -OperatingSystem 'Windows Server 2012 R2 SERVERDATACENTER'
Экспорт лаборатории

После того как все описания лаборатории определены, вы можете экспортировать конфигурацию с помощью командлета Export-LabDefinition. Этот командлет создаст два XML-файла в каталоге D:\FirstLab. Эти файлы содержат конфигурацию лаборатории.

Export-LabDefinition -ExportDefaultUnattendedXml –Force

pic4

Параметр –Force разрешает перезапись существующих файлов не спрашивая разрешения.

Развертывание лаборатории

После того как мы настроили все описания лаборатории и ее компонентов, а конфигурация была сохранена на диске, лаборатория может быть развернута. Это делается с помощью командлета Install-Lab. С помощью различных параметров, Вы можете активировать различные задачи, которые должен выполнить Install-Lab. В следующей таблице перечислены параметры, которые доступны на данный момент:

Параметр Задача
NetworkSwitches Создает виртуальный коммутатор
BaseImages Создает все родительские диски
VMs Создает и настраивает виртуальные машины Hyper-V
Domains Начинает установку всех контроллеров домена, начиная с корневого и заканчивая дочерними и дополнительными
DHCP Устанавливает DHCP роль на машинах, для которых она указана
CA Развертывает центры сертификации
PostInstallations Стартует описанные действия после установки
SQLServer2012 Устанавливает SQL Server на машинах, для которых эта роль указана
Orchestrator Устанавливает SC Orchestrator на машинах, для которых эта роль указана
WebServers Устанавливает роль веб-сервера на машинах, для которых эта роль указана
Exchange2013 Устанавливает Exchange Server 2013 на машинах, для которых эта роль указана
DevTools Устанавливает Visual Studio на машинах, для которых эта роль указана
Office2013 Устанавливает Office 2013 на машинах, для которых эта роль указана
StartRemainingMachines Запускает все остальные машины (машины которые до сих пор не запущены)
Вызов Install-Lab

Так как наша лаборатория содержит только контроллер и члена домена, то для вызова Install-Lab необходимы следующие параметры:

  • NetworkSwitches

Это создаст виртуальный коммутатор. По умолчанию, он будет Внутренним (Internal), так что виртуальные машины не смогут получить доступ к любым сетевым ресурсам за пределами лаборатории и хоста.

  • BaseImages

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

  • VMs

Это создаст и настроит каждую виртуальную машину с помощью дифференциальных дисков.

  • Domains

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

  • StartRemainingMachines

Все машины, описанные в лаборатории, которые не запущены, будут запущены в рамках этой задачи. Эта задача важна, так как стартуя машины, она вызывает автоматическую установку, основанную на XML-файлах, которые AutomatedLab создала - unattended.xml, который содержит настройки для каждой машины, такие как имя, IP адрес, региональные параметры и домен.

В следующем примере Install-Lab вызывается три раза, что бы отделить процессы друг от друга. Однако Вы можете начать все задачи в одном вызове, используя все необходимые параметры.

Install-Lab -NetworkSwitches -BaseImages -VMs
#Это установит все доменные контроллеры и развернет домены
Install-Lab -Domains
#Это запустит все машины что не былы запущены
Install-Lab -StartRemainingMachines

Эти задачи потребуют значительного количества времени, которое зависит от скорости Ваших дисков. Когда задачи завершатся, лаборатория будет готова к использованию. Поздравляем!

Удаление лаборатории

Удаление небольшой лаборатории, описанной в этой статье, задача довольно простая. Однако, если лаборатория содержит 10+ машин, удаление будет весьма утомительным процессом. AutomatedLab содержит командлет для удаления всех машин используемых в лаборатории.

Remove-Lab сначала удаляет все виртуальные машины, используемые в лаборатории, потом диски и, наконец, виртуальный коммутатор. Это позволяет последовательные развертывания лаборатории, тестирование, удаление и повторное развертывание, тестирование и т.д.

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

Полный текст скрипта

Это полный текст скрипта собранный из всех частей в записи:

$start = Get-Date
$labSources = 'E:\LabSources'
$vmDrive = 'D:'
$labName = 'FirstLab'

$labPath = Join-Path -Path $vmDrive -ChildPath $labName

if (-not (Test-Path $labPath)) { New-Item $labPath -ItemType Directory | Out-Null }

New-LabDefinition -Path $labPath -VmPath $labPath -Name $labName -ReferenceDiskSizeInGB 60

Add-LabVirtualNetworkDefinition -Name $labName -IpAddress 192.168.81.1 -PrefixLength 24

Add-LabDomainDefinition -Name test1.net -AdminUser administrator -AdminPassword Password1

Add-LabIsoImageDefinition -Name Server2012R2 -Path $labSources\ISOs\en_windows_server_2012_r2_with_update_x64_dvd_4065220.iso –IsOperatingSystem

$installationCredential = New-Object PSCredential('Administrator', ('Password1' | ConvertTo-SecureString -AsPlainText -Force))

$role = Get-LabMachineRoleDefinition -Role RootDC -Properties @{ DomainFunctionalLevel = 'Win2012R2'; ForestFunctionalLevel = 'Win2012R2' }

Add-LabMachineDefinition -Name S1DC1 `
-MemoryInMb 512 `
-Network $labName `
-IpAddress 192.168.81.10 `
-DnsServer1 192.168.81.10 `
-DomainName test1.net `
-IsDomainJoined `
-Roles $role `
-InstallationUserCredential $installationCredential `
-ToolsPath $labSources\Tools `
-OperatingSystem 'Windows Server 2012 R2 SERVERDATACENTER'

Add-LabMachineDefinition -Name S1Server1 `
-MemoryInMb 512 `
-Network $labName `
-IpAddress 192.168.81.20 `
-DnsServer1 192.168.81.10 `
-DomainName test1.net `
-IsDomainJoined `
-InstallationUserCredential $installationCredential `
-ToolsPath $labSources\Tools `
-OperatingSystem 'Windows Server 2012 R2 SERVERDATACENTER'

Export-LabDefinition –Force -ExportDefaultUnattendedXml

Import-Lab -Path (Get-LabDefinition).LabFilePath

Install-Lab -NetworkSwitches -BaseImages -VMs
Install-Lab -Domains
Install-Lab -StartRemainingMachines

$end = Get-Date

Write-Host "Развертывание лаборатории заняло $($end - $start)"

Что дальше?

Следующая запись описывает как работают контрольные точки в AutomatedLab и как описать собственные действия после установки, чтобы лучше настроить свою лабораторию.

Раймунд и Пьер

Источник

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