понедельник, 22 мая 2017 г.

Nakivo Backup & Replication

Так получилось, что о существовании Nakivo Backup & Replication я узнал буквально месяц назад, до этого данный продукт старательно обходил меня стороной.

Как нетрудно догадаться из названия, Nakivo Backup & Replication презназначен для резервного копирования и защиты виртуальных сред и конкурирует с такими решениями, как Acronis Backup и Veeam Backup & Replication.

Nakivo привлек меня весьма демократичной ценой. Не то, чтобы Veeam и Acronis стоили каких-то больших денег, но многие заказчики имеют весьма скромные бюджеты и стремятся сэкономить где только можно, и на фоне отказа VMware от встроенного бекапа vSphere Data Protection в будущих версиях vSphere, Nakivo может стать неплохой альтернативой.

Nakivo поддерживает резервное копирование и репликацию виртуальных инфраструктур VMware vSphere, Microsoft Hyper-V, а также облачной платформы Amazon EC2.

СРК Nakivo состоит из трех основных компонентов:
  • Director - предоставляет консоль администрирования и управляет остальными компонентами СРК.
  • Transporter - выполняет резервное копирование, репликацию и восстановление данных. При необходимости может быть развернуто несколько экземпляров Transporter для ускорения выполнения заданий копирования/восстановления, для локализации трафика резерного копирования при установке в филиалах или необходимости шифрования трафика при передаче между площадками. 
  • Backup Repository - обеспечивает хранение резервных копий данных.
В качестве репозиториев могут выступать как локальные диски сервера, так и сетевые каталоги, подключаемые по SMB или NFS, а также Amazon EBS. Для репозиториев поддерживается автоматическая проверка и восстановление испорченных бекапов (Self-healing). Ленточные накопители и VTL не поддерживаются, однако в качестве обходного варианта можно использовать отключение/подключение репозиториев в автоматическом режиме по расписанию, совмещенное с копированием данных на ленту.

Управление Nakivo выполняется через веб-интерфейс. Для автоматизации задач по бекапу и восстановлению доступен CLI и REST API. Интерфейс крайне просто и интуитивен и позволяет разобраться в тонкостях настройки даже без чтения документации.

Помимо варианта установки Nakivo на серверы с ОС Windows, Linux или в виде виртуального апплайнса VMware, Nakivo может быть установлен непосредственно на поддерживаемое NAS хранилище производства QNAP, Synology или Western Digital, что позволит легко и недорого огранизовать СРК для небольших компаний и филиалов.

Nakivo поддерживает стандартный для большинства современных СРК набор функций, вроде безагентского консистентного бекапа файлов и данных приложений внутри виртуальных машин, мгновенного восстановления и запуска ВМ прямо из бекапа, гранулярного восстановления файлов и объектов Microsoft Active Directory и Exchange, дедупликации данных, сжатия трафика при передаче по сети, LAN-Free бекап ВМ на vSphere (Direct SAN Backup или Hot-Add), копирования бекапа на удаленный репозиторий и т.п. Сравнение функциональных возможностей Nakivo с другими продуктами (немного устаревшее) можно найти на сайте whatmatrix.com.

Кстати, работа функции Instant VM Recovery, которая в Nakivo носит название Flash VM Boot, отличается от таковой в Acronis и Veeam. В случае Nakivo бекап монтируется не как NFS хранилище, вместо этого Nakivo создает временную ВМ, презентует хосту бекап в виде отдельного тома по протоколу iSCSI и подключает том к ВМ как сырой диск (RDM). После этого администратор может проверить работу ВМ и при необходимости мигрировать ее на целевое хранилище при помощи Storage vMotion.

Также в Nakivo присутствует возможность проверки работоспособности бекапа (Screenshot verification), которая автоматически запускает ВМ из резервной копии и делает скриншот экрана, после чего отправляет отчет администратору по почте.

Nakivo лицензируется по количеству сокетов серверов виртуализации и доступен в двух основных редакциях - Pro и Enterprise, в Enterprise присутствуют такие возможности, как интеграция с Active Directory для аутентификации с помощью доменных учетных записей, кастомизация веб-интерфейса, поддержка REST API, поддержка много-пользовательского (Multi-tenancy) режима установки, позволяющего делегировать задачи по резервному копированию и восстановлению отдельным подразделениям компании. Для небольших организаций есть вариант приобретения редакции Pro Essentials и Enterprise Essentials, которые отличаются только количеством лицензий приобретаемых на организацию (суммарно, не более 6).

Наконец, всем желающим доступна бесплатная версия Nakivo Backup & Replication Free Edition, которая может выполнять резервное копирование не более двух ВМ.

понедельник, 15 мая 2017 г.

VMware Blast, H.264 и графические адаптеры

Одним из нововведений, появившихся в VMware Horizon 7, стала поддержка протокола Blast Extreme, который использует кодек H.264 (или как еще его называют MPEG-4 AVC) для кодирования и декодирования передаваемого изображения.

Практически во всех современных графических адаптерах реализована аппаратная поддержка данного кодека, что позволяет существенно снизить нагрузку на центральный процессор как клиентского устройства, там и сервера (при использовании поддерживаемых графических адаптеров в виртуальной машине). В этом плане Blast смотрится более выгодно на фоне другого часто используемого протокола - PCoIP, для которого применяются специализированные адаптеры и нулевые клиенты на базе чипов Teradici.

Использование H.264 не требует выполнения каких-либо дополнительных настроек - по умолчанию агент и клиент Horizon автоматически выбирают совместимые параметры для кодирования и декодирования, однако, при планировании архитектуры VDI и выборе оборудования важно знать несколько нюансов работы данной технологии.

Кодирование (сжатие) изображения на виртуальной рабочей станции в режиме H.264 может выполняться как программным способом, за счет ресурсов центрального процессора, так и аппаратным, за счет графического адаптера. На текущий момент аппаратное кодирование Blast Extreme в Horizon поддерживается только для графических адаптеров Quadro и GRID/Tesla производства NVIDIA (за счет использования NVIDIA NVENC - NVIDIA Hardware Video Encoder) и только в режимах проброса графического адаптера vGPU или vDGA. Ни vSGA, ни графические адаптеры AMD (несмотря на то, что у них тоже есть аппаратный кодек H.264) не поддерживают аппаратное кодирование.

Определить, какой режим кодирования используется, можно посмотрев файлы журналов Blast на виртуальной рабочей станции: "C:\ProgramData\VMware\VMware Blast\Blast-Worker-SessionId<#>.txt".

При обработке H.264 центральным процессором в журнале будут отображаться строки вида:
0x0e14 bora::Log: VNCENCODE 5 VNCEncodeChooseRegionEncoder: region encoder h264. Screen 1/1 @ Resolution: 2560 x 1440
0x0e14 bora::Log: VNCEncodeRegionH264LoadLibrary: Loaded x264 shared library "libx264-144.dll"

При обработке средствами графического адаптера NVIDIA:
0x0138 bora::Log: VNCENCODE 5 VNCEncodeChooseRegionEncoder: region encoder NvFBCToDX9 H264. Screen 1/1 @ Resolution: 2560 x 1440
0x0138 bora::Log: VNCEncodeRegionNvFBCDX9NvEncLoadLibrary: Loaded NVIDIA SDK shared library "NvFBC64.dll": The operation completed successfully

