Продукт VMware vSphere PowerCLI расширяет PowerShell командами, предназначенными для управления серверами VMware. PowerCLI, оснащенный большим количеством команд, чем PowerShell, предоставляет администраторам широкий доступ к внутренней организации среды VMware. Недостаток этого богатейшего инструментария заключается в том, что вы легко заблудитесь в PowerCLI, если не поставите перед собой особые цели.

В этой статье я пройдусь по всей рабочей сессии PowerCLI, включая соединение с сервером, выполнение некоторых основных задач мониторинга и управления и отключение. Шаги для использования PowerCLI в основном одни и те же, поэтому мой пример не только поможет вам понять инфраструктуру PowerCLI, но и продемонстрирует его существенные характеристики. Я также расскажу о наиболее полезных ресурсах, чтобы вы открыли для себя возможности PowerCLI для выполнения большего количества специфических задач.

Необходимые условия

Чтобы управлять VMware с помощью PowerShell, должно соблюдаться три основных условия. Во-первых, необходимо, чтобы окружение сервера VMware было доступно. VMware PowerCLI работает с VMware ESX или ESXi 3.0 и далее, а также с другими VMware Server, VMware vCenter Server или продуктами VMware vSphere версии 2 или новее.

Во-вторых, вам понадобится рабочая станция с установленным PowerShell 2.0; там же вы установите и PowerCLI. Текущая версия VMware vSphere PowerCLI — 4.1.1. Чтобы получить пакет установки, зайдите на главную страницу VMware vSphere PowerCLI (www.vmware.com/go/powershell). Как вариант вы можете зайти в VMware Download Center (downloads.vmware.com) и найти PowerCLI там. Если вы еще не зарегистрированы на VMware, сделайте это — загрузка осуществляется бесплатно. Пожалуйста, имейте в виду, что это продукт с аналогичным именем, но совершенно особый — vSphere CLI. Несмотря на то что vSphere CLI также разрешает командной строке управление VMware, vSphere CLI — это традиционное консольное приложение, а не набор инструментов PowerShell. Убедитесь, что вы загружаете PowerCLI.

Третье условие состоит в том, что вам нужен доступ к серверу VMware с рабочей станции, которую вы будете использовать для управления. Это кажется очевидным, но я упоминаю об этом отдельно, потому что требуются небольшие настройки для удаленного доступа к серверу VMware. Если у вас есть доступ к сети VMware сервера через VPN или аналогичное устройство, вам не придется настраивать для доступа ничего особенного, достаточно подключиться к сети сервера. Если у вас нет доступа по VPN, но вы можете задать переадресацию портов на маршрутизаторе для сети сервера VMware, войдите в систему маршрутизатора и сопоставьте порт на общей стороне маршрутизатора порту управления сервера VMware (443 по умолчанию). Тогда вы сможете использовать общедоступный IP-адрес или имя DNS сети и номер общего порта для подключения к серверу.

Загрузка PowerCLI

В общем, вам не нужно беспокоиться о деталях загрузки PowerCLI. Программа установки VMware PowerCLI тотчас обеспечит вам «горячую клавишу» в главном меню — VMware, VMware vSphere PowerCLI. Когда вы запускаете PowerShell «горячей клавишей», PowerShell автоматически запускает настройку сценария, загружая оснастку PowerCLI (среди прочего). Если вы всегда пользуетесь «горячей клавишей» VMware PowerCLI для начала сессии PowerCLI, вы можете «перепрыгнуть» к следующему разделу. Не применяя «горячую клавишу», вы можете загрузить оснастку PowerCLI только в командной строке PowerShell; достаточно лишь знать имя (VMware.VimAutomation.Core). Используйте это имя с командой PowerShell Add-PSSnapin, как показано ниже:

Add-PSSnapin VMware.VimAutomation.Core

PowerShell автоматически найдет оснастку и обеспечит ее загрузку. С таким же успехом это работает и из сценария. Если вы попробуете применить данную команду на системе без установленного PowerCLI, система выдаст сообщение об ошибке. После запуска этой команды вы можете увидеть, успешна ли она, проверяя значение переменной $?; если оснастка не загружена, значение будет «ложь».

Если вы сами загружаете оснастку, вместо того чтобы использовать «горячую клавишу» PowerCLI, я советую вам по крайней мере взглянуть на сценарий настройки. Этот сценарий, Initialize-PowerCLIEnvironment.ps1, содержится в папке установки Power-CLI. После загрузки оснастки и настройки интерфейса PowerShell сценарий настройки также определяет несколько специфических псевдонимов и функций PowerCLI.

Соединение с сервером VMware

