суббота, 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 можно посмотреть в руководстве пользователя.

понедельник, 7 ноября 2016 г.

Экзамен на статус VCP6-NV

Не так давно я сдавал экзамен 2V0-641 для получения статуса VCP6-NV. И пока воспоминания еще свежи, я хочу поделиться с вами несколькими рекомандациями касаемо экзамена.

Экзамен включает в себя 85 вопросов. По формату он ничем не отличается от любого другого экзамена, будь то VCP6-DCV или VCP6-DTM, поэтому если вы уже сдавали эти экзамены, то процесс не будет для вас в новинку.

Большая часть вопросов касается VMware NSX, однако встречаются вопросы и по стандартным и распределенным виртуальным коммутаторам.

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

Подготовку к экзамену (как и к любым другим) следует начинать с чтения Blueprint: https://mylearn.vmware.com/mgrReg/plan.cfm?plan=64297&ui=www_cert

Важно помнить, что экзамен не охватывает функциональные возможности, появившиеся в NSX 6.2.x: Cross-vCenter, Hardware VTEP, Traceflow и др. - учтите это при подготовке.

Касаемо материалов для подготовки. Думаю, не стоит говорить, что официальная документация обязательна к прочтению, так вот: официальная документация обязательна к прочтению. Что касается функционала распределенных коммутаторов, то рекомендую освежить в памяти Networking Guide по vSphere.

Другой, крайне полезный документ - Design Guide по NSX. В сети есть несколько версий design guide, читать лучше всего последнюю актуальную версию: VMware NSX for vSphere Network Virtualization Design Guide ver 3.0 (в Blueprint дана ссылка на более старую версию, в которой не хватает полезной информации). Не думаю, что сильно ошибусь, если скажу, что примерно на четверть всех вопросов в экзамене можно ответить, прочитав этот документ от и до.

Кроме того, если вы работает в компании партнере VMware и имеете доступ к порталу Partner Central, непременно скачайте один или два архива с документацией SET по NSX. Архивы содержат море полезной документации, начиная с описания эталонного дизайна, и заканчивая инструкциями по внедрению и сопровождению.

В Интернете вы можете найти разнообразные инструкции по подготовке к экзамену - вещи крайне полезные, но не стоит ограничиваться только ими. Вот примеры:
Для тех, кто любит смотреть обучающие видео я рекомендую:
  • vBrownBag VCP-NV - базовый курс, который подойдет для начинающих.
  • VCIX-NV - продвинутый курс, не смотрите, что это видео для подготовки к старшей сертификации VCIX, для VCP он тоже отлично подойдет.
Если у вас есть возможность - посетите авторизованные курсы NSX: Install, Configure, Manage (или хотя бы раздобудьте учебное пособие). Курс пригодится для того, чтобы структурировать имеющиеся знания, а также понять логику работы таких механизмов, как ARP Proxy, Distributed Firewall, L2 Bridging, Designated Interface.

Помимо курса вы можете использовать официальное руководство VCP6-NV Official Cert Guide. Книга полезна хотя бы тем, что содержит вопросы для самоподготовки, которые не лишним будет пройти.

Обязательно уделите внимание практике. Если у вас нет своего стенда, то его могут прекрасно заменить лабораторные работы на VMware HOL Online. В практике я рекомендую не останавливаться только на базовых вещах, типа создания логических коммутаторов или виртуальных маршрутизаторов, но также основательно попрактиковаться в вопросах траблшутинга работы NSX и виртуальных коммутаторов, включая такие штуки, как Flow Monitoring и Activity Monitoring, Service Composer, Data Security, ведения журналов; про функционал распределенного коммутатора не забывайте - знание LACP, Port Mirroring, Network IO Control пригодятся на экзамене.

Еще одна рекомендация касаемо подготовки. Многие из вас должны быть в курсе, что помимо VCP присутствует и более простой сертифицированный статус VCA (VMware Certified Assosiate). Тем, кто не уверен в своих силах одолеть VPC, рекомендуется сначала сдать VCA. Эти экзамены существенно дешевле, к ним можно подготовиться и сдать, не имея практического опыта. Однако в случае с VCA6-NV экзамен сделан из рук вон плохо. Присутствует большое количество опечаток, двусмысленности, откровенно бредовых и неуместных вопросов. Например, мне за экзамен попалось два вопроса на знание Horizon View, хотя, казалось бы, при чем он здесь? Поэтому не уверен, что сдача VCA несет в себе какой-то смысл, разве что нервы потренировать.

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