Если кодирование H.264 вообще не используется:
0x0138 bora::Log: VNCENCODE 5 VNCEncodeChooseRegionEncoder: region encoder adaptive. Screen 1/1 @ Resolution: 2560 x 1440

Что касается клиентских устройств, будь то компьютер с клиентом Horizon Client, тонкий клиент под Linux или планшет на iOS, для них декодирование H.264 может выполняться исключительно средствами графического адаптера. Если графический адаптер в клиентском устройстве по каким-либо причинам не поддерживает декодирование H.264 с нужными параметрами, то и виртуальная рабочая станция, и клиент автоматически переключаются на использование JPEG/PNG кодека (или как его еще называют - адаптивный кодек), который обрабатывается только центральным процессором, даже в случае, когда внутри ВМ используется графический адаптер NVIDIA.

Посмотреть режим декодирования можно в журналах (например, для клиента Horizon под ОС Windows: "C:\Users\<%username%>\AppData\Local\Temp\vmware-<username>\vmware-mks-<#>.log").

При использовании аппаратного декодирования:
I125: VNC CLIENT: H264 hardware decoding available
VNC CLIENT: H264 support enabled

При использовании адаптивного кодека:
W115: VNCClientH264FillSlice: H.264 H/W decoder error or unsupported mode (streamId=0, screen x,y,w,h=0,0,2560,1440, mode=0)
VNC DECODER: disabled H.264 for current resolution (2560x1440)
VNCClientH264FillSlice: H.264 successfully disabled for current resolution

Казалось бы, в чем проблема? Все современные графические адаптеры, хоть в Raspberry Pi, хоть в iPhone, хоть встроенные в процессоры Intel и AMD, поддерживают аппаратное декодирование H.264.

Но всегда есть нюансы. Например, в тонком клиенте HP t620 Thin Client, о котором я недавно писал, используется графическое ядро Radeon HD 8280E, которое поддерживает аппаратное декодирование только Full HD видео, несмотря на то, что сам тонкий клиент может работать с двумя мониторами с разрешением 2560 x 1600. Поэтому при использовании мониторов в разрешении более 1920 x 1200, будет использоваться адаптивный кодек.

То же касается, Apple iPad 3, у которого разрешение экрана составляет 2048 x 1536, но также поддерживается только декодирование Full HD H.264 видео. Есть информация, что iPad Air 2 и Iphone 6 поддерживают 4K H.264 кодек, но у меня нет ни одного устройства под рукой, чтобы это проверить.

Отсюда следует простой вывод - при выборе клиентского устройства следует смотреть не только на производительность центрального процессора, но также и на возможности графического адаптера.

Также следует помнить, что до версии Horizon 7.1 в многомониторных конфигурациях использовался только адаптивный кодек, независимо от того, поддерживал ли клиент H.264 или нет.

Кодирование H.264 может быть отключено на уровне групповых политик (Group Policy шаблон VMware Blast -> H.264: Disabled).

H.264 выполняет сжатие изображения с потерями (Lossy), поэтому при при использовании Lossless режима (Group Policy шаблон VMware Blast -> PNG: Enabled) H.264 также отключается.

Кроме того, адаптивный режим используется в HTML5-клиенте (при подключении через веб-браузер). Единственный браузер, который на текущий момент поддерживает H.264 - это Google Chrome (что позволяет использовать Chromebook в качестве недорогих и мобильных тонких клиентов).

Если говорить о влиянии аппаратного декодирования H.264 на производительность виртуальной рабочей станции, то, например, при использовании адаптивного режима для разрешения 2560 x 1440 при проигрывании Full HD видео, протокол Blast может легко занять порядка 20% ресурсов четырехпроцессорной ВМ. А учитывая, что графический адаптер может еще и выпонять декодирование видео (когда не используется функция Multimedia Redirection), то разницу вы можете увидеть самостоятельно.

Аппаратное кодирование Blast Extreme + аппаратное декодирование видео:

Программное кодирование Blast Extreme + программное декодирование видео:

понедельник, 24 апреля 2017 г.

Установка Windows 10 IoT на тонкий клиент HP T620 с ThinPro

Компания HP является вторым по величине производителем тонких клиентов (после Dell-EMC). Недавно я взял себе для тестов ТК HP Thin Client T620 - модель среднего ценового диапазона на базе процессора AMD G-series.

Одной из отличительных особенностей модельного ряда ТК от HP является поддержка широкого перечня операционных систем, это и различные версии Windows (Windows Embedded Standard 7, Windows Embedded 8 Standard, Windows 10 IoT), и Linux-подобные HP ThinPro и HP Smart Zero Core. Пользователи могут легко заменить предустановленную ОС Windows на более легковесные ThinPro или Smart Zero Core без необходимости замены клиента или покупки дополнительных лицензий. Однако этот трюк "официально" не работает в обратную сторону (из-за отсутствия необходимой OEM-лицензии Windows). Мне же как раз достался ТК с предустановленной ThinPro. Ниже описан вариант, как можно обойти ограничение по установке, однако, важно понимать, что вам потребуется лицензионный ключ для легальной работы с Windows 10 IoT.

Также стоит отметить, что ОС Windows требуется M.2 SATA накопитель большого объема (минимум - 32 ГБ, рекомендуется - 64 ГБ). В моем случае пришлось заменить имеющийся 16 ГБ накопитель Kingston RBU-SNS4151S3/16G на более емкий. Кое-какую информацию по замене можно почерпнуть из Troubleshooting Guide.

Установка ОС может быть выполнена двумя способами - с помощью образа, записанного на USB-накопитель при помощи утилиты HP ThinUpdate, и через сервер управления HP Device Manager.

ThinUpdate доступен для загрузки с сайта HP, крайне прост в установке и работе - выбираете модель устройства, образ для загрузки и указываете накопитель, на который надо записать образ.

В случае, если вы используете ТК с ThinPro вам потребуется выполнить дополнительные настройки.

В отличие от обычных дистрибутивов Microsoft, образ ОС для тонких клиентов хранится не в .WIM, а в .IBR формате. За установку образа на диск отвечает утилита ibrpe.exe, которая проверяет наличие вшитого в ТК лицензионного OEM ключа Windows в момент запуска. При отсутствии ключа утилита завершает свою работу.

Я попробовал воспользоваться способом, описанным на просторах Интернет, и отредактировал на флешке файл IBRPE\THINSTATE.CMD, добавив аргументы -xb к параметрам запуска утилиты.
:DEPLOY
REM - Deploy image. Remove C for OS
if exist C:\ call :REMOVEDRV C
%~dp0\IBRPE.EXE -xb %2 %1
goto :EOF
Однако, либо версия утилиты обновилась, и аргументы больше не работают, либо ключ обязательно должен быть вшит в ТК (неважно от какой версии Windows), но данный вариант не заработал. Поэтому вам может пригодиться альтернативный вариант - замена ibrpe.exe.

Найти ibrpe.exe, который не выполняет проверку ключа достаточно легко, он идет в составе HP Device Manager, который также можно свободно загрузить с сайта HP. Загрузите и установите Device Manager на любой компьютер с Windows и скопируйте нужный файл ibrpe.exe из каталога C:\Inetpub\HPDM\Repository\Tools\Imaging\HPWES7_64\ibr на флешку в папку X:\IBRPE, заменив старую версию.