После запуска сессии Power CLI используйте команду Connect-VIServer для соединения с сервером VMware, которым вы управляете.

Этот шаг очень прост; вы всего лишь используете команду Connect-VIServer вместе с именем сервера или адресом:

Connect-VIServer -Server 192.168.1.21

PowerShell запросит учетные данные для того, чтобы вы могли установить соединение с сервером VMware, используя стандартное диалоговое окно PowerShell, как показано на экране 1.

 

Экран 1. Ввод учетных данных PowerShell

Приведу пример ситуации, в которой данный подход может не работать. Представьте, что вы организуете туннель через Интернет к удаленному серверу VMware. Стандартное решение здесь заключается не в том, чтобы что-то предпринимать с PowerCLI, а в том, чтобы установить соединение VPN с удаленным сайтом. Если это не вариант, вы можете сделать некоторые настройки на маршрутизаторе и задействовать команду Connect-VIServer.

Настройте маршрутизатор удаленного сайта, чтобы перенаправить общий порт на стороне Интернета к порту 443 на сервере VMware на внутренней стороне. Connect-VIServer позволяет установить альтернативный порт для решений, подобных этому.

К примеру, предположим, что сервер VMware находится в удаленной локальной сети. Поскольку в локальной сети также есть и почтовый сервер, можно использовать известное имя, чтобы добраться до маршрутизатора: mail.net.test. После соединения с маршрутизатором и настройки для перенаправления внешнего порта 51234 к порту 443 сервера VMware мы используем команду Connect-VIServer, например:

Connect-VIServer -Server mail.net.test
   -Port 51234

На данном этапе мы готовы что-то делать на сервере VMware. В следующих нескольких разделах мы рассмотрим некоторые основные задачи, которые применимы здесь или обеспечивают основу для лучшего понимания инфраструктуры VMware.

Проверка состояния и производительность

В PowerCLI есть небольшое количество команд для быстрого анализа журналов и текущих данных. Команда для доступа к журналам называется просто — Get-Log. Однако в первую очередь следует воспользоваться командой Get-LogType.

Дело в том, что серверы VMware не имеют статического набора журналов. Серверы ESX и ESXi имеют ограниченный набор журналов, поскольку на них меньше основных служб, чем на всем сервере vSphere, но даже их файлы журналов многочисленны, потому что VMware чередует файлы журналов и хранит резервные копии. Самый простой случай — у вас только небольшой набор (как показано на экране 2), с сервера ESXi. Чтобы получить только записи журнала hostd, воспользуйтесь командой

Get-Log -Key hostd

PowerCLI возвращает запись как значение blob, поэтому, чтобы увидеть текст, нужно развернуть возвращаемое значение Entries, как показано ниже:

(Get-Log -Key hostd).entries

 

Экран 2. Журналы сервера ESXi

На самом деле, если вы действительно хотите получить доступ ко всем записям существующих файлов журналов, неважно, сколько всего есть журналов или записей, вы можете перенаправить вывод Get-LogType в Get-Log и восстановить записи для каждого журнала:

Get-LogType | Get-Log | Foreach-object
   { $_.entries}

Однако эта операция может быть весьма ресурсоемкой, в частности для сервера, особенно при поиске на серверах ESX или ESXi. Если вы не выполните предварительную фильтрацию записей журнала и используете предложенный подход, чтобы понять, что происходит с сервером, лучше будет задействовать функцию пакетного исполнения Get-Log. Это займет столько времени, сколько понадобится для отображения файлов журналов в диалоговом режиме, но сделать это вам предстоит только один раз. К тому же благодаря этому способу вы также получите полный набор файлов настроек сервера. Все, что вам нужно сделать, это выполнить команду Get-Log с параметром Bundle (пакет) и задать путь к своему локальному компьютеру, где вы собираетесь хранить журналы. Этот путь уже должен существовать; если вы хотите сохранить набор журналов на C:\tmp\Serverl, вы сами должны создать папку C:\tmp\Server1. Вот эта команда:

Get-Log -Bundle -DestinationPath c:\
   tmp\Server1

Когда среда PowerCLI завершает пакетную обработку файлов журналов и сохраняет их, она возвращает имя файла архива, где они размещены. Это стандартный zip-файл, если вы используете vCenter. Поскольку серверы ESX и ESXi используют стандартный инструментарий Linux, будут созданы архивы tar и gzip, с расширением. tgz; вы можете открыть эти архивы с помощью WinZip или 7-Zip.

Файлы журналов дают вам информацию о значащих событиях (и о конфигурации системы, если вы используете функцию Bundle). Для сравнения, вы можете воспользоваться командами Stat, чтобы получить статистику, которая позволит ощутить, насколько производительна система.

