Массовое развертывание виртуальных машин VMware.
В предыдущей статье мы узнали как развернуть виртуальную машину при помощи клонирования или из шаблона. Теперь пришла очередь массового развертывания ВМ.
Подготовка к массовому развертыванию
Вскоре после того, как виртуализация привела к экономии пространства и энергопотребления, организации обычно замечают скорость развертывания. Это открытие не только розы, хотя, поскольку оно влечет за собой необходимость «качать» виртуальные машины во много раз быстрее, чем это возможно в физическом мире. Не бойтесь! Вы скоро узнаете: с PowerCLI ни один проект не будет слишком большим!
Listing 5.10 Mass-deploying blank virtual machines
1 |
1..1000 | Foreach-Object { New-VM -Name REL5_($_) -DiskMB 10240 -DiskStorageFormat thin -MemoryMB 1024 -GuestId rhel5Guest -NetworkName vSwitch0_VLAN22 -CD } |
Пятьсот рабочих столов Windows, развернутых из шаблона? Это так же просто, как вы можете видеть в листинге 5.11. Listing 5.11 Mass-deploying from a template
1 |
$template = “WIN_XP_SP3” $OSCustomizationSpec = Get-OSCustomizationSpec XP $VMHost = Get-Cluster PROD_01 | Get-VMHost | Get-Random 1..500 | Foreach-Object { New-VM -Name XP_$_ ` -Template $template ` -Host $VMhost ` -Datastore $datastore ` -OSCustomizationSpec $OSCustomizationSpec } |
о, как насчет массовых развертываний? Предел здесь — небо, но мы собираемся сосредоточиться на использовании CSV. Во-первых, вам необходимо установить уникальную информацию для каждой системы. В этом случае мы будем использовать процессор, память, жесткий диск и сетевой адаптер. Просто создайте текстовый файл CSV; первая строка должна содержать метку каждого столбца, как показано на рисунке 5.2.
Чтобы использовать эту информацию и упростить процесс развертывания, используйте командлет PowerShell, который будет считывать файл CSV и создавать объект (листинг 5.12).
Листинг 5.12. Импорт CSV и создание объекта
1 |
Import-Csv .\massVM.txt | Foreach-Object { New-VM -Name $_.Name -Host $VMhost -Datastore $datastore -NumCpu $_.CPU -MemoryMB $_.Memory -DiskMB $_.HardDisk -NetworkName $_.NIC } |
Обратите внимание, что общий поток не меняется. Опять же, вы ограничены только собственным воображением. Вы можете включить столько, сколько потребуется вашей организации.
Запуск развертывания Синхронно или Асинхронно
По умолчанию командлет New-VM отслеживает ход выполнения любой операции инициализации, обновляя индикатор выполнения. Несмотря на полезность, этот индикатор выполнения может делать невозможным ввод запросов PowerCLI на несколько минут или часов в зависимости от задания. Это особенно расстраивает, когда вы пишете сценарии для развертывания большого количества виртуальных машин. Например, давайте развернем четыре новые виртуальные машины из шаблона. Мы хотим сбалансировать нагрузку, поэтому будем управлять размещением хранилища данных. Наша целевая среда имеет два хранилища данных с большим количеством свободного места (см. Листинг 5.13).
Листинг 5.13. Синхронное развертывание четырех виртуальных машин
1 |
$Datastores = Get-Cluster -name ‘PROD01’|Get-VMHost |Get-Datastore $i=1 While ($i -le 4) { Foreach ($Datastore in $Datastores) { New-VM -Name “VM0$I” -Host ($Datastore | Get-VMHost | Get-Random) -Datastore $datastore } } |
На первый взгляд, в сценарии, приведенном в листинге 5.13, нет ничего плохого, но этот надоедливый индикатор выполнения заставит наши четыре виртуальные машины быть развернутыми последовательно! Чтобы преодолеть это, вы можете применить ключ -RunAsync, как показано в листинге 5.14. Этот переключатель указывает командлету New-VM возвращать объект задачи, а не отслеживать выполняемый процесс. Вы можете достичь паритета с синхронным развертыванием виртуальных машин, сохранив эти объекты задачи в переменной. Затем вы можете передать объекты в командлет Wait-Task.
Листинг 5.14. Асинхронное развертывание новых виртуальных машин
1 |
$Datastores = Get-Cluster -name ‘PROD01’| Get-VMHost | Get-Datastore $i=1 While ($i -le 4) { Foreach ($Datastore in $Datastores) { if ($I -le 4) { [array]$Task += New-VM -Name “VM0$I” -Host ($Datastore | Get-VMHost | Get-Random) -Datastore $datastore -RunAsync } $I++ } } Wait-Task -Task $Task |
Вы можете быстро добраться до точки, в которой вы максимизируете свою инфраструктуру и время, полностью используя потенциал vSphere. Однако могут возникнуть негативные последствия, особенно при клонировании виртуальной машины или развертывании из шаблона. Это довольно высокие операции ввода-вывода, и одновременное выполнение слишком большого количества может поставить на колени массив хранения.
Решение запустить ваш код синхронно или асинхронно больше связано с кодом для создания виртуальной машины. Мы рекомендуем по возможности выполнять все операции синхронно, потому что это обеспечивает безопасность. С небольшой помощью команды PowerCLI конвейер PowerShell изолирует ваши действия и ограничивает вероятность ошибок. Однако, когда вы попадаете в одну из тех ситуаций, когда вам нужно самостоятельно прорваться и контролировать порядок сборки, проблем не возникает. Просто будьте внимательны ко всему процессу и всегда обращайте особое внимание на порядок исполнения.