После записи образа вставьте USB-накопитель и включите ТК. При загрузке нажмите F10, чтобы открыть настройки BIOS. Перейдите на вкладку Security -> Secure Boot Configuration. Отключите загрузку с Legacy устройств: Legacy Support: Disable.

Перейдите на вкладку Storage -> Boot Order и включите загрузку с USB накопителей для UEFI: UEFI Boot Sources -> USB Hard Drive. Сохраните настройки и перезагрузитесь.

После загрузки оболочки WinPE выйдите из утилиты ibrpe.exe. У вас не получится выполнить установку из-за ошибки diskpart, которая возникает из-за конфликта букв томов. Буква S: назначается тому, где размещается загрузчик WinPE и утилита ibrpe.exe, эта же буква назначается для системного диска при разметке M.2 накопителя, куда устанавливается ОС.

Из командной строки запустите утилиту diskpart.exe и смените букву диска для тома с именем THINSTATE (номер тома можно посмотреть с помощью команды list volume).
select volume 1
remove letter=S
assign letter=T
exit
Перейдите на диск T: и повторно запустите скрипт THINSTATE.CMD для установки ОС.
T:
cd T:\IBRPE
THINSTATE.CMD
В этот раз установка должна пройти корректно. В зависимости от скорости флешки и SSD накопителя на это может уйти 30-60 минут.

После установки система автоматически выполнит вход под учетной записью User (пароль: User) и вы сможете выполнить настройку ТК. При необходимости используйте учетную запись с административными правами Admin (пароль: Admin).

суббота, 1 апреля 2017 г.

Интервью с разработчиками гиперконвергентной системы "Эскалатор-V"

Гиперконвергенция является одной из самых остро обсуждаемых тем последних лет. Многие компании, такие как Dell EMC, Nutanix, HPE, Cisco, стремятся занять этот стремительно растущий рынок, предлагая своим заказчикам универсальные, производительные, масштабируемые решения.

Но совсем недавно на рынок гиперконвергентных решений вышел новый игрок - НИИ НАСОС (Научно-Исследовательский Институт Нетрадиционных Автоматизированных Систем и Отдаленных Стандартов) со своим программно-аппаратным комплексом - Эскалатор-V. Разработчики Эскалатор-V утверждают, что их инновационное решение способно потеснить мастодонтов индустрии и занять лидирующие позиции на рынке гиперконвергентных систем.
Несмотря на высокую загрузку команды, мне удалось побеседовать с ведущим архитектором проекта - Борисом Болтуновым и ведущим разработчиком - Евгением Вебдеевым.

Q: Борис, Евгений, спасибо, что нашли время для общения. Мне и моим читателям очень интересно услышать о новой отечественной разработке подобного масштаба. Можете в нескольких словах рассказать, что такое Эскалатор-V?
A: Эскалатор-V не даром называется гиперконвергентной системой нового поколения или гиперконвергентной системой ^2.0. Кардинальным отличием эскалатора от других решений является то, что он может разворачиваться поверх других HCI систем. Более того, Эскалатор поддерживает развертывание внутри другого Эскалатора.

Q: Какие преимущества предоставляет данный подход?
A: Только представьте - наш встроенный механизм дедупликации и компрессии обеспечивает уровень сжатия данных порядка 2:1. Развернув поверх данной инсталляции еще один Эскалатор-V, вы обеспечите показатель консолидации данных - 4:1, а реализовав максимально доступный на сегодня 25-кратный уровень вложенности, вы получите фантастические показатели экономии дискового пространства - 32 миллиона к 1. Ни одно конкурирующее решение просто не способно обеспечить чего-то подобного.
Интерфейс управления Эскалатор-V крайне прост и функционален и выполнен целиком на HTML.

Q: Вы очень подробно рассказали о дедупликации и компрессии, наверняка вы предоставляете дополнительные фунциональные возможности вроде снапшотов, репликации, кэширования, тиринга данных, встроенного мониторинга производительности, поддержки метро-кластеров, различных платформ виртуализации... У вас же есть собственный гипервизор?
A: (Евгений что-то записывает в блокноте) Ну да...

Q: Откуда пошло название Эскалатор-V?
A: Изначально мы хотели назвать проект - Smoothie, как символ легкости, простоты настройки и эксплуатации. Однако оказалось что на GitHub уже присутствует более 200 проектов с таким названием, мы же хотели узнаваемости для нашего продукта. Тогда-то мы и придумали другое название. Эскалатор-V стал символом подъема, достижений новых высот в бизнесе, которых заказчики смогут достичь благодаря нашему продукту.

Q: О вас много говорят ИТ-специалисты, пишут авторитетные издания. Каково отношение к вашему решению на рынке?
A: Несмотря на явный технологический разрыв между нами и конкурентами, Gartner отказался добавлять нас в квадрат лидеров интегрированных систем. Поэтому я пообщался с нашими дизайнерами, они пообещали нарисовать и опубликовать свой квадрат в ближайшее время.
Квадрат Gartner в области интегрированных систем. Скоро силами российских специалистов здесь появится новый лидер...

Q: Расскажите об архитектуре решения, на каких технологиях оно строится?
A: Эскалатор-V основан на полностью открытых технологиях. Это означает, что все дистрибутивы, документация, исходные коды и даже пароли администраторов системы хранятся в открытом виде и доступны всем желающим. Частично Эскалатор-V использует наработки другого нашего продукта - корпоративного файлового сервера "Погребец", который мы создавали как альтернативу популярной в свое время ОС Novell Netware 5.x.

Q: Novell Netware 5.x - это же 1998 год. Подумать только, вы разрабатываете продукт почти 20 лет!
A: Совершенно верно, и по этому случаю мы выпустили юбилейный Anniversary Release 0.18.64509. Как видите, наше гиперконвергентное решение гораздо более зрелое, чем многое из того, что сегодня присутствует на рынке. Можно сказать, что мы стояли у истоков HCI...

Q: Поддерживает ли Эскалатор облачную платформу OpenStack?
A: Эскалатор-V является настолько прогрессивным решением, что это не мы поддерживаем   OpenStack, а они нас. OpenStack является платиновым спонсором НИИ НАСОС. Мы активно заимствуем код из данного проекта, а это значит, что сообщество OpenStack косвенно участвует в разработке Эскалатор-V.

Q: Следите ли вы за конкурирующими решениями на рынке?
A: Безусловно, гиперконвергенция - очень горячая тема, поэтому мы периодически анализируем конкурентные решения с целью определения их сильных и слабых сторон. Так например, один из наших основных конкурентов, компания N, использует Apache Cassandra для организации распределенного хранилища. Мы попробовали интегрировать его в наш продукт, однако столкнулись с рядом технических и архитектурных сложностей, поэтому вернулись на MySQL.

Q: Надо же, вы используете кластеризованный MySQL для хранения метаданных?
A: Ну зачем же кластеризованный?

