Показанные сообщения отсортированы по дате запроса (NFS). Сортировать по релевантности Показать все сообщения
Показанные сообщения отсортированы по дате запроса (NFS). Сортировать по релевантности Показать все сообщения

понедельник, 23 января 2012 г.

к вопросу о резервном копировании ESXi с бесплатной лицензией

 

Из переписки:

 

Pavel Alexei:

Добрый день

Читаю уже давно Ваш блог.

Давно бьюсь с задачей backup free версии ESXi, которое бы воспринимало thin файлы. Все коммерческие продукты backup не работают с free версией ESXi, так как в ней отсутствует vStorage APIs for Data Protection.

К сожалению единственное на текущий момент решение, которое я нашел, это ghettoVCB, причем первой версии, которая работает как скрипт на консоли ESXi. Но и тут есть подвох, не могу «вытащить» куда-то на сторону thin vmdk файлы. Даже если монтировать в качестве внешнего datastore NFS шару, то и там -flat.vmdk в виде sparse файлов лежат. А хочется иметь возможность положить куда-то «далеко». Если NFS от линукс, то можно там, на месте, это зажать при помощи tar -S, тогда tar понимает что это sparse файл, и получаем то что хочется. Этот «маленький» tar можно переложить куда хочется.

НО, хочется большего :-) Хочется нормальный GNU tar под ESXi, чтоб делать все там, на месте. Есть где-то «нормальные» портированные gnu утилиты под ESXi?

 

я:

приветствую.

мне такого не встречалось.
впрочем, я и не искал - не вставало такой задачи.

 

Pavel Alexei:

По ходу я нашел. Совсем случайно

http://ftp.cica.es/mirrors/Linux/pramberger.at/vmware/esx4i/IPKGS/

правда установить через ipk не получилось, но зато смог вытащить, ipk это tar.gz.

Теперь могу

tar cvfzS XXX.tgz XXX.vmdk XXX-flat.vmdk

можно свободно переносить XXXX.tgz. Этот tar sparse он точно понимает, из 4GB «пустого» vmdk файла она создала 10KB tgz, хотя ls показывает 4GB

Тут же вижу есть rsync, понимающий sparse файлы.

И еще coreutils с кучей полезностей. 

Может еще пригодиться, чтоб не мучать по чем зря ssh/scp - ftp клиент для vmware (ftpput/ftpget)

http://www.magikmon.com/download/mksbackup/

суббота, 12 ноября 2011 г.

View 5

 

Интересная инфа про обновления максимумов для View 5 – A Review of VMware View 5.0 Limits and Maximums.

Вкратце:

  • если использовать связанные клоны, то в кластере не может быть больше 8 серверов (как и раньше);
  • нежесткая рекомендация по числу vCPU на ядро – теперь 16;
  • в одном пуле десктопов до 1000 десктопов, в том числе для Linked Clones;
  • если СХД поддерживает VAAI, то на одно хранилище нормально положить до 140 ВМ. Без VAAI – до 64. С NFS непонятно что;
  • до 2000 ВМ на vCenter;
  • 512 ВМ на сервер;
  • 1 connection server с туннелированием клиентских сессий обслужит до 2000 подключений.

понедельник, 24 октября 2011 г.

Auto Deploy

Что это:

Auto Deploy – это cервер дистанционной загрузки ESXi по PXE

Зачем он нужен :

Для упрощения ввода в эксплуатацию новых серверов, обновления существующих.

Как это работает:

Для того, чтобы ввести новый сервер в эксплуатацию, нам не надо устанавливать на него ESXi. Нам надо:

1) Включить этот сервер, биос должен быть настроен на загрузку по сети.
2) Дождаться, пока на этом сервере не запуститься ESXi, и он не будет автоматически добавлен в vCenter.
3) Создать файл ответов для профиля настроек этого сервера – всякие IP адреса, имя, и прочее уникальное.

После этого при каждой перезагрузке пункт 2 будет повторятся, но уже без нашего вмешательства к серверу будут применяться настройки.

Заменив только образ на сервере AutoDeploy, мы получим обновленные сервера ESXi просто после их перезагрузки, так как стартовать они будут с этого обновленного образа.

Выводы


Прикольная штука. Работает. Нареканий, на удивление, не вызвало.

Однако с использование в производственной среде пока непонятно – смущает зависимость возможности старта всех(!) серверов ESXi от машин vCenter и AutoDeploy.

Получается, они должны работать или на отдельном кластере vSphere, или на железном сервере, рядом с которым стоит резервный железный сервер.

Интересно послушать ваши мнения, особенно тех, в чем ведении десятки и сотни серверов ESXi.

Настройка VMware Auto Deploy

Шаги настройки этого продукта.
1) Устанавливаем Auto Deploy под Windows.
image
По идее, правильно это делать на отдельную машину, однако у меня почему-то не получилось – выдавало ошибки о невозможности сгенерить ssl. В итоге поставил на машину с vCenter.

Кстати, на vCenter Appliance служба Auto Deploy уже предустановлена.

После успешной установки появляется пиктограмма на странице Home в клиенте vSphere
image
2) Устанавливаем доп-софт, настраиваем DHCP и TFTP
  • PowerCLI
  • какой-нибудь TFTP-сервер
  • нужен будет DHCP
Я, для быстрого теста, в качестве и DHCP и TFTP использовал http://tftpd32.jounin.net. Также TFTP и DHCP требует специальной настройки:

Пройдя по иконке Auto Deploy в клиенте vSphere, мы получим возможность загрузить файл – TFTP Boot.

image 
Следует загрузить этот архив, и распаковать в папку, выбранную для доступности по TFTP. Файл “undionly.kpxe.vmw-hardwired” следует указать как загрузочный образ.
В настройках DHCP следует прописать параметры:
66 – адрес сервера TFT
67 – имя файла загрузки (undionly.kpxe.vmw-hardwired)
(для серверов с EFI вместо BIOS файл вроде другой).

Теперь в данном сегменте сети сервера могут загрузиться по PXE, однако загружается только предварительная оболочка, которая ругается что нет образа ESXi для загрузки его на данный сервер. image
3) Настраиваем Auto Deploy
Нам потребуется PowerCLI и в нем открытая сессия к vCenter.

Кроме этого, потребуется дистрибутив ESXi (не в виде iso, а в виде zip. Т.н. software depot, загружается там же, где и iso-вариант).

Обратите внимание – этот дистрибутив можно изменить под себя, обновив или добавив драйверы под свое железо, или такие компоненты как, например, виртуальная циска. См. подробности тут – Image builder. В моих примерах как раз дистрибутив с параметрами из этого поста.

После этого:
## Регистрация дистрибутива ESXi
Add-EsxSoftwareDepot D:\depot\esxi5.0.0-with_LSI-469512.zip

## Список вариантов его загрузки, они могут отличаться модулями
Get-EsxImageProfile

## аплоад дистрибутива на AutoDeploy. Name - на свое усмотрение. 
## Item – указание базовых настроек этого дистрибутива. 
## Во первых - Image Profile, см. предыдущую команду. 
## Т.е. мы можем указывать, какие модули должны или не должны быть загружены. 
## Далее - контейнер в vCenter, куда следует поместить свежезагруженный хост. 
## Это объект типа Datacenter\Cluster\Folder.
## Pattern- признак сервера, на котором запускать этот дистрибутив с этим профилем
## Вместо паттерна для выборки серверов можно указать –AllHosts
New-DeployRule –Name “FirstBoot” –Item “With_LSI”,ClusterAutoDeploy,2AutoDeploy –Pattern “model=VMware Virtual Platform”

## Регистрация правила, созданного ранее
Add-DeployRule -DeployRule FirstBoot
В командлете New-DeployRule параметром –Item мы привязываем к стартующим с этого правила серверам контейнер в vCenter (datacenter, cluster, folder) куда они должны быть помещены, Image profile, host profile.

Кроме как для самого первого сервера указывать, скорее всего, будем сразу несколько параметров, как в моем примере:
–Item “With_LSI”,ClusterAutoDeploy,2AutoDeploy
  • “WithLSI” это Image Profile
  • ClusterAutoDeploy – имя моего кластер HA\DRS
  • 2AutoDeploy – название профиля настроек, host profile. У вас его пока нет, поэтому в самый первый раз его не указывайте, укажем позже.
