Научились автоматизировать создание отчетов, извлекать свойства заданных объектов виртуализации, создавать и конфигурировать кластер, настраивать функциональность HA и DRS. Сегодня продолжим знакомство с командной строкой и уделим внимание особенностям настройки виртуального свитча, вопросам автоматического развертывания виртуальных машин, переноса сетевых параметров, создания и использования тегов.
Перемещение хостов в кластер
Чтобы добавить узлы в кластер, хосты ESXi переводят в maintenance mode. Для этого виртуальные машины, расположенные на хостах, должны находиться в выключенном состоянии. Следовательно, делаем выборку всех запущенных виртуальных машин и переводим их в состояние shut down. После переводим esx-01a.corp.local и esx-02a.corp.local в режим maintenance:
Рисунок 1. Пример исполнения командлета Get-VMHost
Переместив хосты в кластер, переключаемся из режима maintenance в режим Connected. Для этого используем командлет:
Get-VMHost | Set-VMHost -State Connected
Конфигурация распределенного виртуального свитча
Напомним, что распределенный виртуальный свитч, или vDS (Virtual Distributed Switch), – функционал, особенно полезный для крупных инфраструктур. vDS создается на сервере управления vCenter Server и накладывает свою конфигурацию на необходимые хосты виртуализации. Кроме того, vDS обеспечивает гибкое распределение ресурсов ввода-вывода благодаря внедрению определяемых пользователем пулов сетевых ресурсов. С помощью командлета New-VDSwitch создаем новый vDS:
Рисунок 2. Пример исполнения командлета New-VDSwitch
В следующем шаге подключаем ESX-хосты к vDS:
Add-VDSwitchVMHost -VDSwitch $vds -VMHost esx-01a.corp.local, esx-02a.corp.local
Для проверки успешной привязки хостов используем команду:
Get-VMHost -DistributedSwitch $vds
После чего переходим к созданию группы портов, для этого используем командлет New-VDPortGroup:
$pgManagement = New-VDPortGroup $vds -Name "management"$pgvMotion = New-VDPortGroup $vds -Name "vMotion"$pgStorage = New-VDPortGroup $vds -Name "storage"$pgVM = New-VDPortGroup $vds -Name "VM"
Перенос сети управления на vDS
Итак, ассоциируем оба хоста с переменной $hosts, используя командлет Get-VMHost:
$hosts = Get-VMHost esx-01a.corp.local, esx-02a.corp.local
После чего выполняем перенос сети управления на vDS, применяя цикл foreach PowerShell:
foreach ($vmhost in $hosts) {
$pNics = Get-VMHostNetworkAdapter -VMHost $vmhost -Physical
$vNicManagement = Get-VMHostNetworkAdapter -VMHost $vmhost -Name vmk0
$vNicStorage = Get-VMHostNetworkAdapter -VMHost $vmhost -Name vmk1
$vNicvMotion = Get-VMHostNetworkAdapter -VMHost $vmhost -Name vmk2
Add-VDSwitchPhysicalNetworkAdapter -DistributedSwitch $vds -VMHostPhysicalNic $pNics -VMHostVirtualNic $vNicManagement,$vNicStorage,$vNicvMotion -VirtualNicPortGroup
$pgManagement,$pgStorage,$pgvMotion -Confirm:$false
}
С помощью командлета Get-NetworkAdapter получаем детали по сетевым адаптерам всех виртуальных машин:
$vmNetworkAdapters = Get-VM | Get-NetworkAdapter
Чтобы сетевой трафик виртуальных машин проходил через виртуальный свитч vDS, используем команду:
Set-NetworkAdapter -NetworkAdapter $vmNetworkAdapters -Portgroup $pgVM -Confirm:$false
Создание новой виртуальной машины
Используя командлет New-VM, создадим новую виртуальную машину. Для этого необходимо задать имя ВМ, размер хранилища, объем памяти, определить имя хоста и указать датастор, где разместится новый объект. Кроме того, необходимо определить порт-группу, созданную ранее:
$vm = New-VM -Name 'jsmith' -VMHost esx-01a.corp.local -DiskGB 10 -MemoryMB 512 -Datastore ds-site-a-nfs01 -Portgroup $pgVM
Для запуска виртуальной машины используем команду:
$vm | Start-VM
Теперь, когда виртуальная машина запущена и работает, проверим, как происходит перемещение ВМ между хостами. Перенесем виртуальную машину на второй узел, тем самым распределив нагрузку более равномерно. Для этого используем командлет Move-VM:
Рисунок 3. Пример исполнения командлета Move-VM
Автоматизация процесса создания ВМ
Как видите, процесс создания виртуальной машины с помощью командной строки достаточно прост. Этот метод подойдет в случае, если вы хотите создать большое количество виртуальных машин за максимально короткий промежуток времени. Для этого заранее готовится файл с прописанными значениями, который используется как файл ответов. Запустив командлет и указав путь до файла, вы инициируете процесс создания нескольких виртуальных машин. Значения берутся из файла ответов, который выглядит следующим образом:
Рисунок 4. Пример файла конфигураций
Файл содержит названия виртуальных машин, характеристики в виде количества заданной памяти, хранилища, названия департамента и типа пользователя. С помощью PowerShell задаем переменную и импортируем содержимое файла. Для этого используется командлет Import-Csv:
Рисунок 5. Пример использования командлета Import-Csv
Теперь на основе заданных спецификаций создаем несколько виртуальных машин. Для этого используем цикл foreach PowerShell:
foreach ($vmSpec in $spec)
{
New-VM -Name $vmSpec.Name -MemoryMB $vmSpec."Memory size" -DiskGB $vmSpec."Disk size" -VMHost esx-01a.corp.local -Portgroup $pgVM
}
Тегирование объектов инфраструктуры виртуализации
Чтобы в виртуальном окружении был полный порядок и можно было выполнять поиск необходимой виртуальной машины, сети, хранилища или любого другого объекта, используется принцип тегирования. С помощью тегов ведется удобная категоризация объектов по различным критериям. Чаще всего это бизнес-критерии, которые позволяют проще ориентироваться в существующем наборе объектов и быстро находить тот или иной элемент виртуальной инфраструктуры. Тег присваивается одному или нескольким объектам. Рассмотрим, как это работает с помощью командной строки. В нашем примере используются две категории тегов: департамент (Department) и тип (Type). Существующие в компании отделы продаж (Sales) и финансов (Finance) в дальнейшем будут относиться к категории Department. А пользовательские (User) и серверные (Server) виртуальные машины – ассоциироваться с тегом Type. Чтобы создать озвученные категории тегов, используем командлет New-TagCategory:
New-TagCategory -Name Department
New-TagCategory -Name Type
Далее получаем список уникальных наименований отделов, ассоциируя с переменной $departmentTagNames. При этом используем командлет:
$departmentTagNames = $spec | select -Unique Department
Теперь каждый отдел привязываем к заданному тегу. Для этого используем цикл foreach PowerShell:
foreach ($departmentTagName in $departmentTagNames)
{
New-Tag -Name $departmentTagName.Department -Category Department
}
Аналогично поступаем с виртуальными машинами, привязывая их к тегу Type:
$vmTypes = $spec | select -Unique Type
foreach ($vmType in $vmTypes)
{
New-Tag -Name $vmType.Type -Category Type
}
Чтобы посмотреть заданные теги и привязку к объектам, используйте командлет Get-Tag. Картинка ниже иллюстрирует присвоенные значения.
Рисунок 6. Пример использования командлета Get-Tag
Назначение тегов ВМ на базе спецификаций
Теперь, когда заданы теги и определены категории объектов, самое время выполнить привязку виртуальных машин. Для этого используем цикл foreach и командлет New-TagAssignment:
foreach ($vmSpec in $spec)
{
$departmentTag = Get-Tag $vmSpec.Department
$typeTag = Get-Tag $vmSpec.Type
$vm = Get-VM -Name $vmSpec.Name
New-TagAssignment -Entity $vm -Tag $departmentTag
New-TagAssignment -Entity
$vm -Tag $typeTag
}
Модификация нескольких ВМ на базе тегов
Поскольку ВМ привязаны к тегам, возможно одновременное изменение параметров нескольких виртуальных машин. Вернемся к рассматриваемому ранее сценарию и вымышленной компании Nephosoft, которая планирует развернуть новое приложение в отделе продаж. Для полноценной работы приложения требуется 1 Гб оперативной памяти. Используя теги, выполним обновление параметров нескольких виртуальных машин. Для начала найдем все машины, относящиеся к отделу продаж (sales department):
$salesVMs = Get-VM -Tag sales
После чего сделаем выборку всех пользовательских машин, в этом нам помогут теги:
$userVMs = Get-VM -Tag user
Обратите внимание, что мы не можем использовать командлет Get-VM-Tag sales,user, поскольку он отобразит виртуальные машины отдела продаж или пользовательские виртуальные машины, когда как нам необходима выборка пользовательских виртуальных машин отдела продаж. Для этих целей используем командлет PowerShell Compare-Object:
$salesUserVMs = Compare-Object $salesVMs
$userVMs -IncludeEqual -ExcludeDifferent -PassThru
Прежде чем мы сможем обновить значения RAM каждой виртуальной машины, необходимо убедиться, что все ВМ находятся в выключенном состоянии. Для этого используем команду:
$salesUserVMs | where {$_.PowerState -eq
"PoweredOn"} | Stop-VM -Confirm:$false
После чего средствами командлета Set-VM вносим изменения в свойства виртуальных машин:
Set-VM $salesUserVMs -MemoryGB 1 -Confirm:$false
Подводим итоги
Во второй части статьи мы познакомились с особенностью конфигурации кластера и распределенного виртуального свитча, узнали о возможностях автоматического развертывания виртуальных машин, научились работать с тегами, используя командную строку. Автоматизируя и ускоряя процесс выполнения определенных операций, command line интерфейс является удобным средством, облегчающим выполнение рутинных задач. А какие способы управления облачной (IaaS) и виртуальной инфраструктурой используете вы?