Q: Расскажите более подробно про ваш модельный ряд. Могут ли заказчики самостоятельно выбирать конфигурацию оборудования или она жестко зафиксирована?
A: Мы предлагаем более 40 различных конфигураций серверного оборудования. Буквально вчера мы завершили переговоры с одним крупным поставщиком, и в ближайшее время наш ассортимент пополнится тремя, а возможно и пятью новыми моделями, смотря что будет на складе. Но в любом случае, заказчики всегда могут выбрать цвет передней панели сервера и установить в него какие-то свои компоненты.
Один вычислительный узел Эскалатор-V может обеспечить хранение до 270 ТБ данных или 20 бутылок пива.

Q: Можете рассказать о схеме приобретения и лицензирования Эскалатора?
A: Вы можете использовать наше оборудование совершенно  бесплатно, сразу после покупки, однако для использования ПО вам потребуется приобрести дополнительные лицензии. При выпуске продукта на рынок мы старались максимально упростить модель лицензирования. Эскалатор-V поставляется с одной из 10 базовых редакций: Essentials, Essentials Standard, Essentials Pro, Standard, Standard Standard, Standard Advanced, Advanced Standard, Enterprise, Ultimate и Ultimate+. Эскалатор-V лицензируется по процессорам, если ядер меньше восьми, если больше, то по ядрам, кроме случаев, когда вы используете больше 256 ГБ ОЗУ на сервер, тогда лицензируется объем ОЗУ виртуальных машин, в названии которых есть согласные буквы. И конечно, у нас есть отдельная модель лицензирования для облачных сред и VDI.

Q: Cколько у вас было продаж в России? Можете рассказать о каком-нибудь публичном кейсе?
A: Был один забавный случай. Заказчик приобрел сразу 8 систем. Потом оказалось, что это стоительная фирма, и им нужны были эскалаторы для установки в торговом центре. Мы опубликовали эту историю в нашем корпоративном блоге - все здорово посмеялись.

Q: Какие у вас планы на будущее?
A: В среду мы выходим на IPO, а там видно будет...

Q: Ну что ж, коллеги, большое спасибо за уделенное время, успехов, держитесь там.

понедельник, 20 марта 2017 г.

VCAP6-DCV Deploy

Не так давно я успешно сдал экзамен 3V0-623 на статус VMware Certified Advanced Professional 6 – Data Center Virtualization Deployment.

В свое время я уже рассказывал о сдаче VCAP-DCA.

Экзамен представляет собой одну большую лабораторную работу, состоящую из 27 заданий, и полностью копирует интерфейс labs.hol.vmware.com.

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

Я не сдавал VCAP по vSphere 5, но по моим ощущениям данных экзамен сильно упрощен по сравнению с VCAP-DCA. В заданиях четко прописано, что надо сделать, разве что пошаговую инструкцию не приводят, нет воды в стиле: "Компания XYZ, являющаяся лидером индустрии, хочет повысить отдачу от инвестиций путем повышения показателя консолидации, бла-бла..."

На мой вгляд, экзамен проверяет вовсе не уровень знаний продуктов VMware, а умение решать задачи в условиях жесткой нехватки времени, а также тренерует терпение, когда из-за тормозного интерфейса вы пытаетесь вбить какую-нибудь команду типа esxcli software vib list и у вас задваивается или затраивается половина символов, а кнопку backspace не работает...

Определенную сложность составляла работа с интерфейсом на мониторе с разрешением 1280 x 1024. Изначально, область с текстом заданий отъедала где-то 1/3 экрана, оставляя под рабочую область смехотворные 800 пикселей, чего совершенно недостаточно для работы с консолями.

Отдельно хотелось бы сказать по поводу производительности лаборатории. Все операции выполнялись крайне быстро, чего нельзя сказать об интерфейсе. По всей видимости, из-за нестабильного соединения с Интернет, у меня несколько раз подвисал интерфейс, постоянно задваивался ввод команд с клавиатуры, перетаскивание или выделение элементов интерфейса были сущим кошмаром. Хорошо, что в интерфейсе экзамена предусмотрена возможность копирования текста - достаточно выделить нужный фрагмент и перетащить его мышкой в нужное поле ввода. Поэтому мой совет для тех, кто планирует сдавать этот экзамен - оставляйте вопросы, которые предполагают работу с CLI или написание скриптов, напоследок, так вы сможете решить больше заданий и повысить свои шансы на успешную сдачу.

Что касается подготовки, то при наличии у вас практического опыта работы с vSphere, vCenter, vSphere Replication и VDP экзамен не покажется вам сложным. Для подготовки я использовал blueprint к экзамену, а также несколько неофициальных руководств:


И конечно, много-много практики в лабораторных работах labs.hol.vmware.com и на собственном стенде.

понедельник, 6 февраля 2017 г.

Пример интеграции VMware vCenter IPAM и Windows IP Address Management

Некоторое время назад я писал, как можно автоматизировать процедуру выдачи статических IP адресов для ВМ, разворачиваемых из шаблонов vCenter.

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

Поэтому недавно я решил переписать сценарий и интегрировать его со службой Windows IP Address Management, которая присутствует в Windows Server 2012 R2 и более поздних версиях.

Вкратце, выдача адресов работает следующим образом:
  1. При создании ВМ из шаблона, vCenter запускает скрипт на Perl и передает ему XML документ, который содержит информацию о ВМ (имя, расположение, количество сетевых адаптеров и группы портов, к которым они подключены).
  2. Скрипт Perl, в свою очередь, запускает сценарий на Powershell и передает ему XML документ.
  3. Сценарий Powershell подключается к серверу IPAM, запрашивает свободный IP адрес из диапазона, который соответствует группе портов виртуального коммутатора, и резервирует его за ВМ.
  4. Сценарий Powershell возвращает модифицированный XML документ с зарезервированными IP адресами скрипту Perl, который отдает его vCenter.
  5. vCenter использует полученные адреса при создании ВМ.
У данного метода тоже есть ряд недостатков. Скрипт генерирует только IP адрес, маска подсети, маршрутизатор по умолчанию и адрес DNS сервера должны быть прописаны в настройках Customization Specification. Скрипты работают только на vCenter под Windows, т.к. vCenter Server Appliance не поддерживает сценарии на Powershell. Возможно в будущем у меня дойдут руки, чтобы сделать обеспечить работу скрипта и под Appliance.

Ниже приведен пример настройки серверов IPAM и vCenter, а также скрипты на Perl и Powershell.

Настройка

Для начала установите роль IPAM сервера.

Настройте сервер IPAM (Provision the IPAM server). Для хранения конфигурации я использовал встроенную БД и ручной режим настройки политик (Manual).

Создайте новый блок адресов Add IPv4 Address Block. В поле Network ID укажите адрес подсети, задайте маску (Prefix length), начальный и конечный IP адрес блока. Оставьте остальные настройки по умолчанию.

Создайте новую подсеть Address Subnet. В поле Name укажите имя группы портов на виртуальном коммутаторе. В качестве Network ID укажите адрес подсети, укажите маску подсети. Оставьте остальные настройки в значении по умолчанию.

Создайте новый диапазон адресов (Add IP Address Range). В поле Network ID укажите адрес подсети, в поле Prefix length укажите длину маски. В полях Start IP address и End IP address укажите начальный и конечный адрес диапазона для выдачи. Оставьте остальные значения по умолчанию.

Создайте служебную доменную учетную запись, например, Company\IPAMUser.