Серверы VMware автоматически отслеживают ряд статистических данных о производительности для серверов, виртуальных машин, пулов ресурсов, кластеров и хостов. Рассмотрим «несерверные» объекты в следующем разделе, так как необходимо получить ссылки на эти объекты, чтобы увидеть их статистические данные. Для подключенного в настоящее время сервера, однако, вам не нужно делать что-то сложное, чтобы обнаружить, какие статистические данные передает VMware. Для просмотра типов статистики просто введите команду:

Get-StatType

Команда возвращает список имен или MetricIds статистических величин, которые передает VMware. Этот список может быть огромным, в частности, потому, что он может содержать копии. Вы можете получить чистый листинг, используя

Get-StatType | Sort-object -Unique

На экране 3 показан начальный вывод этой команды; длинный список сокращается и сортируется по алфавиту. Вы можете использовать одно или больше из этих имен или групповой символ с Get-Stat, чтобы найти характеристики сервера. Возможны следующие варианты спецификации:

Get-Stat -Stat cpu.usage.average
Get-Stat -Stat cpu.u*.average

Get-Stat применима и без перечисления типов статистики. Вы можете просто ввести

Get-Stat

чтобы узнать о процессоре, диске, памяти и просмотреть статистику использования сети для вашего сервера.

 

Экран 3. Список типов статистики

Список виртуальных машин

Вы можете использовать простую команду для регистрации виртуальной машины на сервере VMware. Для нахождения каждой зарегистрированной виртуальной машины на сервере, к которому есть подключение в данный момент, выполните команду

Get-VM

Эта команда возвращает список объектов виртуальным машинам VMware; по умолчанию показывается имя каждой машины, PowerState, процессор и размер памяти. Команда Get-VM поддерживает несколько параметров, которые вы можете задействовать, чтобы отфильтровать вывод. Чаще всего я использую параметр Name. Вы можете задать одно или много имен, используя групповые символы. Следующая команда возвращает все виртуальные машины, имена которых начинаются с XP или Vista:

Get-VM -Name XP*, Vista*

Параметр Name применяется для возврата всех машин в имеющейся системе или для отбора по образцу имени. Тем не менее, если вы хотите работать со всей инфраструктурой VMware, необходимо исследовать и другие параметры для Get-VM в документации; вы можете фильтровать возвращаемые данные, которые относятся к одному или нескольким заданным хранилищам данных, центрам данных, папкам или кластерам.

Создание новых машин, клонов и снимков

Управление совокупностью виртуальных машин — это отдельная тема. Однако основные примеры не так сложны для рассмотрения (они находятся в документации, наряду с прочими примерами).

Настраивая новую производственную виртуальную машину, я обычно начинаю с шаблона. Все, что вам нужно, это имя шаблона и имя для новой машины. При работе с шаблоном Windows XP Professional VMware с именем XppTemplate создадим гостевую систему с именем Xpp05:

New-VM -Template XppTemplate -Name
   Xpp05

Для клонирования используйте команду New-VM, задавая имя существующей машины, а не шаблон. Это будет полная копия исходной системы (способа создать прилинкованный клон машины с помощью команд нет). Для создания клона виртуальной машины с именем Xpp05 на новой тестовой системе XpTesting выполните команду:

New-VM -VM Xpp05-Name XpTesting

Для создания мгновенного снимка XpTesting используем New-Snapshot, чтобы потом вернуться к нему при необходимости:

New-Snapshot -VM XpTesting -Name
   Creation

Эта команда создает снимок, названный Creation.

Цикл виртуальных машин

В VMware есть команды для управления состоянием виртуальных машин. Что касается большинства из них, то вы можете выполнять задачи только при условии установки VMware Tools внутри виртуальной машины.

Виртуальная машина запускается командой Start-VM. Вы можете запустить машину Xpp05 следующим образом:

Start-VM -VM Xpp05

Для других операций большое значение имеет набор VMware Tools. Без установки в гостевой операционной системе VMware Tools вы будете перезапускать, приостанавливать или выключать Xpp05 посредством следующих команд:

restart-VM -VM Xpp05
Suspend-VM -VM Xpp05
Stop-VM -VM Xpp05

Если вы установили VMware Tools на гостевой системе, VMware будет вносить изменения через операционную систему, вместо того чтобы принудительно реализовывать их. Чтобы выполнить команды «Перезапустить», «Приостановить» или «Выключить» через VMware Tools, используйте следующие комбинации:

Restart-VMGuest -VM Xpp05
Suspend-VMGuest -VM Xpp05
Shutdown-VMGuest -VM Xpp05