Теперь сервера начнут загружаться в ESXi. И даже автоматически будут зарегистрированы в vCenter, в тот Datacenter, Cluster или Folder, который был указан при создании правила (у меня это кластер). Какие паттерны, признаки серверов, доступны:
PS C:\> get-vmhostattributes -vmhost "esxi01.vm4ru.local”

name  value 
----  ----- 
vendor  VMware, Inc.
uuid  423fecf3-eea1-a89b-5213-aeea6f50bf60
model  VMware Virtual Platform
gatewayv4 192.168.10.100
ipv4  192.168.10.51
hostname esxi01
domain  vm4ru.local
ipv4  192.168.111.1
oemstring Welcome to the Virtual Machine
asset  No Asset Tag
oemstring [MS_VM_CERT/SHA1/27d66596a61c48dd3dc721...
mac  00:50:56:bf:03:1b
mac  00:50:56:bf:03:1c
mac  00:50:56:bf:03:1d
mac  00:50:56:bf:03:1e
Как видите, мы можем довольно точно назначать тот или иной образ ESXi на сервера по критериям. По производителю, по mac адресу, и пр.
4) Настройка автоматической настройки серверов
Итак, первый сервер стартовал и даже был добавлен в vCenter.

Однако – сервер никак не настроен.

С учетом того, что ESXi был загружен в память по сети, даже если что-то настроить руками – эти настройки пропадут после перезагрузки.

Поэтому для настройки серверов, разворачиваемых при помощи Auto Deploy используется механизм Host Profiles, параметры которого сохраняются в базе vCenter.

Нам потребуется настроить этот первый сервер:
  • Виртуальные коммутаторы, интерфейсы VMkernel.
  • iSCSI, NFS
  • Syslog
  • NTP
  • и пр.
Теперь создадим с этого сервера профиль, и сразу на этот же сервер его и назначим.

Проверим на соответствие. Проверка покажет расхождения в конфигурации, нам потребуется создать файл ответов (Update answer file).

После прохождения мастера – Check answer file, затем check complince.

Значение в столбце Answer File Status должно стать Complete, настройки сервера должны стать соответствующими этому профилю.

Все. Теперь при перезагрузках сервер будет не только загружать на себя ESXi, но и конфигурацию подтягивать.

На этом этапе мы имеем первый сервер, и этот сервер загружается по сети, и настраивается профилем настроек.
5) Настройка загрузки второго и всех следующих серверов:
Надо изменить правило AutoDeploy так, чтобы оно еще профиль настроек привязывало к загружаемым серверам. Допустим, вы делали по моему примеру, и создали правило командой:
New-DeployRule –Name “FirstBoot” –Item “With_LSI”,ClusterAutoDeploy –Pattern “model=VMware Virtual Platform” 
Удалим это правило командой:
Remove-DeloyRule “FirstBoot” –delete
Создадим заново, но теперь указав и ранее созданный профиль настроек:
New-DeployRule –Name “ProductionRule” –Item “With_LSI”,ClusterAutoDeploy,2AutoDeploy –AllHosts
Ну и активируем:
Add-DeployRule -DeployRule ProductionRule
Все.

Теперь любой новый сервер, будучи загруженным в первый раз, сразу попадает в кластер “ClusterAutoDeploy”, и на него назначается профиль настроек “2AutoDeploy”.

Нам остается нажать “Update answer file”, указать уникальные параметры типа IP адресов и т.п., и все – сервер готов к эксплуатации, его настройки после каждой перезагрузки будут подтягиваться из этого файла ответов.
Обновление образа
Допустим, у нас есть желание заменить дистрибутив ESXi, с которого стартуют сервера. Например, мы хотим использовать VMware HA – и нам имеет смысл добавить его агента сразу в образ. Для этого нам потребуется следующие команды:
## Добавление источника пакетов
Add-EsxSoftwareDepot http://<IP вашего vCenter>:80/vSphere-HA-depot

## Создание нового профиля образа ESXi
New-EsxImageProfile -CloneProfile ESXi-5.0.0-469512-standard -name “ESXiHA”
## Добавление в новый профиль агента HA – Fault Domain Manager
Add-EsxSoftwarePackage -ImageProfile “ESXiHA” -SoftwarePackage vmware-fdm
## Удалим старое правило старта
Remove-DeployRule “ProductionRule” –delete
## Создание нового правила AutoDeploy, на основе нового профиля
New-DeployRule –Name “ProductionRule” –Item “With_LSI”,ClusterAutoDeploy,2AutoDeploy –AllHosts
Add-DeployRule -DeployRule “ProductionBootRule”
Более подробно про обновление образа именно на новую версию ESXi тут – Updating your ESXi host using VMware vSphere 5 Autodeploy.

Еще про CoreDump надо будет написать.

UPD. Troubleshooting Auto Deploy Rules.

По мотивам раз, два, три.

понедельник, 10 октября 2011 г.

vSphere Virtual Storage Appliance


Итак, VSA, виртуальная система хранения для вСферы – это продукт, позволяющий взять два или три сервера ESXi, настроить зеркалирование между их локальными дисками, и эти зазеркалированные диски сделать доступными всем серверам как NFS-ресурсы. Таким образом, мы получаем программный общий сторадж, что позволяет нам использовать функции живой миграции и высокой доступности имея только 2-3 сервера и все, без аппаратной системы хранения.
На сегодняшний день это решение обладает довольно большими ограничениями, и я не верю в массовость его использования, однако штука интересная и разобраться в ней хочется.

Кстати - очень качественное демо продукта доступно тут - vSphere Storage Appliance - Offline Demo for your use.. По сути - интерактивный флеш-ролик.

Условия


2 или 3 сервера ESXi, на которых будут работать виртуальные машины VSA. Эти сервера и эти ВМ образуют  VSA-кластер. Этот кластер предоставляет NFS-ресурсы, а подключаться к ним могут как хосты-участники кластера, так и любые хосты ESXi.
Если vCenter в ВМ, то эта ВМ не должна использовать VSA-хранилище или работать на сервере ESXi, который участвует в VSA-кластере.
Для ВМ на VSA-хранилище рекомендуется выравнивание по границе 4 КБ, и размер одной операции IO равным или кратным 4 КБ.
В серверах ESXi должно быть минимум 6 ГБ ОЗУ, 4\6\8 дисков в RAID10, 4 гигабитных порта Ethernet.
Сервера должны быть с настройками сети по умолчанию, как сразу после установки.

Архитектура


Суть довольно простая – поднимаем ВМ VSA на каждом сервере VSA-кластера. VSA ВМ использует локальные диски сервера где работает, и зеркалирует эти диски с другими VSA-ВМ этого кластера. За счет зеркалирования мы имеем отказоустойчивость – наши данные не теряются при плановом или неплановом выключении одного сервера ESXi.
Конфигурация кластера VSA на двух и на трех серверах ESXi различается. В случае двухузлового кластера на сервер vCenter необходимо будет установить вспомогательную службу VSA cluster service, которая будет выступать арбитром при обработке спорных ситуаций между двумя VSA-ВМ. Когда VSA-ВМ три – они сами разберутся
Два узла:

vsa-2
Три узла:
vsa-3

Подготовка инфраструктуры

Потребуется 2 или 3 сервера ESXi (плюс еще на одном должен работать vCenter).
ESXi – по сути – должны быть свежепоставленные! В частности, конфигурация сети должна быть по умолчанию.
Потребуется по два IP адреса на VSA-ВМ, и по два IP-адреса для каждого сервера ESXi. Один IP на каждый VSA – для приватной сети, какая-нибудь отдельная подсеть, остальные – из management подсети.

Внедрение VSA


