Донецкий техникум промышленной автоматики

ITband.ru »Масове розгортання віртуальних машин з використанням SCVMM2008R2 SP1

  1. розгортання
  2. Введення в домен
  3. Автоматизація

Якщо ви чули про Hyper-V - то напевно чули і про інструмент під назвою Microsoft System Center Virtual Manager, призначеному, як не дивно, для управління віртуальними машинами Якщо ви чули про Hyper-V - то напевно чули і про інструмент під назвою Microsoft System Center Virtual Manager, призначеному, як не дивно, для управління віртуальними машинами. Вдаватися в опис я не буду - в інтернетах про нього не писав хіба що ледачий, я опишу одну конкретну задачу, на пошук вирішення якої я витратив досить багато часу. Отже, завдання: створити за допомогою VMM багато віртуальних машин, привласнити статичні IP-адреси та інші мережеві настройки (маска, шлюз, DNS, etc.) і ввести в домен. На жаль, тут не все так просто, як здається.

Як відомо, в VMM є можливості масового розгортання віртуальних машин. Для цього використовуються так звані шаблони (Templates). Конструктивно шаблон складається з образу віртуального жорсткого диска (ів), налаштувань віртуального "заліза" - к-ть процесорів, обсяг пам'яті, мережеві адаптери, etc. і налаштувань гостьової ОС: ім'я комп'ютера, Product Key, пароль локального адміністратора, і т.д. Файли образів VHD зберігаються в розшарений папках бабліотек (Library Share), за замовчуванням - на самому сервері VMM, а всі налаштування - в базі даних MS SQL, що використовується для роботи VMM.

Отже, в першу чергу необхідно створити шаблон (або шаблони - якщо їх буде декілька). Для цього створюється віртуальна машина, на неї встановлюється ОС, інший софт (якщо необхідно) і за допомогою візарду New Template конвертується в шаблон. В процесі конвертації гостьова ОС обробляється за допомогою sysprep, потім файл VHD копіюється в Library Share, а сама віртуальна машина видаляється.

Після створення шаблону розгортання віртуалок буде проводитися в 2 етапи:

  1. Власне створення віртуалок
  2. Введення в домен - віддалено, за допомогою утиліти psexec

розгортання

Отже, ми створили шаблон. У процесі створення шаблону потрібно було визначити настройки - як "заліза" так і гостьовий ОС. З якоїсь досі незрозумілою мені причини в Microsoft вирішили не додавати в цей візард можливості завдання статичних параметрів мережі. При цьому можна задати введення в домен. Спробуємо створити виртуалку з шаблону.

На жаль, ми не зможемо вводити наші виртуалки в домен через візард - оскільки перед цим необхідно прописати мережеві настройки.

На жаль, ми не зможемо вводити наші виртуалки в домен через візард - оскільки перед цим необхідно прописати мережеві настройки

Як це зробити? Єдиний спосіб, який я зміг знайти - використання секції GuiRunOnce.

Відразу, поки не перейшли далі: задавати пароль локального адміністратора в Візард теж не можна. Якщо його поставити - після завантаження гостьової ОС доведеться набирати цей пароль для входу в систему. Якщо ж пароль тут не ставити - вхід в систему відбудеться автоматично, і секція GuiRunOnce коректно відпрацює. Проте, пароль задавати потрібно. По-перше - в цілях безпеки, по-друге - без паролі не відпрацює команда psexec. Так що залишаємо пароль порожнім, він буде заданий командою net user в GuiRunOnce.

Я додавав наступні команди:

netsh interface ipv4 set address "Local Area Connection" static 172.16.0.10 255.255.0.0 172.16.0.254

netsh interface ipv4 add dnsserver "Local Area Connection" 172.16.0.1

netsh firewall set opmode mode = disable

net user administrator P @ ssw0rd

Пояснення: перша і друга команда задають мережеві настройки: IP 172.16.0.10, Mask 255.255.0.0, Gaterway 172.16.0.254, DNS 172.16.0.1. Третя команда вимикає Windows Firewall (потрібно для коректної відпрацювання psexec - див. Далі), справжні джедаї замість відключення фаєрволла можуть задати відповідні правила. Четверта команда задає пароль для облікового запису локального адміністратора.

Перед тим, як натиснути Finish - не забудьте встановити галочку Power on virtual machine after creation, щоб виртуалка запустилася автоматично відразу після створення.

Введення в домен

Отже, виртуалка створилася і запустилася. Можна зайти на неї і подивитися, що мережеві настройки застосувались (IP-адреса має бути 172.16.0.10 і т.д.). Тепер нашу виртуалку потрібно вводити в домен. Щоб ввести в домен, потрібно виконати на ній команду:

netdom join% computername% /d:test.local / ud: test \ administrator / pd: P @ ssw0rd / reb: 15

Ця команда введе віртуальну машину в домен test.local (ім'я комп'ютера було вже встановлено при розгортанні - його ми і залишимо). У тестовій середовищі була використана обліковий запис адміністратора домену. З метою безпеки в продакшен-середовищі я рекомендую створити окрему учетку, делегувати їй права на введення в домен і використовувати її. Облікові записи комп'ютерів в потрібних OU можна (і потрібно) буде створити попередньо - вручну або ж скриптом.