Будьте внимательны: хотя команды VMGuest «вежливы» с гостевой операционной системой, они не предупреждают подключенных пользователей об изменении состояния. Если вы выключаете запущенные машины любой из этих команд, подсоединенный пользователь увидит либо что-то похожее на принудительное выключение системы (с Shutdown-VMGuest), либо просто исчезнувшую сессию (при использовании Stop-VM).

Перемещение запущенных виртуальных машин

Если у вас имеется множество серверов VMware, можно перемещать запущенные виртуальные машины в корректно настроенном совместно используемом хранилище с одного сервера на другой, используя VMware VMotion. Предположим, у вас есть виртуальная машина, названная XP17 на VMware-хосте VH1. У вас есть соединение с сервером VH1 и вам нужно переместить XP17 на VMware-хост VH2. Все, что вам нужно сделать, это получить объект виртуальной машины, затем использовать этот объект и адрес целевого хоста, чтобы совершить перемещение, как в случае

Move-VM -Destination VH2-VM XP17

Подавление подтверждений в командах PowerCLI

После рассмотрения нескольких примеров PowerCLI вы, вероятно, заметили, что, если ваши действия затрагивают подключение к серверу VMware или к сессии пользователя, используемая вами команда PowerCLI выдает запрос на подтверждение. Это может досаждать в сценариях, если вам нужно запускать их автоматически.

Для любой команды, которая выдает запрос на подтверждение, вы можете подавить запрос, если явно установите параметр Confirm в false. Вам нужно знать одну деталь, касающуюся использования Confirm таким образом; вы должны объединить имя параметра со значением $false с помощью (:), что будет выглядеть так: -Confirm:$false. Например, чтобы подавить запрос в Restart-VMGuest, нужно сделать следующее:

Restart-VMGuest -VM Xpp05-
   Confirm:$false

Это необходимо, поскольку параметр Confirm есть параметр переключения. Имя само по себе без аргумента говорит PowerShell, что вы хотите получить запрос на подтверждение. Используя двоеточие, вы явно указываете PowerShell, что значение после двоеточия — это аргумент параметра.

Отключение от сервера

Последний значимый шаг в сценариях — и в интерактивных сессиях PowerCLI, если вы собираетесь работать настолько аккуратно, насколько возможно, — это отключение соединения с сервером. Просто используйте

Disconnect-VIServer

После этого действия текущее соединение с сервером будет закрыто.

Хотя PowerShell и VMware в конечном итоге приведут в порядок соединения и без описанного шага, я настоятельно рекомендую сделать это действие привычным, особенно в сценариях, разработанных для выполнения сложных задач на сервере. Явное закрытие соединения сразу освобождает ресурсы и уменьшает риск случайного неправильного исполнения операций, приводящих к ошибкам на сервере.

Получение помощи: ресурсы PowerCLI

Хотя мы и прошлись по полной сессии администрирования VMware, но затронули только малую часть несложных команд, которые вы можете задействовать, и рассмотрели всего несколько задач, которые можно выполнить в PowerCLI. Некоторые ресурсы могут помочь вам быстро во всем разобраться и полнее использовать PowerCLI.

Команды PowerCLI внутренне документируются так же, как «родные» команды PowerShell, поэтому вы можете использовать Get-Help и Get-Command, чтобы исследовать команды в общем или изнутри сессии PowerCLI.

PowerCLI также предусматривает специфичные для PowerCLI команды Get-VICommand и Get-PowerCLIHelp.

Стандартная установка PowerCLI включает руководства, которые могут использоваться и без PowerCLI. Если вы заглянете в папку VMware vSphere PowerCLI, то найдете ссылку на файл Windows Help, имеющий имя vSphere PowerCLI Cmdlets Reference; это версия с графическим интерфейсом подсказки из консольного режима. Там же расположен файл PDF с именем vSphere PowerCLI Administration Guide, который обеспечивает расширенный обзор использования PowerCLI.

Наконец, существует в высшей степени полезное сообщество пользователей PowerCLI. Оно находится по адресу communities.vmware.com/community/vmtn/vsphere/automationtools/powercli. Сам PowerCLI также содержит команду Get-PowerCLI

Community, автоматически открывающую окно браузера на сайте сообщества. Эксперты сообщества пользователей и разработчики VMware принимают участие в веб-дискуссиях сообщества; кроме того, сайт представляет пополняющуюся коллекцию сценариев и других полезных материалов по PowerCLI.

Алекс Ангелопулос (aka@mvps.org) — старший ИТ-консультант, специализируется на технологиях автоматизации административных задач