Первый шаг – установка VSA manager на vCenter.
Ничего сложного – setup.exe –> next,next,finish.
После установки в клиенте vSphere появляется вкладка VSA для объекта Datacenter.
image
На шаге Select Hosts нам потребуется выбрать два или три сервера – будущих участников кластера VSA.
Следующий шаг – настройка сети.
image
Нам потребуется указать:
VSA Cluster IP – адрес ведущего узла кластера VSA. Используется в сервисных целях.
Если узлов в кластере VSA только два, то в спорных ситуациях будет необходим VSA Cluster service на vCenter. Ему потребуется VSA Cluster Service IP.
VSA management IP – кроме названия пока ничего про него не могу сказать.
VSA Datastore IP – с этого адреса будет подключен NFS-ресурс. Указывается для каждой ВМ в кластере VSA.
VSA Featured IP – будет создан интерфейс vmkernel c этим адресом. Через этот интерфейс будет производится vMotion обычных ВМ (т.е. напрямую к работе кластера VSA этот интерфейс не относится). Указывается для каждого сервера – участника кластера VSA.
В документации указано не использовать для этих адресов диапазон 192.168.xxx.xxx Почему – хз.
Так же, я пока не до конца понял через какой интерфейс ESXi подключает NFS ресурс. Пока что получается что через свой management?
В принципе, все. Ввод VSA в эксплуатацию весьма прост. Мастер сам развернет VSA-ВМ на хосты, сам создаст дополнительный вКоммутатор и группы портов, интерфейсы VMkernel, подключит ресурсы NFS.
После завершения работы мы увидим три хранилища NFS:
image
(или два, если в VSA-кластере у вас только два сервера).
Ну и статус кластера на соответствующей вкладке.
image
Необходимые элементы сети будут созданы автоматически:
image
Через верхний вКоммутатор (Front End) идет управление и NFS трафик , через нижний (Back End) – узлы VSA кластера обмениваются сигналами пульса и реплицируют диски.

Эксплуатация

С точки зрения использования VSA – это просто два или три хранилища, на которых можно создавать ВМ.
А что с обслуживанием?
Если ломается Front End сеть одного из хостов, то одно из NFS хранилищ отваливается. ВМ, расположенные на нем, становятся недоступными. И, в общем-то, все. Пруф, видео.
А если ломается Back End – то не происходит ничего, ВМ просто продолжают работать – так как хранилища зеркалируются между VSA-ВМ, и в этому случае отрабатывает failover. Пруф, видео. Сюда же попадает ситуация когда ломается один из серверов ESXi целиком.
В случае проблем один из узлов кластера VSA можно заменить штатными средствами, из GUI.
Однако добавить в кластер их двух узлов третий узел нельзя – следует сразу создавать VSA-кластер из требуемого количества узлов. Также, добавив дисковых ресурсов на сервера ESXi, нельзя добавить их в VSA.

Размышления про применимость

VSA обладает некоторыми особенностями, многие из которых попадают, к сожалению, в разряд минусов.
Видимая вендором схема использования VSA – инфраструктура с тремя-четырьмя серверами, которую развертывают и сразу начинают использовать с VSA.
Большая головная боль –
1) vCenter необходим.
2) vCenter должен работать на отдельном сервере, где VSA компонентов нет!
Ну, или хотя бы не использовать VSA хранилище для себя – т.е. лежать на локальном хранилище какого-то их хостов – тоже не айс, и решение не поддерживаемое.
Получается, если у нас два или три сервера ESXi в кластере VSA – то требуется еще один сервер. Этот “еще один” или
  • с физическим vCenter
  • или с ESXi – на котором работает vCenter (vCenter может быть расположен на VSA хранилище). Этот сервер может использовать VSA хранилище и быть объединенным в кластер HA с остальными серверами.
VSA использует локальное хранилище серверов ESXi, однако из за зеркалирования только половина места доступно для размещения ВМ. Если учесть, что поддерживаемая конфигурация требует чтобы на серверах использовался RAID 10 – то в  итоге мы получаем доступным для ВМ только одну четвертую от общего объема дискового пространства на серверах-участниках кластера VSA.
Подобные размышления применимы и к производительности – когда одна из ВМ генерирует запрос на запись, этот один запрос пишется на 4 диска (так как он уходит на две VSA-ВМ, а затем каждая VSA-ВМ записывает его на массив RAID 10).
И да – VSA сильно не бесплатна. Если не удается выбить хорошую скидку, то купить сервера без дисков плюс аппаратное хранилище часто окажется дешевле, чем сервера с хорошими raid контроллерами и дисками на тот же объем и производительность.

Хаки

Если хочется установить VSA на сервера ESXi, где уже есть работающие ВМ - How to Install VMware VSA with Running VMs.
Если хочется установить VSA на сервера ESXi, которые сами работают в виртуальных машинах (для демостенда самое то) – How to Install VMware VSA in Nested ESXi 5 Host Using the GUI.
Для обращения в локальную консоль – svaadmin\svapass.

По материалам

Useful Links – vSphere Storage Appliance (VSA).
vSphere Storage Appliance (VSA) - Useful Links [Updated].
vSphere Storage Appliance (VSA) Resilience - Network Outage Videos
vSphere Storage Appliance (VSA) Resilience - Network Outage Scenario #1: Back End
vSphere Storage Appliance (VSA) Resilience - Network Outage Scenario #2: Front End
How to Install VMware VSA in Nested ESXi 5 Host Using the GUI
How to Install VMware VSA with Running VMs

среда, 5 октября 2011 г.

ghetto VCB upgrade

Из переписки:

Михаил, добрый день!

Широко известный скрипт для резервного копирования виртуальных машин ghetto VCB для копирования файлов c ESXi на NFS-сторадж использует Linux-команду "cp".

Недостаток этой команды заключается в том, что cp на ESXi'e очень медленно работает, давая скорость копирования в среднем 5-7 Мегпабайт в сек. Это особенно критично для тяжёлых виртуальных машин, копирование жёсткого диска на 100 Гб будет выполняться не менее 5-и часов.

Команда cat выполняется в разы быстрее, у меня данная команда полностью покрывает по скорости пропускную способность сети и жёстких дисков, давая в итоге 50-70 Мегабайт в сек, т.е. в 10 раз быстрее cp.

Единственный недостаток команды cat - нельзя указать для копирования группу файлов, но это легко обходится. Я не стал править оригинальный скрипт, а разработал свой собственный:


#!/bin/sh
#------------------------------Переменные------------------
NFS=/vmfs/volumes/DebShare/
Datastore=/vmfs/volumes/BigStore/
VMid=96
VMName=SBS
PathNFS=$NFS$VMName/1/`date +%d.%m.%Y`


#------------------------------Подготовка каталогов на NFS-сервере--------
rm -R $NFS$VMName/5
mv $NFS$VMName/4 $NFS$VMName/5
mv $NFS$VMName/3 $NFS$VMName/4
mv $NFS$VMName/2 $NFS$VMName/3
mv $NFS$VMName/1 $NFS$VMName/2


mkdir $NFS$VMName/1
mkdir $PathNFS

#-----------------------------Создание снепшота
vim-cmd vmsvc/snapshot.create $VMid disksnap 0 1

cat $Datastore$VMName/$VMName-flat.vmdk > $PathNFS/$VMName-flat.vmdk
cat $Datastore$VMName/$VMName.vmdk > $PathNFS/$VMName.vmdk

vim-cmd vmsvc/snapshot.removeall $VMid

#-----------------------------Копирование файлов
cat $Datastore$VMName/$VMName.nvram > $PathNFS/$VMName.nvram
cat $Datastore$VMName/$VMName.vmx > $PathNFS/$VMName.vmx
cat $Datastore$VMName/$VMName.vmsd > $PathNFS/$VMName.vmsd
cat $Datastore$VMName/$VMName.vmxf > $PathNFS/$VMName.vmxf


Thx Egros

- пост с мобильного устройства, сорри за краткость и опечатки.


среда, 28 сентября 2011 г.

StorCenter PX4-300R

 

Это вряд ли массово интересно, однако мало ли Улыбка

cc24020885b6cfc3099a651d27fb9d9d

Мне тут попались на глаза самопальные тесты системы хранения сильно начального – StorCenter PX4-300R.

Доступен стоечный вариант, 4 слота под диски, два гигабитных порта, дублированный блок питания, поддержка iSCSI и NFS, официальная совместимость с vSphere (в том числе версии 5, правда только для iSCSI).

Так вот, сами тесты на четырех двух-террабайтных дисках в RAID5 – Performance test of Iomega StorCenter PX4-300R.