Назначьте учетной записи роль IP Address Record Administrator Role. Для этого в консоли IPAM перейдите на вкладку ACCESS CONTROL > Access Policies и создайте новую политику (Add Access Policy). В политике в поле User alias укажите имя служебной учетной записи, а поле Access Settings укажите роль и область действия роли (\Global).

На сервере IPAM в консоли управления локальными пользователями и группами добавьте служебную учетную запись в группу "WinRMRemoteWMIUsers_".

На сервере vCenter установите консоль администрирования IPAM (Features > Remote Server Administration Tools > Feature Administration Tools > IP Address Management (IPAM) Client).

Если сервер IPAM и сервер vCenter не являются членами одного домена, и не используется Kerberos аутентификация, то на сервере vCenter вам потребуется добавить сервер IPAM в перечень доверенных серверов, например:
winrm set winrm/config/client @{TrustedHosts="ipam02.company.local"}
или настроить подключение с использованием HTTPS, как описано в статье http://blog.vmpress.org/2009/11/winrm-windows-server-2008.html

На сервере vCenter установите Perl и добавьте параметры в Advanced Settings в настройках vCenter, как это описано в статье http://blog.vmpress.org/2015/06/ip-vmware-vcenter.html

Сохраните скрипт Perl на сервере vCenter, например, в файл "C:\Scripts\wrapper.pl".
use strict;
use warnings;
use MIME::Base64;
use Encode qw(encode);


#Read XML document from STDIN
sub ReadFromSTDIN($) {
my ($fh) = @_;
my $line;
my $doc;
do {
$line = <$fh>;
$doc .= $line;
} while (defined($line) && $line !~ /<\/generator>/);
local $/ = undef;
return $doc;
}

#Write modified XML document to STDOUT
sub WriteToSTDOUT($$) {
my ($fh, $doc) = @_;
print $fh $doc;
}

#Encode XML document to Base64 format
sub EncodeXML($) {
my ($doc) = @_;
my $encoded = encode_base64(encode("UTF-8", $doc));
$encoded =~ s/[\x0A\x0D]//g;
return $encoded;
}

# Main
eval {
my $doc = ReadFromSTDIN(\*STDIN);
my $encoded = EncodeXML($doc);
my $result = `"powershell.exe -file C:\\scripts\\ipam.ps1 $encoded"`;
WriteToSTDOUT(\*STDOUT, $result);
exit(0);
}
При необходимости отредактируйте путь к сценарию Powershell, не забудьте про экранирование символа "\" в пути.

Сохраните сценарий Powershell на сервере vCenter, например, в файл "C:\scripts\ipam.ps1".
param (
[string]$InputString
)

#Return credetials to connect to IPAM server
function generate-Credentials($Username, $Password) {
$Pass = ConvertTo-SecureString -String $Password -AsPlainText -Force
$Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $Username, $Pass
return $Cred
}

#If hostname is empty, set hostname = VM name
function generate-VMName($xml) {
$LastIndexOf = $xml.generator.vm.LastIndexOf("/")
$VMName = $xml.generator.vm.Substring($LastIndexOf+1)
if($xml.generator.hostname -eq "") {
$xml.generator.hostname = $VMName
}
return $xml
}

#Request free IP address from IPAM Subnet name equal to NIC's virtual switch port group
function get-IPAddress ($CimSession, $SubnetName) {
$IPAddress = (get-ipamsubnet -addressfamily ipv4 -cimsession $CimSession | where {$_.Name -eq $SubnetName} | get-ipamrange -addressfamily ipv4 | find-ipamfreeaddress).ipaddress
return $IPAddress
}

#Convert Base64 string to XML document
[xml]$xml = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($InputString))

#IPAM server address, username and password
$IpamServer = "ipam02.company.local"
$Username = "COMPANY\IPAMUser"
$Password = "P@ssw0rd"
$Credentials = generate-Credentials $Username $Password
$xml = generate-VMName $xml
$CimSession = New-CimSession -ComputerName $IpamServer -Credential $Credentials

#Request and assign IP addresses for all NICs
foreach ($element in $xml.generator.nics) {
$SubnetName = $element.nic.Network
$ipaddress = get-IPAddress $CimSession $SubnetName
#Reserve IP address from IPAM and write it to XML document
if($ipaddress) {
Add-IpamAddress -IpAddress $ipaddress -AssignmentType auto -devicetype VM -devicename $xml.generator.hostname 

-MacAddress $element.nic.macaddress -CimSession $CimSession
$element.nic.ipaddress = $ipaddress.ToString()
}
}
return $xml.InnerXml
В сценарии Powershell задайте адрес сервера IPAM и укажите имя и пароль служебной учетной записи.

Отредактируйте параметры в Advanced Settings в настройках vCenter, указав путь к исполняемому файлу Perl и скрипту.
В параметре config.guestcust.name-ip-generator.arg1 укажите путь к скрипту "C:\scripts\wrapper.pl".
В параметре config.guestcust.name-ip-generator.arg2 укажите путь к скрипту "C:\scripts\wrapper.pl".
В параметре config.guestcust.name-ip-generator.program укажите путь к исполняемому файлу "C:\Perl64\Bin\perl.exe".

Создайте или отредактируйте существующие настройки Customization Specification на сервере vCenter. На вкладке Configure Network выберите ручной вариант настройки адресации (Manually select custom settings) и отредактируйте настройки виртуального сетевого адаптера.

На вкладке IPv4 выберите вариант Use an application configure on the vCenter Server to generate an IP address, задайте маску подсети (Subnet Mask) и маршрутизатор по умолчанию (Default Gateway). На вкладке DNS укажите адрес DNS сервера.

На этом настройка завершена.

Проверка работы

Для проверки работы скрипта запустите его в ручном режиме из командной строки.
С:\Perl64\bin\perl.exe c:\scripts\wrapper.pl
и используйте тестовый XML документ, например:
<generator>
     <datacenter>/New Datacenter</datacenter>
     <vm>/New Datacenter/vm/New Virtual Machine</vm>
     <vm-moref>vim.VirtualMachine:vm-249</vm-moref>
     <hostname/>
     <uuid>502081ef-91df-7455-e570-be1f6d4f5abc</uuid>
     <guest>winXPProGuest</guest>
     <nics>
        <nic id="0">
           <ipaddress/>
           <iparg></iparg>
           <macaddress>00:50:56:a0:70:15</macaddress>
           <network>VM Network</network>
        </nic>
     </nics>
</generator>
Если все настроено корректно, то в результате работы скрипта вы увидите XML со сгенерированным IP адресом.

А на сервере IPAM появится информация о выданном IP адресе.

После проверки на тестовом XML можно попробовать создать ВМ из шаблона.

пятница, 6 января 2017 г.

Создаем свой виртуальный Appliance для автоматического развертывания и настройки ВМ

Уже давно многие вендоры используют механизм распространения своих приложений в виде виртуальных апплайнсов (Virtual Appliance). VMware vSphere поддерживает импорт ВМ из шаблонов, созданных в формате Open Virtualization Format 1.0.

В качестве примеров таких приложений можно привести VMware vCenter Server Appliance, vRealize Operations Manager Appliance, vRealize Automation и другие.

Среди плюсов OVF - возможность автоматизировать процесс настройки ВМ при развертывании, например, задавать имя, IP адрес и другие сетевые настройки, пароль администратора и т.д.