Оскільки віртуалок у нас буде багато, заходити на кожну і виконувати команду ми не будемо. Для автоматизації ми використовуємо відмінну утиліту psexec від Марка Руссиновича. У нашому випадку команда буде виглядати так:

psexec \\ 172.16.0.10 -u administrator -p P @ ssw0rd netdom join% computername% /d:test.local / ud: test \ administrator / pd: P @ ssw0rd / reb: 15

На жаль, ця команда візьме значення змінної% computername% ні з виртуалки, а з тієї ОС, де ця команда виконувалася. Щоб команда відпрацювала коректно, ми зробимо так:

  1. Створюємо * .cmd-файл
  2. Розміщуємо в нього команду netdom join ... (далі по тексту)
  3. За допомогою pscexec з ключем -c виконуємо цей командний файл на цільової виртуалке:

psexec \\ 172.16.0.10 -C -u administrator -p P @ ssw0rd addtodomain.cmd

Автоматизація

Оскільки, як уже було сказано - віртуалок у нас буде багато - нам необхідно автоматизувати процес. Найпростіше для цього використовувати Power Shell. Для того, щоб скрипти коректно відпрацювали - необхідно, щоб на компьютьерам була встановлена ​​консоль управління SCVMM і в консолі Power Shell необхідно завантажити відповідні розширення.

Попередньо потрібно підготувати список віртуалок, які ми будемо розгортати. Найпростіше це зробити в Excel, і зберегти результати в форматі CSV. В результаті має вийти щось на зразок:

Vmname, IP, Mask, Gateway, DNS
Alpha, 172.16.0.10,255.255.0.0,172.16.0.254,172.16.0.1
Bravo, 172.16.0.11,255.255.0.0,172.16.0.254,172.16.0.1
Charlie, 172.16.0.12,255.255.0.0,172.16.0.254,172.16.0.1
Delta, 172.16.0.13,255.255.0.0,172.16.0.254,172.16.0.1
Echo, 172.16.0.14,255.255.0.0,172.16.0.254,172.16.0.1
Foxtrot, 172.16.0.15,255.255.0.0,172.16.0.254,172.16.0.1

Тепер можна написати скрипт, зокрема на PowerShell, який створить виртуалки з шаблону з параметрами, взятими зі списку. У мене скрипт вийшов такий:

$ VMS = Import-CSV c: \ temp \ vm.csv

$ Template = Get-Template -VMMServer localhost | where {$ _. Name -eq "Test-alpha"}
$ VMHost = Get-VMHost -VMMServer localhost | where {$ _. Name -eq "hyperv.test.local"}
$ HardwareProfile = Get-HardwareProfile -VMMServer localhost | where {$ _. Name -eq "HW Profile1"}

$ VMS | Foreach-Object

{
$ VMName = $ _. Vmname
$ IP = $ _. IP
$ Mask = $ _. Mask
$ Gateway = $ _. Gateway
$ DNS = $ _. DNS

New-VM -Template $ Template -Name $ VMName -VMHost $ VMHost -Path "c: \ VM" -Owner "TEST \ administrator" -HardwareProfile $ HardwareProfile -ComputerName $ VMName -TimeZone 170 -GuiRunOnceCommands "netsh interface ipv4 set address" "Local Area Connection" "static $ IP $ Mask $ Gateway", "netsh interface ipv4 add dnsserver" "Local Area Connection" "$ DNS", "netsh firewall set opmode mode = disable", "net user administrator P @ ssw0rd" -RunAsSystem -StartAction TurnOnVMIfRunningWhenVSStopped -DelayStart 0 -StopAction ShutdownGuestOS -StartVM -JobGroup 63e01329-c734-4c1b-a796-1ed955bda1eb -RunAsynchronously
}

Тепер можна запустити наш скрипт і йти палити (пити каву, чай, пиво, і т.п.) - процес триває досить довго, особливо коли віртуалок багато.

Після того, як всі виртуалки будуть створені і запущені - потрібно "пройтися" по ним за допомогою psexec і ввести в домен. Для цього створюємо ще один Power Shell-скрипт.

Передбачається, що файл domain.cmd у нас вже створено і лежить в тому ж каталозі, що і скрипт.

$ VMS = Import-CSV c: \ temp \ vm.csv

$ VMS | Foreach-Object {
$ IP = $ _. IP
. \ psexec.exe \\ $ IP -c -u administrator -p P @ ssw0rd domain.cmd
}

Після відпрацювання цього скрипта всі наші віртуальні машини зі списку будуть введені в домен. Вітаю, ви виконали цей квест!

PS Знаю, що в скрипти ще багато чого можна додати - запис в лог, наприклад, або в другому скрипті обійтися без CMD-шника, а брати computername з CSV, і напевно багато іншого - тим не менш, напрямок куди копати я задав. Якщо комусь стати в нагоді в роботі - буду радий. Коментарі, зрозуміло, вітаються.

Олександр Косівченко,

MVP: VM

Як це зробити?