screen03

На графиках еще приведены результаты тестирования предыдущей модели того же вендора (IX4).

Интересно, что в реализации Iomega при большом проценте записи NFS сильно отстает от iSCSI. Выравнивание разделов на результаты тестов влияло, но в пределах процентов 5, что не особо существенно.

суббота, 17 сентября 2011 г.

Windows Services for Unix - NFS для ESXi

суббота, 10 сентября 2011 г.

UDA, Ultimate Deployment Appliance


Есть такая штука – UDA, Ultimate Deployment Appliance.
Это – виртуальная машина, готовая быть сервером дистанционного развертывания.
И сейчас я расскажу как ее можно применить для решения моей специфической задачи.

 Введение


Есть десяток однотипных серверов. На них необходимо регулярно переустанавливать ОС – в моем конкретном случае преимущественно разные версии ESX\ESXi, хотя бывают нюансы. Притом хочется сразу и предварительные настройки делать.
Конечно, как вариант можно снять образ с каждого сервера – но это означает как минимум:
  • потратить немало места
  • получить усложнения при обновлении состояния образа
Поэтому я попробовал другой вариант – установка по сети, с файлом ответов.
К счастью, есть специализированное решение – UDA, Ultimate Deployment Appliance.
uda01_01

Первоначальная настройка

Идем сюда 0 http://www.rtfm-ed.co.uk/vmware-content/ultimate-da/, и загружаем архив с UDA формате OVA – если планируем импортировать эту штуку на ESXi.
Или, как вариант, идем на оригинальный сайт проекта - http://www.ultimatedeployment.org - и загружаем архив с виртуалкой в формате Workstation..
В клиенте vSphere выберем File –> Deploy OVF Template, укажем на распакованный из архива ova-файл и дождемся окончания импорта.
После этого виртуальную машину включаем, и в ее консоли проходим мастер первоначальной настройки – всякие пароли пользователей по умолчанию и все такое.
Единственно важный вопрос – какой DHCP сервер мы будем использовать.
Вариантов два – или DHCP сервер прямо внутри UDA, какой другой. Я выберу второй вариант – чуть позже укажу что надо настроить на внешнем сервере DHCP .

После первоначальной настройки имеет смысл прокачать нашу UDA (внимание, этот шаг может устареть в дальнейшем) – скачиваем tgz- архив с обновлением - Patch of UDA for ESX – Build 20 - , через веб-интерфейс его указываем в пункте System –> Upgrade – UDA обновляется до сборки, поддерживающей ESXi 5.
Затем можно поставить VMware tools – через клиент vSphere  подмонтировать к ВМ с UDA стандартный iso с Linux-дистрибутивом тулзов, и через веб-интерфейс указать ставить VMware tools с локального cdrom.
uda02_01

Ну и настройка внешнего DHCP – я использовал DHCP на Windows 2008:
надо включить опции 066 Boot Server Host Name и 067 Bootfile Name.
Boot Server – IP-адрес нашей UDA,
Имя загрузочного файла - pxelinux.0 .

 

Настройка ОС для установки

Ну а теперь начнем делать подготовительные шаги и настраивать UDA. Хорошая новость – все, что касается настроек UDA, делается через веб-интерфейс.
Нам надо
1) Сделать доступным дистрибутив. Я буду использовать SMB-сетевой ресурс, кому-то может быть удобнее NFS или скопировать iso прямо внутрь UDA.
2) Монтировать образ дистрибутива ОС. У меня на примере ESXi 4.1.
3) Создать “template” – это название пункта меню, ссылающегося на какой-то дистрибутив с каким-то файлом ответов.

Создаем сетевой ресурс с iso-образом дистрибутива ОС, которую\которые хотим устанавливать. Доступ необходим read-write, и для учетной записи с непустым паролем. Образ можно расположить не только в корне сетевого ресурса.
Затем в веб-интерфейсе UDA идем в пункт Storage –> New.
Заполняем поля:
uda03_01

Затем нам следует “зарегистрировать” дистрибутив ОС, которую планируем устанавливать через vMA. Идем в пункт OS –> New.
На первом шаге указываем “Flavor Name” – метка дистрибутива для UDA, и тип гостевой ОС.
uda04_01
На втором шаге – выбираем образ iso с ранее зарегистрированного хранилища (в моем случае это ранее описанный SMB-сетевой ресурс).
Все.
Последний шаг – создание шаблона. Пункт Templates меню веб-интерфейса, –> New.
Там мы выберем ранее зарегистрированный дистрибутив (Flavor), и имя шаблона. Имя шаблона затем мы увидим при загрузке сервера-жертвы, так что лучше имя давать говорящее.
Важный шаг – после создания выделит свежесозданный шаблон, и нажать кнопку Configure – > Advanced. В этом пункте меню нам доступен для редактирования файл ответов.
Информацию по файлам ответов и их параметрам можно найти в документации
А еще одна интересная возможность – создания “подшаблонов”, Subtemplates.
Это когда мы в файле ответов шаблона используем переменные вместо уникальных параметров, таких как имя ОС и IP-адрес. А в пункте Subtemplates перечисляем значения этих переменных.
В моем случае, соответствующий шаблону файл ответов выглядит так:
   1: accepteula


   2: rootpw password

   3: autopart --firstdisk --overwritevmfs

   4: install 

   5: url http://[UDA_IPADDR]/[OS]/[FLAVOR]

   6: network 

   7: --bootproto=static --ip=[IPADDR] --gateway=192.168.22.253 

   8: --nameserver=192.168.22.252 --netmask=255.255.255.0 

   9: --hostname=[HOSTNAME]

  10: reboot


(Хорошая новость – сам файл ответа, без учета переменных, генерируется автоматически. А мы лишь правим под себя)


И список переменных:

   2: SUBTEMPLATE;IPADDR;HOSTNAME

   3: esxi_4_01;192.168.22.1;esxi01

   4: esxi_4_02;192.168.22.2;esxi02

   5: esxi_4_03;192.168.22.3;esxi03

   6: esxi_4_04;192.168.22.4;esxi04

   7: esxi_4_05;192.168.22.5;esxi05

   8: esxi_4_06;192.168.22.6;esxi06

   9: esxi_4_07;192.168.22.7;esxi07

  10: esxi_4_08;192.168.22.8;esxi08

  11: esxi_4_09;192.168.22.9;esxi09

  12: esxi_4_10;192.168.22.10;esxi10

(Названия переменных – на наш выбор)


Теперь, при попытке загрузиться с PXE в этом сегменте сети я вижу меню – список шаблонов:


uda07_01


Выбрав меню с подшаблонами я увижу их список:


uda09_01


И через несколько минут после выбора нужного подшаблона я имею готовый к работе сервер:


uda10_01


Ну а дальнейшая настройка крайне удобна при помощи скриптов PowerCLI.

воскресенье, 17 июля 2011 г.

home lab


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

Несколько лет назад я закупил компьютер.

Обычный писюк, двухядерный процессор, 8 ГБ памяти.
Поставил на него Windows 7, VMware Workstation 7, и под Workstation несколько виртуальных машин.
В первую очередь это были три виртуалки: ESX1, ESXi2 и vCenter. На хостовой Windows 7 был установлен Starwind, который отдавал этим серверам по iSCSI файл-img, пару сотен гигов размером.





Ну и внутри этих ESX и ESXi были запущены еще несколько ВМ. Например, ворочался полный стенд VMware View - AD, View Server, View Security Server и View Desktop.
Многие из вас видели разнообразные скриншоты, сделанные на этой vSphere - вся моя книга писалась на этом стенде.

Кроме того, иногда я запускал vMA и некоторые другие ВМ на одном уровне с ESX(i) и vCenter - так как их гости, ВМ второго уровня, могли быть только 32-битными. А 64-битность начинала быть все более необходимой - например одна из ролей View ставится только на Windows 2008 R2, а она только x64.

 Конечно, время отклика поражение не вызывало, а иногда требовало и определенной выдержки :), но за свои деньги и занимаемое место этот стенд давал отличные возможности.

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

Тем не менее, такой стенд прослужил мне верой и правдой не один год. Пришла пора двигаться дальше.