Все настройки описываются в формате параметр/значение (OVF Properties) в свойствах виртуальной машины.

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

Создаем свой OVF шаблон на базе ОС Windows

Процедуру создания OVF шаблона можно разделить на несколько этапов:
  1. Создание эталонного образа ВМ, установка ОС и приложений внутри ВМ.
  2. Настройка параметров OVF в свойствах ВМ.
  3. Выбор механизма передачи параметров OVF в гостевую ОС.
  4. Подготовка скрипта, который использует переданные в гостевую ОС параметры и выполняет необходимые настройки.
  5. Экспорт ВМ в формат OVF/OVA.
В качестве эталонного образа может выступать ВМ с любой ОС, поддерживаемой средой виртуализации, будь то Linux или Windows.

Для включения возможности использования параметров OVF требуется сначала выключить ВМ и в ее свойствах включить поддержку vApp options (для vSphere Web Client это делается на вкладке vApp Options включением опции Enable vApp options, для vSphere Client на вкладке Options -> vApp Options -> vApp options: Enabled.

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

Перед тем, как задавать значения параметров для передачи в гостевую ОС, потребуется их определить (для vSphere Web Client это делается на той же вкладке vApp Options -> Properties, для vSphere Client - в Options -> vApp Options -> Advanced -> Properties).

Каждый параметр имеет следующий набор свойств:
  • Категория (Category).
  • Отображаемое имя (Label).
  • Идентификатор класса (class ID).
  • Идентификатор ключа (Key ID).
  • Порядковый номер ключа (Key instance ID).
  • Описание (Description).
  • Тип (Type).

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

Вводимые пользователем данные можно ограничить определенным форматом, выбрав тот или иной тип, например, строка, пароль, целое число, IP адрес, выпадающий список из нескольких пунктов и т.д. Для ряда параметров, типа String или Boolean вы можете указать значение по умолчанию (Default Value), которое будет автоматически установлено при развертывании данного апплайнса.

Идентификатор класса может пригодиться, если вы создаете несколько параметров с одинаковым идентификатором ключа или вам необходимо каким-либо специальным образом обрабатывать группу параметров (и которое пользователь может переопределить, если захочет).

Категория позволяет объединять параметры в определенные логические группы, например, можно создать категорию Network Settings, в которую будут включаться все параметры, относящиеся к сетевым настройкам ВМ. Такие параметры будут отображаться на форме развертывания новой ВМ вместе. Идентификатор ключа позволяет устанавливать порядок отображения параметров на форме в момент развертывания ВМ. Например, если вы хотите, чтобы сначала пользователь вводил сетевой адрес, а потом маску сети, то для первого параметра установите значение Key instance ID равное 0, для второго - 1.

Более детально настройки параметров описаны в документе: https://www.vmware.com/support/developer/converter-sdk/conv43_apireference/vim.vApp.PropertyInfo.html

После создания параметров вам потребуется задать для них какие-либо значения (для vSphere Web Client на той же вкладке vApp Options -> Application properties, для vSphere Client в Options -> vApp Options -> Properties). Если вы разворачиваете ВМ из OVF шаблона, то, соответственно, все параметры нужно будет задать в момент развертывания.

Следующий шаг - выбор способа передачи параметров в гостевую ОС. VMware поддерживает два варианта передачи параметров:
  • Через ISO образ.
  • Через VMware Tools.
Настройка механизма передачи для vSphere Web Client выполняется на вкладке vApp Options -> OVF settings, для vSphere Client в Options -> vApp Options -> OVF Settings).

При передаче параметров через ISO, гипервизор запишет параметры в XML файл, сохранит его в ISO образе и подмонтирует к ВМ через виртуальный CD-привод.

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

Для Windows используется команда:
"C:\Program Files\VMware\VMware Tools\vmtoolsd.exe" --cmd "info-get guestinfo.ovfEnv"

Для Linux используется команда:
/usr/sbin/vmtoolsd --cmd "info-get guestinfo.ovfEnv"

Вывод команды:
C:\Users\Administrator>"C:\Program Files\VMware\VMware Tools\vmtoolsd.exe" --cmd "info-get guestinfo.ovfEnv"

<?xml version="1.0" encoding="UTF-8"?>
<Environment
     xmlns="http://schemas.dmtf.org/ovf/environment/1"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:oe="http://schemas.dmtf.org/ovf/environment/1"
     xmlns:ve="http://www.vmware.com/schema/ovfenv"
     oe:id=""
     ve:vCenterId="vm-1930">
   <PlatformSection>
      <Kind>VMware ESXi</Kind>
      <Version>6.0.0</Version>
      <Vendor>VMware, Inc.</Vendor>
      <Locale>en</Locale>
   </PlatformSection>
   <PropertySection>
         <Property oe:key="Administrator_Password" oe:value="P@ssw0rd1"/>
         <Property oe:key="DNS_Servers.3" oe:value="192.168.2.2,192.168.2.1"/>
         <Property oe:key="Default_Gateway.2" oe:value="192.168.3.1"/>
         <Property oe:key="Domain_Suffix.5" oe:value="company.local"/>
         <Property oe:key="Hostname.4" oe:value="server03"/>
         <Property oe:key="IP_Address.0" oe:value="192.168.3.100"/>
         <Property oe:key="Netmask.1" oe:value="255.255.255.0"/>
   </PropertySection>
   <ve:EthernetAdapterSection>
      <ve:Adapter ve:mac="00:50:56:a3:33:53" ve:network="vs-VLAN3" ve:unitNumber="7"/>
   </ve:EthernetAdapterSection>
</Environment>

Обратите внимание на цифры, присутствующие в названии параметров - это Key instance ID, который был задан при определении параметра. Если вы не задавали Key instance ID и Class ID, то имя параметра будет соответствовать значению Key ID.

Для считывания параметров можно воспользоваться простым скриптом на Powershell.
$sdpath = "C:\Program Files\VMware\VMware Tools\vmtoolsd.exe" 

[xml]$xml = & $sdpath --cmd "info-get guestinfo.ovfEnv" | Out-String

$properties = $xml.Environment.PropertySection.Property
$AdministratorPassword = ($properties | where-object {$_.Key -eq "Administrator_Password"}).Value
$IPAddress = ($properties | where-object {$_.Key -eq "IP_Address.0"}).Value
$Netmask = ($properties | where-object {$_.Key -eq "Netmask.1"}).Value
$DefaultGateway = ($properties | where-object {$_.Key -eq "Default_Gateway.2"}).Value
$DNSServers = ($properties | where-object {$_.Key -eq "DNS_Servers.3"}).Value
$Hostname = ($properties | where-object {$_.Key -eq "Hostname.4"}).Value
$DomainSuffix = ($properties | where-object {$_.Key -eq "Domain_Suffix.5"}).Value

После получения параметров вы можете дописать скрипт, который выполнит все необходимые настройки внутри гостевой ОС, например, задаст пароль локального администратора и переименует компьютер:
net user Administrator $AdministratorPassword
rename-computer -NewName $Hostname

