Управлять продуктами VMware можно с помощью vCenter Server, используя графический интерфейс. Но есть задачи, которые гораздо удобнее решать через командную строку. Это упрощает процесс и избавляет администратора от рутины.
Типичный пример, когда командная строка может оказаться более эффективным решением, чем графический интерфейс — развертывание виртуальных машин. Допустим, у вас есть виртуальная инфраструктура на timeweb.cloud. Используя специальные команды, вы можете через командную строку создавать, конфигурировать и удалять ресурсы. Или вообще написать скрипт, который будет выполнять указанные задачи без вашего участия.
Основной инструмент для управления VMware через командную строку называется PowerCLI. Это интерфейс для управления и автоматизации всех аспектов vSphere, включая сеть, хранилище, виртуальные машины, гостевую ОС и многое другое.
PowerCLI работает поверх PowerShell, кроссплатформенной среды автоматизации задач и управления конфигурацией Windows. Он состоит из оболочки командной строки и языка сценариев. VM PowerCLI использует базовый синтаксис и концепции Microsoft Powershell. По сути, это модули PowerShell, которые содержат более 700 командлетов — специализированных команд.
VMWare PowerCLI использует интегрированную среду сценариев (ISE). Получается сложная на первый взгляд связка PowerShell ISE PowerCLI. Но вникать в то, как это работает, необязательно. На практике проблем с использованием командной строки для управления VM vSphere не возникает.
Посмотрим, как установить PowerCLI vCenter на примере компьютера с Windows.
Есть два способа. Первый — использовать PowerShell Gallery.
Install-Module -Name VMware.PowerCLI
Все необходимые компоненты скачаются и установятся на компьютер без вашего участия. Этот способ хорош тем, что позволяет впоследствии обновлять утилиту онлайн. Для этого достаточно выполнить команду:
Update-Module -Name VMware.PowerCLI
Второй способ — загрузить установщик vSphere PowerCLI с официального сайта. Файлы собраны в ZIP-архив.
Чтобы установить PowerCLI Windows, сначала проверьте путь к модулю PowerShell, выполнив команду:
$env:PSModulePath
Распакуйте содержимое архива по одному из путей к модулям PowerShell. Затем в окне терминала переключитесь на папку с модулями и разблокируйте файлы:
cd path_to_powershell_modules_folder
Get-ChildItem * -Recurse | Unblock-File
Чтобы убедиться, что установленным модулем можно пользоваться, выполните команду:
Get-Module -Name VMware.PowerCLI -ListAvailable
Порядок установки vSphere CLI в Linux и macOS смотрите в документации.
Если вы устанавливали утилиту автономно, то обновить ее онлайн не получится. Новую версию можно только поставить в том же режиме: скачать файлы, распаковать их и разблокировать.
Чтобы посмотреть возможности PowerCLI, выполните команду:
Get–VICommand
В ответ вы получите огромный перечень с описанием командлетов. Можно фильтровать его, используя ключевые слова. Например, вам нужно увидеть список виртуальных машин, выбрать одну и изменить ее конфигурацию. Получите перечень командлетов для управления ВМ с помощью такой команды:
Get–VICommand *VM
Все команды также можно посмотреть в документации. Для удобства они разбиты по категориям.
Интерфейс также предлагает посмотреть справку и примеры использования каждого командлета. Чтобы вызывать руководство по применению, добавьте аргумент help
или Get-Help
.
Есть дополнительные ключи, которые помогают управлять полнотой справки. Например, если вы хотите увидеть не только описание, но и примеры использования, выполните:
help Connect–VIServer –Full
Здесь help
— это аргумент, который указывает на необходимость отобразить справку, Connect–VIServer
— командлет, с работой которого вы хотите разобраться, а -Full
— ключ, который вызывает детальную информацию, в том числе примеры использования.
Можно посмотреть только примеры использования, указав вместо -Full
ключ -Examples
.
Чтобы установить соединение с vSphere, используйте командлет Connect-VIServer
. Пример синтаксиса:
Connect-VIServer -Server 10.23.112.235 -Protocol https -User admin -Password pass
После командлета вы указываете адрес или имя сервера. Затем — протокол, по которому будет установлено соединение. Напоследок — имя пользователя и пароль.
Чтобы убедиться в том, что подключение установлено, выполните команду:
Get-CustomCertificates
В ответ должны быть извлечены все пользовательские сертификаты хоста.
Это пример базового подключения. Но можно использовать разные опции, чтобы решать более интересные задачи.
Например, так подключаются к серверу с помощью объекта учетных данных:
Connect-VIServer Server -Credential $myCredentialsObject -Port 1234
VMWare последней версии позволяет после подключения сохранять идентификатор сеанса. Его можно использовать в следующий раз для восстановления предыдущего сеанса.
Connect-VIServer "Server" -SessionId $sessionId
Если учетные данные, которые вы используете для входа на свой компьютер, совпадают с учетными данными сервера, можно использовать для установки соединения встроенную аутентификацию:
Connect-VIServer Server
А эта команда позволяет подключиться к серверу vSphere, который является частью серверной системы федерации vCenter. Она также подходит для случаев, когда вам нужно подключиться ко всем серверам vSphere в федерации.
Connect-VIServer "Server" -AllLinked
vSphere PowerCLI в Linux, Windows и macOS можно использовать как для решения совсем простых задач, так и для автоматизации рутины и выполнения сложных сценариев.
Начнем с совсем простых примеров. Допустим, нужно получить список всех виртуальных машин, которые размещены в инфраструктуре VMWare.
Способ сделать это «в лоб»:
Get–VM
Если виртуальных машин немного, то можно обойтись и таким отчетом. Если же список огромный, то гораздо удобнее будет отфильтровать нужные данные на этапе выполнения команды. Для этого используются специальные параметры.
Например, нужны все ВМ, имена которых начинается с TW:
Get-VM -Name TW*
Или все ВМ, находящиеся в указанном хранилище данных:
$myDatastore = Get-Datastore -Name "MyDatastore"
Get-VM -Datastore $myDatastore
Чуть более сложный пример — нужно вывести все отключенные ВМ:
Get-VM | Where {$_.Powerstate -ne “PoweredOn”} | Select Name, VMHost, NumCPU, MemoryMB, Version|Format-Table
Здесь вы указываете дополнительные параметры, которые влияют на вид ответа. В итоге получается таблица, которая состоит из пяти столбцов: Name, VMHost, NumCPU, MemoryMB, Version.
Можно также извлекать конкретные свойства объекта. Например:
Get-VM VMname | Get-Member -MemberType property
Вы получаете детали виртуальной машины с именем VMname. Можно получать информацию и о других свойствах:
Get-VM VMname | Select Name, NumCPU, MemoryMB, PowerState, VMHost | Format-Table
В ответе вы увидите таблицу с именем машины, количеством ядер, объемом памяти в МБ, статуса и vmhost.
Анализировать информацию внутри окна PowerShell не всегда удобно. Особенно, если данных очень много. CLI предлагает альтернативный вариант — экспорт результатов в форматы, которые больше подходят для изучения и анализа. Речь идет о файлах TXT, CSV, XML и HTML.
Например, эта команда сохранит результат в простом текстовом файле:
Get-VM | Select Name, NumCPU, MemoryMB, PowerState, VMHost | Out-File c:myPowerCLIReport.txt
Вот так можно получить отчет в формате CSV — отличный выбор для дальнейшего автоматизированного анализа данных:
Get-VM | Select Name, NumCPU, MemoryMB, PowerState, VMHost | Export-Csv c:myPowerCLIReport.csv -NoTypeInformation
Если нужны данные в формате XML:
Get-VM | Select Name, NumCPU, MemoryMB, PowerState, VMHost | ConvertTo-Xml -NoTypeInformation).Save("c:myPowerCLIReport.xml"
Или HTML-файл, который можно открыть в любом браузере:
Get-VM | Select Name, NumCPU, MemoryMB, PowerState, VMHost | ConvertTo-Html | Set-Content "c:myPowerCLIReport.html"
Теперь — еще более сложный пример использования. Посмотрим, как выполняется экспорт виртуальной машины VMWare через CLI.
Командлет Export-VApp
экспортирует vApp или отдельную виртуальную машину в указанное место назначения. Если место назначения не указано, командлет создает новую папку в текущем рабочем каталоге и экспортирует в нее vApp или виртуальную машину. Имя новой папки совпадает с именем vApp или виртуальной машины, которое отображается в vCenter Server.
Пример команды:
Get-VApp -Name "MyTW*" | Export-VApp -Destination "C:\vapp\"
Здесь вы извлекаете все vApps, имена которых начинаются с «MyTW», и экспортируете их по указанному пути.
Напоследок рассмотрим сценарий, который часто встречается на практике. Допустим, вам нужно создать и настроить кластер. У вас есть vCenter Linux, но вы хотите автоматизировать процесс — написать скрипт, который будет сам выполнять все необходимые команды. Сделать это поможет ISE VMWare, который работает через PowerCLI.
Создайте новый кластер, используя командлет New-Cluster
. Кроме имени нужно обязательно указать локацию. Например:
New-Cluster -Name "MyTimeweb" -Location "TimeWebDatacenter"
Этот командлет создает новый кластер с предоставленными входными данными в расположении, указанном параметром Location
. Важно, что некоторые настройки устанавливаются по умолчанию.
HA
— это высокая доступность. Суть настройки в том, что при выходе из строя одного из узлов кластера нагрузка перераспределяется между другими узлами, на которых зарезервированы ресурсы.
При создании кластера для HAEnabled
автоматически устанавливается значение $true
, если указаны некоторые параметры высокой доступности, HAAdmissionControlEnabled
, HAFailoverLevel
, HARestartPriority
или HAIsolationResponse
.
Все эти параметры можно задать явно. Например:
New-Cluster -Name "MyTimeweb" -Location "TimeWebDatacenter" -HAEnabled -HAAdmissionControlEnabled -HAFailoverLevel 2 -VMSwapfilePolicy "InHostDatastore" -HARestartPriority "Low" -HAIsolationResponse "PowerOff"
DRS
— функция, которая определяет где запустить или куда перенести работающую виртуальную машину, чтобы на всех узлах кластера была равномерно распределена нагрузка.
При создании кластера для DrsEnabled
автоматически устанавливается значение $true
, если указаны некоторые параметры DRS
, DrsAutomationLevel
или DrsMode
. Эти параметры тоже можно задать явно:
New-Cluster -Name "MyTimeweb" -Location "TimeWebDatacenter" -DRSEnabled -DRSAutomationLevel 'Manual'
Для изменения настроек кластера используется другой командлет — Set-Cluster
. Например, можно отключить планировщик распределенных ресурсов:
Set-Cluster -Cluster "MyTimeweb" -DRSEnabled:$false
Подробное описание всех командлетов с примерами использования есть в документации PowerCLI. Ее изучение не займет много времени. Взамен вы получите полное понимание того, как упростить и автоматизировать задачи, которые встают перед администратором при управлении инфраструктурой VMware vSphere.