Двигаться дальше я стал относительно недавно - когда дошли руки до покрутить пятерку, точнее ее бета версию.

Сделал я очень просто - установил ESXi 5 на флешку, и запустил с нее свой компьютер, вместо Windows 7. Все чудесным образом завелось. Я создал первые три ВМ - два ESXi и vCenter, настроил автостарт вместе с физическим ESXi - все отлично заработало. Ну а упомянутая ранее возможность запускать в гостях второго уровня 64битные ВМ - просто сказка сама по себе.

У нового варианта есть несколько преимуществ перед старым.

Ну, неоспоримое преимущество - это запуск 64битных гостей под виртуальными ESXi. Теперь я должен смочь попробовать любые или почти любые Virtual Appliance, число которых множится с каждым месяцем.
Ну и Hyper-V покрутить лишним не будет. И сторонние VDI решения (хотя Citrix XenDesktop я поднимал и на старом стенде, но тут удобнее все будет) .

Второе - за счет выключения больших страниц (параметр Mem.AllocGuestLargePage = 0, помните недавние посты?) я делаю довольно неплохой memory overcomitment. Все работает шустрее, чем в варианте с Workstation.

Вот, для иллюстрации нагрузка на физическую машину:


Памяти используется 6 600 из 8 000 мегабайт.

В это же самое время запущено несколько ВМ, совокупным объемом выделенной памяти 13 гигабайт.


Две ВМ с ESXi пока простаивают, но vCenter уже установлен и работает, а на Windows 7 в данный момент устанавливается ОС.

Огорчает только одно - если к релизу не изменятся известные сейчас правила лицензирования бесплатного ESXi, я не смогу этим оверкомитментом пользоваться.
UPD. На ESXi 5 с бесплатной лицензией вроде как можно использовать до 32 ГБ на сервер.

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


Один из них в завалявшемся корпусе с SATA-&gt;USB был подключен к моему домашнему роутеру, а он расшарил его по сети, по NFS. Работает на удивление стабильно, тьфу-тьфу - ни единого намека на разрывы.









Другой был установлен в свежекупленный SATA-&gt;eSATA, и подключен к свежекупленному PCI контроллеру с eSATA.

Все работает замечательно.

Теперь я планирую место на этом диске использовать как основное хранилище, и в частности пробовать его расшаривать через Stariwind (апробированное решение), Starwind Virtual Appliance (интересно поиграться и сравнить) и VMware Virtual Storage Appliance (если заведется, там вроде есть какие-то ограничения - буду изучать).

Однако есть неудобство - Windows на этом компьютере использовала два диска - старый 300 ГБ для себя, и 2 ТБ под все остальное. У нас дома эта машина выполняет роль файл-сервера. Например, на ней я держу папку Images, со всеми образами (на ноуте они тоже есть, но иногда частично тасуются, а большом диске стационарного компьютера места еще много). Получается, сейчас эти данные недоступны.
Пичаль пичаль.

Однако, нет! Я же могу прокинуть этот большой диск в ВМ, как RDM! Впрочем, не могу - RDM не работает для большинства локальных дисковых контроллеров.
Пичаль пичаль.

Однако, нет! Есть же всякие хаки! И действительно, инструкция из последнего каммента вот к этой полезной статье сработала.

Так что сейчас все те же данные доступны в моей сети. Ура ура.

К компьютеру подключен еще и принтер. Хотел и его пробросить - но в списке доступных для подключения к ВМ usb устройств хоста был только бесперебойник. Странно.

Кстати, никто не знает - есть ли возможность как-то легитимно использовать Windows 2008 для своих стендов в течении продолжительного времени? А то ей хочется активации, а slrmgr/rearm надолго не помогает.

воскресенье, 22 мая 2011 г.

starwind


Я как-то неотреагировал, а недавно компания Starwind объявила о честной бесплатности своего программного iSCSI target под Windows - StarWind Software Inc. Presents Free Version of iSCSI SAN Solution.

Хотя за рекламу мне они не платят, несколько хороших слов про данный продукт мне сказать хочется.

Несколько лет назад я начинал работать с виртуальной инфраструктурой VMware,  и находился в поисках способа организовать разделяемое хранилище для своей тестовой среды. Опробовав несколько вариантов программных iSCSI и NFS стораджей, я ими остался неудовлетворен - по тем или иным причинам.

С какими-то реализациями ESX не захотел работать. С какими-то не захотел работать я :-), особенно это касалось вариантов под Linux.

И тогда я узнал о существовании Starwind software (тогда еще rocket division). Специально поднял свою переписку - в марте 2007 года я написал им письмо с запросом NFR лицензии для демо-стендов, и Anton Kolomyeytsev любезно мне ее предоставил.

С тех пор я наподнимал десятки стендов, некоторые из которых просуществовали по нескольку месяцев, а один - уже почти два  года.

Вот это скриншот Windows 7, в которой установлен продукт от starwind. На этой же Windows 7 установлен VMware Workstation, в виртуальных машинах которой крутятся ESX, ESXi и vCenter, для которых Starwind iSCSI target и предоставляет разделяемое хранилище.




Этой конфигурацией я пользовался для написания небезызвестной в наших узких кругах книги, для изучения, отладки и проверки всякого. Почти два года!

Все это время я ни разу не испытал проблем с продуктом Starwind - ребята, спасибо!

С первых использованных мною версий продукт значительно развился, обзавелся функционалом высокой доступности, дедупликации и др., рекомендую глянуть первоисточник - StarWind Free Edition Overview.


P.S.
Довольно интересен и, местами, даже холиворен вопрос про использовании программных СХД (тем более под винду!!!111) в производственной среде - тут я опытом поделиться не могу, поэтому промолчу. Но, к слову сказать, небезинтересная дискуссия развернулась вот на форуме VMware - Starwind Free.

понедельник, 16 мая 2011 г.

VMware vSphere 4.1 Storage Performance: Measuring FCoE, FC, iSCSI, and NFS


VMware и NetApp зарелизили интересный документ - VMware vSphere 4.1 Storage Performance: Measuring FCoE, FC, iSCSI, and NFS.

Взяли кучу железа, кучу ВМ, кучу нагрузки с них на диски и померяли IOps, нагрузку на процессор и latency для разных протоколов (FC 4 Gbit, iSCSI 1\10 Gbit, NFS 1\10 Gbit, FCOE 10 Gbit).



Вывод - разницы нет что использовать :-)


воскресенье, 24 апреля 2011 г.

Windows 2008 as Storage for vSphere

Недавно мне попались на глаза два способа сделать сетевое хранилище из Windows Server 2008.

Во-первых - стал честно бесплатно доступен Microsoft iSCSI target.
  • Устанавливаем его на Windows 2008 R2 Std\Ent\Datacenter 
  • создаем "iSCSI Target" 
  • добавляем "device" - им может быть только файл vhd
  • указываем идентификаторы iSCSI инициаторов серверов ESX(i) на вкладке "iSCSI Initiators" в свойствах таргета.

Все, теперь данный Windows-сервер представляет из себя систему хранения iSCSI.

Во-вторых, на сайте xtravirt стала доступна инструкция по установке NFS службы - NFS Storage Configuration for vSphere using Windows 2008.
  • Добавляем на Windows-сервер роль File Server, 
  • затем роль AD Domain Services
  • а еще мне потребовалось поднять домен - без этого Identity Management for UNIX ставится не стал. Можно ли заставить его завестись не поднимая домен я не разбирался.
  • теперь создаем группу в AD, слегка меняем ее настройки по умлочанию
  • и расшариваем по nfs требуемый каталог:

 Я опробовал оба варианта - с iSCSI target вообще проблем не было, nfs что-то нестабильно работал :( - при попытке мигрировать на него ВМ процесс долго висит и завершается ошибкой.
Может быть, что-то в моем стенде не так срослось.


суббота, 2 апреля 2011 г.

PowerShell + VMware = PowerCLI. How-to

clip_image001
Данный текст – памятка самому себе, и инструкция для тех, кто с данным скриптовым языком не работал, но хочет (или нужда заставляет).
Эта инструкция не претендует на полноту и академичность. Рекомендации даются те, до которых додумался автор – а не самые лучшие на всем свете и во все времена. Кстати, советы и комментарии приветствуются.
Эта инструкция претендует на быстрое освоение азов и начало использования мощного механизма автоматизации vSphere (и View, и много чего еще).
Итак - чтобы начать получать профит от PowerShell для vSphere, выполняем простую последовательность шагов:
1) Устанавливаем необходимое
1.а) На Win7\2008 только PowerCLI
1.б) На WinXP\2003 еще и PowerShell предварительно
1.в) Вспомогательные сторонние утилиты
2) Настраиваем профиль для удобной работы
3) Узнаем и запоминаем азы
3.а) С чего начать
3.б) Куда посмотреть
3.в) Основные конструкции и хинты
4) Где взять готовое
4.а) Ссылки
4.б) Onyx
А теперь по пунктам.