Или настроит статический IP адрес, маску и маршрутизатор по умолчанию на сетевом адаптере:
#https://d-fens.ch/2013/11/01/nobrainer-using-powershell-to-convert-an-ipv4-subnet-mask-length-into-a-subnet-mask-address/
function Convert-IpAddressToMaskLength([string] $dottedIpAddressString)
{
  $result = 0; 
  # ensure we have a valid IP address
  [IPAddress] $ip = $dottedIpAddressString;
  $octets = $ip.IPAddressToString.Split('.');
  foreach($octet in $octets)
  {
    while(0 -ne $octet) 
    {
      $octet = ($octet -shl 1) -band [byte]::MaxValue
      $result++; 
    }
  }
  return $result;
}

$PrefixLength = Convert-IpAddressToMaskLength($Netmask)

New-NetIPAddress -InterfaceAlias "Ethernet" -IPAddress $IPAddress -PrefixLength $PrefixLength -DefaultGateway $DefaultGateway
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses $DNSServers

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

Предположим, что скрипт, выполняющий нужные настройки написан, и возникает закономерный вопрос - как его запускать?

Для ОС Windows есть несколько вариантов:
  • Использовать планировщик задач (Task Scheduler), который будет запускать скрипт при старте компьютера.
  • Использовать локальную групповую политику (gpedit.msc Computer Configuration -> Windows Settings -> Scripts (Startup/Shutdown) -> Startup), которая также запустит скрипт при старте компьютера.
  • Использовать сценарий setupcomplete.cmd, запускающийся после выполнения Sysprep.
Первые два варианта имеют свои недостатки, т.к. они будут запускать скрипт при каждой загрузке ОС. Поэтому нам потребуются дополнительные механизмы внутри самого скрипта, которые бы проверяли, что он уже отрабатывал, или которые бы отключали задание в планировщике или групповую политику после первого успешного запуска.

Более простым вариантом является использование связки Sysprep и файла C:\Windows\Setup\Scripts\setupcomplete.cmd внутри которого можно настроить запуск нашего скрипта на PowerShell, например:
"C:\Windows\System32\WindowsPowershell\v1.0\powershell.exe" "C:\Customization\script.ps1"

Также нам потребуется файл ответов unattend.xml для автоматической настройки через Sysprep. Вот пример файла для Windows Server 2012 R2 Standard:
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
   <settings pass="generalize">
      <component name="Microsoft-Windows-PnpSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
         <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
      </component>
   </settings>
   <settings pass="oobeSystem">
      <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
         <OOBE>
            <SkipMachineOOBE>true</SkipMachineOOBE>
            <HideEULAPage>true</HideEULAPage>
            <SkipUserOOBE>true</SkipUserOOBE>
            <ProtectYourPC>1</ProtectYourPC>
         </OOBE>
         <TimeZone>Russian Standard Time</TimeZone>
         <UserAccounts>
            <AdministratorPassword>
               <Value>P@ssw0rd</Value>
               <PlainText>true</PlainText>
            </AdministratorPassword>
         </UserAccounts>
      </component>
   </settings>
   <settings pass="specialize">
      <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
         <RegisteredOwner>User</RegisteredOwner>
         <RegisteredOrganization>Company</RegisteredOrganization>
         <ProductKey>D2N9P-3P6X9-2R39C-7RTCD-MDVJX</ProductKey>
         <ComputerName>*</ComputerName>
      </component>
      <component name="Microsoft-Windows-UnattendedJoin" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
         <Identification>
            <JoinWorkgroup>WORKGROUP</JoinWorkgroup>
         </Identification>
      </component>
   </settings>
</unattend>

Последнее, что остается - запустить Sysprep, указав файл ответов:
"C:\Windows\System32\Sysprep\sysprep.exe" /generalize /oobe /shutdown /unattend:C:\Sysprep\unattend.xml

При следующем включении ВМ, Sysprep автоматически сгенерирует новый SID и имя компьютера, а в конце запустить скрипт setupcomplete.cmd, который, в свою очередь, запустит наш скрипт.

После выключения ВМ вы можете экспортировать ее в OVF/OVA формат (Template -> Export OVF Template).

Наш шаблон для развертывания апплайнса готов.

Изменение конфигурации ВМ при развертывании

Помимо настройки гостевой ОС, OVF позволяет пользователю изменять конфигурацию ВМ в момент развертывания. Допустим, вы хотите сделать один универсальный шаблон, подходящий и для тестового развертывания, и для типового развертывания, и для развертывания в высоконагруженных средах. Отредактировав файл OVF, вы можете добавить меню с выбором предопределенной аппаратной конфигурации ВМ, например:
  • Small - 1 процессор, 512 МБ ОЗУ.
  • Normal - 2 процессора, 1024 МБ ОЗУ.
  • Large - 4 процессора, 4096 МБ ОЗУ.
В зависимости от выбранного пользователем варианта, гипервизор создаст ВМ с нужным количеством ядер и оперативной памяти.

Откройте файл .OVF в текстовом редакторе (если вы экспортировали ВМ в OVA архиве, то сначала распакуйте его содержимое, используя любой архиватор).

В файле после секции <References></References> вставьте текст, описывающий варианты конфигурации ВМ:
 <DeploymentOptionSection>
<Info>Deployment options for VMware Virtual SAN Witness Appliance</Info>
<Configuration ovf:id="Small">
   <Label>Small</Label>
<Description>VM with 1 CPU and 512MB RAM.</Description>
</Configuration>
<Configuration ovf:id="Normal">
   <Label>Normal</Label>
<Description>VM with 2 CPU and 1024MB RAM.</Description>
</Configuration>
<Configuration ovf:id="Large">
   <Label>Large</Label>
<Description>VM with 4 CPU and 4096MB RAM.</Description>
</Configuration>
  </DeploymentOptionSection>

Найдите в файле секцию <VirtualHardwareSection></VirtualHardwareSection> внутри которой описывается аппаратная конфигурация ВМ. Найдите области с тегами <Item></Item>, описывающие конфигурацию процессоров и ОЗУ, например:
      <Item>
        <rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits>
        <rasd:Description>Number of Virtual CPUs</rasd:Description>
        <rasd:ElementName>2 virtual CPU(s)</rasd:ElementName>
        <rasd:InstanceID>1</rasd:InstanceID>
        <rasd:ResourceType>3</rasd:ResourceType>
        <rasd:VirtualQuantity>2</rasd:VirtualQuantity>
      </Item>
      <Item>
        <rasd:AllocationUnits>byte * 2^20</rasd:AllocationUnits>
        <rasd:Description>Memory Size</rasd:Description>
        <rasd:ElementName>4096MB of memory</rasd:ElementName>
        <rasd:InstanceID>2</rasd:InstanceID>
        <rasd:ResourceType>4</rasd:ResourceType>
        <rasd:VirtualQuantity>4096</rasd:VirtualQuantity>
      </Item>

