Управление виртуальной и облачной инфраструктурой с помощью VMware vSphere PowerCLI. Часть 2

1.jpg

Ответ на вопрос, что лучше использовать для управления виртуальной и облачной инфраструктурой, зависит от предпочтений, требований и желаемого результата. Одни предпочитают графический интерфейс, другие не представляют жизни без командной строки, а кто-то пользуется и тем, и другим. В прошлой статье мы познакомились с инструментами PowerShell и PowerCLI, которые помогают справляться с различными задачами. Научились автоматизировать создание отчетов, извлекать свойства заданных объектов виртуализации, создавать и конфигурировать кластер, настраивать функциональность HA и DRS. Сегодня продолжим знакомство с командной строкой и уделим внимание особенностям настройки виртуального свитча, вопросам автоматического развертывания виртуальных машин, переноса сетевых параметров, создания и использования тегов.

Перемещение хостов в кластер

Чтобы добавить узлы в кластер, хосты ESXi переводят в maintenance mode. Для этого виртуальные машины, расположенные на хостах, должны находиться в выключенном состоянии. Следовательно, делаем выборку всех запущенных виртуальных машин и переводим их в состояние shut down. После переводим esx-01a.corp.local и esx-02a.corp.local в режим maintenance:

2.png

Рисунок 1. Пример исполнения командлета Get-VMHost

Переместив хосты в кластер, переключаемся из режима maintenance в режим Connected. Для этого используем командлет:

Get-VMHost | Set-VMHost -State Connected 

Конфигурация распределенного виртуального свитча

Напомним, что распределенный виртуальный свитч, или vDS (Virtual Distributed Switch), – функционал, особенно полезный для крупных инфраструктур. vDS создается на сервере управления vCenter Server и накладывает свою конфигурацию на необходимые хосты виртуализации. Кроме того, vDS обеспечивает гибкое распределение ресурсов ввода-вывода благодаря внедрению определяемых пользователем пулов сетевых ресурсов.  

С помощью командлета New-VDSwitch создаем новый vDS:

3.png

Рисунок 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:

4.png

Рисунок 3. Пример исполнения командлета Move-VM

Автоматизация процесса создания ВМ

Как видите, процесс создания виртуальной машины с помощью командной строки достаточно прост. Этот метод подойдет в случае, если вы хотите создать большое количество виртуальных машин за максимально короткий промежуток времени. Для этого заранее готовится файл с прописанными значениями, который используется как файл ответов. Запустив командлет и указав путь до файла, вы инициируете процесс создания нескольких виртуальных машин. Значения берутся из файла ответов, который выглядит следующим образом:

5.png

Рисунок 4. Пример файла конфигураций

Файл содержит названия виртуальных машин, характеристики в виде количества заданной памяти, хранилища, названия департамента и типа пользователя. С помощью PowerShell задаем переменную и импортируем содержимое файла. Для этого используется командлет Import-Csv:

6.png

Рисунок 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. Картинка ниже иллюстрирует присвоенные значения.

7-1.png

Рисунок 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) и виртуальной инфраструктурой используете вы?

Опубликовано 05.10.2016 12:43:49 автором E.Yudina в разделе Функциональность

/* */

Посетите наш сайт!

IaaS облако IT-GRAD

Подпишитесь на блог!

IaaS для бизнеса по кирпичикам