1) Устанавливаем необходимое

Нам потребуются PowerShell (если еще не установлен) –> PowerCLI
Опционально – сторонние вспомогательные утилиты, я предложу PowerGUI и PowerTab.

1.а) на Win7\2008 только PowerCLI

На современных ОС от Майкрософт PowerShell (в тексте иногда будет сокращаться как posh) уже установлен.
Поэтому сразу идем на http://vmware.com/go/powercli и загружаем последнюю версию PowerCLI.
Перед установкой запускаем posh и разрешаем выполнение неподписанных скриптов вот такой командой
Set-ExecutionPolicy RemoteSigned
или
Set-ExecutionPolicy Unrestricted
Первое более правильно с точки зрения формальной безопасности, второе – слегка более комфортно. Я в своей НЕ производственной среде использую второй вариант.
А теперь устанавливаем PowerCLI. Next, Next, Finish.

1.б) на WinXP/2003 еще и PowerShell предварительно

Идем на http://www.microsoft.com/powershell, загружаем себе Windows Management Framework Core (!) – это название пакета, в который входит PowerShell. Вполне вероятно, что posh не установится без .Net Framework 2 SP1.
Затем идем на http://vmware.com/go/powercli и загружаем последнюю версию PowerCLI.
Перед установкой запускаем posh и разрешаем выполнение неподписанных скриптов вот такой командой
Set-ExecutionPolicy RemoteSigned
или
Set-ExecutionPolicy Bypass
Первое более правильно с точки зрения формальной безопасности, второе – слегка более комфортно- меньше подтверждений требуют. Я в своей НЕ производственной среде использую второй вариант.
А теперь устанавливаем PowerCLI. Next, Next, Finish.

1.в) вспомогательные сторонние утилиты

Я предложу пока парочку – PowerGUI и PowerTab.

PowerGUI

Загружаем PowerGUI отсюда – http://www.powergui.org.
Без затей устанавливаем. Я пользуюсь практически только его PowerGUI Script Editor:

UPD. В составе актуальной  версии posh поставляется продукт PowerShell ICE - как раз редактор для написания скриптов. Пользуюсь теперь им.


clip_image002
Эта штука дает удобный интерфейс для написания скриптов, подсветка синтаксиса, подстановка параметров и переменных.

PowerTab

UPD. сейчас я этой штукой не пользуюсь, как-то с опытом она стала менее удобной, но как памятку оставлю.

Для начала маленькая иллюстрация:
Начните писать какую-нибудь команду в консоли PowerCLI. Например:
Get-VM
Но ограничьтесь только  
Get-V
И нажмите Tab. Вы увидите, что PowerCLI дописал вам команду до Get-VApp. Нажмите Tab снова – команда поменялась на следующий подходящий вариант (Get-Variable). Так можно Tab’ом перебрать до необходимой нам команды. Запомним такое поведение.
Загружаем PowerTab отсюда - http://powertab.codeplex.com/.
Запускаем PowerCLI и выполняем команду:
$env:PSModulePath
На выходе получаем что-то вроде:
C:\Documents and Settings\mmm\Мои документы\WindowsPowerShell\Modules;
C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\
Вот по любому из этих путей скопируйте каталог PowerTab из ранее загруженного архива.
Теперь в окне PowerCLI выполните команду
Import-Module PowerTab
Я на все вопросы нажимал Enter, устанавливая модуль с параметрами по умолчанию.
Начните писать какую-нибудь команду в консоли PowerCLI. Например:
Get-VM
Но ограничьтесь только  
Get-V
И нажмите Tab.
Теперь по нажатию Tab в консоли PowerCLI мы вместо поочередного добивания подходящих вариантов наблюдаем более удобную картину:

clip_image003
Выбрать нужную команду или там параметр объекта теперь проще.
Обратите внимание – команда Import-Module загрузила нам PowerTab только до закрытия окна PowerCLI. Для постоянного использования этой утилиты следует добавить ее импорт в профиль – см. п.2.
Подробности про модули в общем см. тут - about_Modules.

2) Настраиваем профиль для удобной работы

Профиль – это скрипт posh, выполняемый при запуске.
В нем удобно определять всякие постоянно используемые мелочи.
Это функции, переменные, псевдонимы команд, настройки цветов консоли и пр.
Здесь я приведу пример своего профиля, с неполными комментариями – что не прокомментировано здесь будет затронуто в п.3.

Итак, нам нужен профиль.
Сначала проверяем, существует он у нас или нет. Выполним команду
test-path $profile
Если на выходе false, то профиля нет, и его надо создать. Для этого выполните команду
new-item -path $profile -itemtype file -force
Теперь профиль создан.
Когда профиль создан, или уже существовал, отредактируем его. Выполните команду
notepad $profile
В блокноте откроется файл (в первый раз он будет пуст) – и сюда следует добавить нужные нам вещи.
Вот что добавлено у меня:
$vc = "vcenter4.vm4.ru" 
 ##адрес сервера vCenter
$esx1 = "esx1.vm4.ru" 
 ## имя одного сервера ESX
$esx2 = "esxi2.vm4.ru" 
 ## имя другого сервера ESX

$vccred = Get-VICredentialStoreItem -host $vc -file D:\cred.xml 
## Это файл с учетными данными для подключения к vCenter

function pro {notepad $profile} 
 ## Теперь написав "pro" я открываю профиль для редактирования

add-pssnapin VMware*
## Для подгрузки командлетов vSphere в стандартный posh

Connect-VIServer $vc -User $vccred.user -Password $vccred.Password 
 ## инициация подключения к vCenter

Import-module PowerTab  
## Импорт модуля PowerTab

new-alias -name vm -value Get-VM  
## Псевдоним для Get-VM = vm

function vmON {get-vm | ? {$_.PowerState -eq "PoweredOn"}}
## функция vmON выводящая список всех включенных ВМ

cd \
clear 

Теперь при старте powerCLI данные команды будут выполняться автоматически. Конкретно в моем случае –
  • Создается несколько переменных, в частности $vc – мой сервер vCenter.
  • Создается функция pro – этими тремя буквами я вызываю редактирование профиля.
  • Создается псевдоним vm – этими двумя буквами я вызываю команду Get-VM.
  • Набрав vmON я получаю список включенных ВМ. vmON это имя функции, реализующей данную выборку.
  • Загружается модуль PowerTab.
  • Устанавливается соединение с сервером vCenter, авторизация производится учетными данными, ранее сохраненными в файл d:\cred.xml. Кстати - если вы запускаете PowerShell работая в учетной записи Windows, имеющей право на доступ к vCenter, то достаточно выполнить
    Connect-VIServer $vcпри такой команде posh попытается авторизоваться из под текущего пользователя.
Вот по последнему пункту маленькое отступление – необходимо создать файл-хранилище учетной записи. Для этого выполните команду
New-VICredentialStoreItem -host $vc -user administrator -Password gfhjkm -File d:\cred.xml

Однажды созданный, файл раз за разом используется в профиле.
Этот механизм авторизации использую я – но я не утверждаю, что такой следует использовать вам.

Про профиль - about_Profiles.

UPD.
Как поменять цвета консоли PowerShell - http://habrahabr.ru/blogs/powershell/126965/.

Появилась рекомендация по ускорению первого выполнения скрипта posh - How to speed-up the execution of the first PowerCLI cmdlet.
Вроде как .Net что-то там компилирует, в первый раз, поэтому два подряд выполнения одного скрипта могут на порядок отличаться по скорости. Вот для борьбы с этим есть пара действий.