Замените их на теги с аттрибутами, указывающие на ранее добавленные варианты конфигураций, например:
      <Item ovf:configuration="Small">
        <rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits>
        <rasd:Description>Number of Virtual CPUs</rasd:Description>
        <rasd:ElementName>1 virtual CPU(s)</rasd:ElementName>
        <rasd:InstanceID>1</rasd:InstanceID>
        <rasd:ResourceType>3</rasd:ResourceType>
        <rasd:VirtualQuantity>1</rasd:VirtualQuantity>
      </Item>
      <Item ovf:configuration="Normal">
        <rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits>
        <rasd:Description>Number of Virtual CPUs</rasd:Description>
        <rasd:ElementName>2 virtual CPU(s)</rasd:ElementName>
        <rasd:InstanceID>1</rasd:InstanceID>
        <rasd:ResourceType>3</rasd:ResourceType>
        <rasd:VirtualQuantity>2</rasd:VirtualQuantity>
      </Item>
      <Item ovf:configuration="Large">
        <rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits>
        <rasd:Description>Number of Virtual CPUs</rasd:Description>
        <rasd:ElementName>4 virtual CPU(s)</rasd:ElementName>
        <rasd:InstanceID>1</rasd:InstanceID>
        <rasd:ResourceType>3</rasd:ResourceType>
        <rasd:VirtualQuantity>4</rasd:VirtualQuantity>
      </Item>
      <Item ovf:configuration="Small">
        <rasd:AllocationUnits>byte * 2^20</rasd:AllocationUnits>
        <rasd:Description>Memory Size</rasd:Description>
        <rasd:ElementName>512MB of memory</rasd:ElementName>
        <rasd:InstanceID>2</rasd:InstanceID>
        <rasd:ResourceType>4</rasd:ResourceType>
        <rasd:VirtualQuantity>512</rasd:VirtualQuantity>
      </Item>
      <Item ovf:configuration="Normal">
        <rasd:AllocationUnits>byte * 2^20</rasd:AllocationUnits>
        <rasd:Description>Memory Size</rasd:Description>
        <rasd:ElementName>1024MB of memory</rasd:ElementName>
        <rasd:InstanceID>2</rasd:InstanceID>
        <rasd:ResourceType>4</rasd:ResourceType>
        <rasd:VirtualQuantity>1024</rasd:VirtualQuantity>
      </Item>
      <Item ovf:configuration="Large">
        <rasd:AllocationUnits>byte * 2^20</rasd:AllocationUnits>
        <rasd:Description>Memory Size</rasd:Description>
        <rasd:ElementName>4096MB of memory</rasd:ElementName>
        <rasd:InstanceID>2</rasd:InstanceID>
        <rasd:ResourceType>4</rasd:ResourceType>
        <rasd:VirtualQuantity>4096</rasd:VirtualQuantity>
      </Item>

Аналогичным образом вы можете добавлять в ВМ сетевые адаптеры, задавать количество и объем жестких дисков и т.д.

Сохраните и закройте OVF файл.

Откройте MF файл, который размещается в том же каталоге, что и OVF. С помощью команды
Get-FileHash -Path .\appliance.ovf -Algorithm sha1 

посчитайте новую хэш-сумму и запишите в MF файл.

Теперь, при развертывании ВМ из OVF шаблона пользователь сможет выбирать одну из доступных конфигураций.

Автоматизация процедуры развертывания апплайнса из шаблона

Шаблон апплайнса для развертывания и настройки ВМ готов. Но создавать новые ВМ через vSphere Client или vSphere Web Client довольно скучное занятие. Хотелось бы и его автоматизировать. Помочь в этом нам может утилита OVF Tool (https://www.vmware.com/support/developer/ovf/).

После установки запустите команду, указав путь к OVF файлу, чтобы получить информацию о шаблоне:
C:\Users\Administrator>"C:\Program Files\VMware\VMware OVF Tool\ovftool.exe" "D:\Software\appliance01\appliance01.ovf"
OVF version:   1.0
VirtualApp:    false
Name:          Test Appliance
Version:       1.0
Full Version:  1.0.0
Vendor:        Company inc.
Product URL:   http://blog.vmpress.org
Vendor URL:    http://blog.vmpress.org

Download Size:  68096 bytes

Deployment Sizes:
  Flat disks:   1024.00 MB
  Sparse disks: Unknown

Networks:
  Name:        VM Network
  Description: The VM Network network

Virtual Machines:
  Name:               appliance01
  Operating System:   windows8server64guest
  Virtual Hardware:
    Families:         vmx-10
    Number of CPUs:   1
    Cores per socket: 1
    Memory:           512.00 MB

    Disks:
      Index:          0
      Instance ID:    11
      Capacity:       1024.00 MB
      Disk Types:     SCSI-lsilogicsas

    NICs:
      Adapter Type:   E1000e
      Connection:     VM Network

Properties:
  Key:         Netmask
  Label:       Netmask
  Type:        ip

  Key:         Default_Gateway
  Label:       Default Gateway
  Type:        ip

  Key:         IP_Address
  InstanceId   0
  Category:    Network Settings
  Label:       IP Address
  Type:        ip
  Description: Укажите IP адрес для виртуальной
               машины.

Deployment Options:
  Id:          Small
  Label:       Small
  Description: VM with 1 CPU and 512MB RAM.

  Id:          Normal
  Label:       Normal
  Description: VM with 2 CPU and 1024MB RAM.

  Id:          Large
  Label:       Large
  Description: VM with 4 CPU and 4096MB RAM.

  Id:          Large
  Label:       Large
  Description: VM with 4 CPU and 4096MB RAM.

Чтобы создать новую ВМ из шаблона выполните команду:
C:\Users\Administrator>"C:\Program Files\VMware\VMware OVF Tool\ovftool.exe" --noSSLVerify^
 --acceptAllEulas^
 --name="TestVM01"^
 -ds="stor01"^
 --net:"VM Network"="VM Network 2"^
 --deploymentOption="Small"^
 --prop:"Default_Gateway"="192.168.1.1"^
 --prop:"IP_Address.0"="192.168.1.100"^
 --prop:"Netmask"="255.255.255.0"^
 --powerOn^
 "X:\Software\appliance01\appliance01.ovf"^
 vi://Administrator:P@ssw0rd@vcenter.company.local/VDC/host/CLU01

Символ "^" переноса строки и пробелы в начале каждой строки используются для лучшей читаемости (при желании можно написать команду в одну строчку).

--noSSLVerify - пропускает проверку SSL сертификата на vCenter Server.
--acceptAllEulas - автоматически принимает лицензионное соглашение в шаблоне апплайнса.
--name="TestVM01" - задает имя создаваемой ВМ.
-ds="stor01" - указывает имя хранилища, где требуется разместить ВМ.
--net:"VM Network"="VM Network2" - указывает к какой сети следует подключить адаптер, где название "VM Network" должно совпадать с именем сети (можно посмотреть в выводе первой команды, заданной в апплайнсе, а "VM Network 2" - группе портов в виртуальной инфраструктуре, куда требуется подключить виртуальный адаптер.
--deploymentOption - указывает тип создаваемой ВМ.
--prop:<Параметр>=<Значение> - перечень параметров можно посмотреть в выводе первой команды OVF Tool.
--powerOn - (опционально) - включить ВМ после создания.
"X:\Software\appliance01\appliance01.ovf" - путь к OVF файлу.
vi://Administrator:P@ssw0rd@vcenter.company.local/VDC/host/CLU01 - указывает адрес сервера vCenter для подключения (vcenter.company.local), логин (Administrator), пароль (P@ssw0rd), имя виртуального ЦОД (VDC) и кластера (CLU01), где будет создана ВМ.

Дополнительные параметры к OVF Tools можно посмотреть в руководстве пользователя.