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

Процессы
05.10.2016
72
10 min

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

#powercli #vsphere

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

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


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

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

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

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

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

Get-VMHost | Set-VMHost -State Connected

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

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

Пример исполнения командлета New-VDSwitch

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

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

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

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

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

Пример файла конфигураций

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

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

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

Пример использования командлета 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

) и виртуальной инфраструктурой используете вы?



Екатерина Юдина
Профильный эксперт