UPD. У вас есть ярлык для запуска PowerShell, и ярлык для запуска PowerCLI. Они отличаются тем, что второй подгружает командлеты VMware, а первый - нет. Чтобы командлеты VMware подгружались всегда, в профиль стоит добавить
add-pssnapin VMware*

UPD. 

Дополнительные команды.
http://www.vm4.ru/2011/11/powercli-addon.html

3) Узнаем и запоминаем азы

Данный текст - всего лишь памятка, поэтому тут только некоторые основы.

3.а) С чего начать

Запустите установленный PowerCLI, и выполните команду

Get-VM

эта команда (командлет по правильному) показывает информацию (на это указывает Get в названии) по объектам виртуальные машины (VM в названии).
По схеме действие-объект построены все или почти все командлеты posh, и часто по названию можно сориентироваться.
Например, существуют командлеты Start-VM, Export-VMHostProfile и т.п.

Важно – каждая команда выдает на выходе объект. Когда после Get-VM мы на экране видим следующее:

clip_image005 То
важно понимать – команда показала нам не текст с именем ВМ, статусом ВКЛ\ВЫКЛ и пр, а команда получила список объектов (тут – виртуальных машин), и на экран вывела некоторые свойства этих объектов, примерно так:

объект_ВМ1. Имя   объект_ВМ1. Статус 
объект_ВМ2. Имя   объект_ВМ2. Статус 
объект_ВМ3. Имя   объект_ВМ3. Статус


Это означает две вещи – мы можем использовать любое свойство объекта, который получил наш командлет, и мы можем объект\объекты с вывода одного командлета подавать на вход другому.

Например – возьмем банальный CD-ROM виртуальной машины. Для получения информации о нем существует командлет Get-CDDrive.
Ему на вход следует подать список ВМ - о приводах которых (или одной которой) надо вывести информацию. Прочтя краткий хелп, мы видим, что у этой команды есть параметр –VM. Пробуем:  
Get-CDDrive -VM *
Видим список подключенных cd-rom, и что именно подключено, для любой ВМ (тут звездочка – классический символ подстановки вида «любой набор символов», т.е. тут мы выбираем ВМ с любым именем, т.е. выбираем все ВМ):

clip_image006
Вывод не особо читаем, но форматирование займемся чуть позже.
А можно сделать чуток по другому:  

Get-CDDrive –VM (а в скобках не указывать конкретную ВМ или символ подстановки, а вставить командлет делающий выборку виртуальных машин)

например так:  

Get-CDDrive - VM (Get-VM)

На выход получим то же самое (Get-VM ,без параметров возвращает все имеющиеся ВМ).
Наконец, можно расположить команлеты в обратном порядке – сначала сделать выборку, а потом передать результаты в Get-CDDrive:  

Get-VM | Get-CDDrive

эти три варианта идентичны. Обычно лучше использовать последний вариант – удобнее. Сделали одну выборку, затем поставили вертикальную черту «|» - и после нее пишем действия над результатами первой операции – вертикальная черта как раз предписывает передать объекты «по конвейеру».

Итак – несколько важных фактов:

1) Командлеты работают над и возвращают как результаты работы объекты.

2) Обычно мы обращаемся к свойствам объектов.

3) Объекты можно передавать по конвейеру.

Осталось понять – а как мне узнать нужный командлет, нужное свойство, и как мне реализовать мелкие фишки – типа форматирования плохочитаемого дефолтного вывода.

3.б) Куда посмотреть

У нас есть понимание того, что мы хотим получить. Теперь надо это понимание реализовать в скрипте. Начинаем, вестимо, с команд – какая команда выполняет желаемое?

Как узнать командлет.

Первое о чем стоит сказать – можно просто получить список всех возможных команд PowerCLI:
Get-VICommand
Так как полный список обычно не нужен, можно сделать фильтрацию по действию или объекту:  
Get-VICommand | ? { $_.Noun -eq 'VM' }
Все командлеты выглядящие как “что-то-VM”
(можно слегка по-другому это вызывать
get-command -Module vmware* -verb get )

А следующая команда покажет все командлеты выглядящие как “Get- что-то”
Get-VICommand | ? { $_.Verb –eq 'Get'}
Или еще можно вот так:  
Help *vm*
Список команд, в названии которых есть подстрока в звездочках.

Вообще, команда help (она является псевдонимом для командлета Get-Help) очень полезна. Есть разные ключики:
help Get-VM – краткая справка по командлету  
help Get-VM –full - полная справка  
help Get-VM –examples - примеры  
help Get-VM –online – онлайн справка

Итак, командлет мы найдем - просто отталкиваясь от ожидаемого имени. Теперь бы разобраться с тем, какую инфу, какие свойства объектов этот командлет нам может дать.

Свойства

Самая главная тут команда – Get-Member, или ее псевдоним gm. Этот командлет следует применить после командлета, выдающего объект, чьи свойства нас интересуют. Например конвейер  
get-vm | get-member

покажет список свойств ВМ. clip_image007 Например, нас интересует свойство Guest.
Теперь можно например так  
(Get-VM ad).Guest
нам покажут значение этого свойства для ВМ с именем «AD».
Но там может быть много полей с дополнительными данными. Чтобы увидеть их – повторим итерацию:
(Get-VM ad).Guest | gm

А чтобы не просматривать свойства по одному, а увидеть все варианты:
Get-VM ad | Format-Custom guest -depth 2
с помощью этой команды мы можем увидеть доступную информацию, а потом обращаться только к нужным полям, например так:  

(Get-VM ad).guest.vm.harddisks

Ну и хелп, конечно, никто не отменял.
Для не информационных комадлетов, таких как Get, а чего-то вроде New-VM, Set-VirtualSwitch и т.п. вариант с Get-Member не прокатит – там придется читать хелп.


А вот тут приведен скрипт, выполнение которого сформирует csv-файл с данными по параметрам каждого командлета PowerCLI - http://www.lucd.info/2011/03/04/powercli-cmdlet-xref-another-look/

3.в) Основные конструкции и хинты

Upd. Get-View

есть специфический командлет - get-view.
позволяет получить инфу, иногда недоступную больше никак. Иногда - в более удобном виде\месте чем другими способами.
вот тут - Use PowerShell to Simplify Access to Data Through PowerCLI - оптимизация работы с ним.

Выборка объектов по критерию 
Полезно использовать конструкцию  
where {$_.Поле оператор_сравнения значение} например  

get-vm | where {$_.PowerState -eq "PoweredOn"}

Мне больше нравится писать не where, а знак вопроса:
get-vm | ? {$_.PowerState -eq "PoweredOn"}

В этих двух конструкциях вы видите «$_». Это – указание на объект, переданный на вход. В скрипте из примера что происходит – «Get-VM» без параметров возвращает список вообще всех ВМ, т.е. не объект, а массив объектов. Мы хотим обратиться к каждому объекту из массива, и проверить значение в свойстве PowerState. Переменная «$_» как раз и позволяет обратиться не к свойству конкретного объекта, а к свойству каждого объекта, переданного на вход.

Операции сравнения

Введем переменные для иллюстрации:
$vm_list = “vm1”, “vm2”,”vm3”  
$vm_test = “vm3”  

Равно.
Следующее утверждение неверно  
$vm_list –eq $vm
а вот это верно:  
“vm3” –eq $vm_test  

Неравно.  
-ne  

Большем чем.  
-gt
например  if(6 -gt 5) { echo "6 больше чем 5" }  

Меньше чем.
-lt  

Больше равно.  
-ge

Меньше равно.  
-le

Содержит.
Следующее утверждение истинно:  
$vm_list –contains $vm_test  

Не содержит.  
$vm_list –notcontains $vm_test  

А если к любому оператору сравнения вначале приписать букву “c”, то операция сравнения будет выполнена с учетом регистра.  

“vm3” –сeq $vm_test

Символы подстановки

* - что угодно

[ab]* - строка начинающаяся с a ИЛИ b

? – любой один символ

Использование:

Get-VM  *

Get-VM viewdesktop?

UPD. из комментариев.:

Еще может быть полезен оператор сравнения "-like" - поиск по простому шаблону - когда не помнишь точное название VM или чтобы не вписывать весь Datastore ID.

Вывод нужных свойств объектов

Если вернутся к срипту, показывающему данные CD-ROM всех наших ВМ:
Get-VM | Get-CDDrive

то мы вспомним, что информация на выходе не особо читаема clip_image006[1] Улучшим это.
Для улучшения вывода можно применить командлет Select-Object, позволяющий вывести на экран указанные свойства, примерно так:

командлет1 | командлет2 | Select-Object название_свойства1, название_свойства2.

А откуда взять названия свойства? Из Get-Member: clip_image010

Или, в некоторых ситуациях, может пригодиться добавить в конце | Format-Table –Wrap

  image

как видно – длинные строки были отформатированы при помощи переноса строки.

Разбор csv файла

Сам файл c:\vms.csv
name,host,datastore
vmt1
,esxi2.vm4.ru,iSCSI_main_100GB
vmt2
,esxi2.vm4.ru,iSCSI_main_100GB
vmt3
,esxi2.vm4.ru,iSCSI_main_100GB
заносим файл в переменую:
$vmcsv = import-csv C:\vms.csv

Используем его вот такой конструкцией:

foreach ($line in $vmcsv)     

      { new-vm -Name $line.name -vmhost $line.host -datastore $line.datastore}

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

Организация циклов

$str = New-Object System.Text.StringBuilder
for($i=0; $i -lt 5; $i++)
       { $str = $str.Append([String]::Format("{0} ", $i)) }  

echo $str.ToString()

Здесь мы определили строковую переменную $str, в начале она пуста.
Затем начали цикл for, определили переменную $i, используем ее как счетчик.
Пока $i меньше 5 к переменной $str добавляем пробел и значение $i на текущем этапе.
После завершения цикла на экран будет выведено строковое значение $str, это будет
1 2 3 4.
Пример с if else уже был:

if(6 -gt 5) { echo "6 больше чем 5" }

В if может быть только одно условие. 

Сортировка

Для сортировки применяется конструкция sort-object. Например, для сортировки виртуальных машин по тому, на каком хосте они работают, надо выполнить такую цепочку:
Get-VM | Sort-Object Host
здесь Host – свойство объекта виртуальная машина.

Можно сразу по нескольким полям:
Get-VM | Sort-Object Host, Name
тут виртуальные машины сначала будут отсортированы по хостам, внутри этой сортировки – по именам.

Добавив ключ –descending сортируем в обратном порядке.

Форматирование

Format-List - вывод списком свойств объекта 
Get-vm | sort-object PowerState | format-list -groupby PowerState
Выбрали все ВМ –> отсортировали по вкл\выкл –> результаты в виде списка, да еще разбитые на подкатегории по статусу ВКЛ\ВЫКЛ ВМ.

Может быть полезно  

Get-vm | sort-object PowerState | format-list
Вывод всех полей.

Format-Table - вывод таблицей
Очень полезна следующая конструкция:  
Get-vm | get-member | format-table –wrap
 Будет с переносом строк текста внутри строк таблицы – без этого длинные примечания нечитабельны

Format-Wide - вывод списком в несколько столбцов одного свойства.

Get-vm | format-wide –autosize
 Выводит только имя (по умолчанию), но в несколько столбцов. Удобнее для просмотра длинных списоков. Autosize – он сам выбирает число столбцов. 

Или сами выбираем не имя, а другое поле объекта  
Get-vm | format-wide guest

Format-Custom Форматирование по некому шаблону.
По умолчанию, я так понимаю, в виде xml.

UPD. Из комментариев.

- Вывод в файл осуществалется ">" либо ">>"
- Экпорты Export-csv, Export-clixml, convertto-html - назначение понятно по названию.

Запуск самостоятельного скрипта

Если скрипт лежит в каталоге c:\posh, то вариантов несколько:

1. В консоли posh указать полный путь  
c:\posh\script1.ps1

2. Перейти в этот каталог  
cd c:\posh
затем выполнить скрипт  
./script1.ps1
или  
.\script1.ps1

3. В переменной окружения path добавить каталог со скриптом
$env:path += “c:\posh”
при регулярных обращениях к скриптам из каталога лучше добавить эту строку в профиль.
Ну или без затей сделать это из графического интерфейса – в свойствах моего компьютера -> вкладка дополнительно -> кнопка переменные среды.

Затем в консоли вызываем скрипт просто по имени
script1

Если хотим выполнить posh-скрипт откуда-то еще, например из планировщика, то как вариант, создаем батник, в него пишем
%SystemRoot%\system32\windowspowershell\v1.0\powershell.exe -psc "C:\Program Files\VMware\Infrastructure\vSphere PowerCLI\vim.psc1" -command "c:\posh\script1.ps1"

Звуковая сигнализация

Можно сделать вот так:  
$beep = “`a”

здесь перед a стоит обратная кавычка, которая на клавише с буквой ё.
Тогда обратившись к этой переменной
$beep
вы услышите писк

А если в переменную занести слегка другое значение
$beep = “`a`a `a `a `a `a `a `a `a ”
то услышим много писка.

Помогает, когда надо привлечь внимание.    

Как поправить конфиг ВМ
http://communities.vmware.com/thread/306105?tstart=30    

Скопировать что-то на VMFS хранилище

Все хранилища подмонтируются в posh-диск vmstores.
Так что если выполнить  
cd vmstores:
(двоеточие в конце принципиально)
а затем делать dir\ls и углубиться в структуру каталогов – найдем нужное. затем можно использовать mkdir  для создания каталогов и Copy-DatastoreItem для копирования данных на хранилище.
Например  
mkdir test cd ./test Copy-DatastoreItem -Item C:\some_file.ext
После этого мы обнаружим на VMFS\NFS хранилище каталог test  и соответствующий файл внутри.

А еще можно сделать  
cd vi:
и тогда мы попадем в иерархию vCenter как на posh-диск.
Можно с помощью dir\ls и cd спускать по структуре пулов\ vApp, хостов\кластеров, и выполняя, например, get-vm, получать на выход только объекты с текущего уровня.  

Чтобы скрипт не требовал подтверждения
Добавить -Confirm:$false  

Как положить файл на файловую систему ESX(i)

http://communities.vmware.com/message/1630559#1630559
Вкратце – вызов ssh сессии из powerCLI скрипта.

Запустить команду в гостевой ОС из сессии PowerCLI к vCenter\ESX(i)

Есть специальный командлет Invoke-VMScript
Например, мы массово хотим сделать ipconfig/release. Нам поможет скрипт
Get-VM | Invoke-VMScript –ScriptText “ipconfig/release” –ScriptType Bat –guestuser DomainAdmin –GuestPassword gfhjkm

Запускать в госте можно команды PowerShell, CMD и BASH.
Или передавать путь к скрипту внутри
Get-VM | Invoke-VMScript –ScriptText “c:\a.bat” –ScriptType Bat –guestuser DomainAdmin –GuestPassword gfhjkm

Если передаваемая внутрь команда – не PowerShell, то для Windows гостей нужно указать тип - –ScriptType Bat.

4) Где взять готовое

4.а) Ссылки


4.б) Onyx

Для того, чтобы продолжить, очень полезной может оказаться утилита Onyx. Очень, очень прикольная штука, хоть пока и не в статусе релиза. Примерный план получения profit'а:

1) По ссылке скачали архив, распаковали, запустили исполняемый файл. Нажали звездочку, и указали адрес vCenter.

2) Клиентом vSphere подключаемся на ту машину и порт, где запущен Onyx.

3) В окне Onyx нажимаем пиктограмму начала записи, и в клиенте vSphere выполняем действия, которые мы хотели бы заскриптовать. В окне Onyx появится готовый скрипт для этого! Левая из пиктограмм сохранит содержимое окна в файл скрипта PowerShell.

Те скрипты, на которых экспериментировал я, выполнялись и делали нужную работу без дополнительных усилий с моей стороны. В Onyx я сохранил скрипт под именем ps_start_SQL_VM.ps1. В PowerCLI я запустил файл с таким именем. Все.

Конец.