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

Подготовка образа Ubuntu для vRealize Automation 8

Начиная с vRA 8, для гостевых ОС появилась возможность настройки через Cloud-Init. Cloud-Init позволяет подготовить ВМ к работе без необходимости использования сторонних агентов (как было в vRA 7.x) и систем управления вроде Ansible или Puppet. Администратору достаточно описать настройки в разделе CloudConfig в YAML шаблоне, после чего vRA сохранит их .ISO файле, подключит .ISO к ВМ и запустит Cloud-Init внутри гостевой ОС.

Однако, у Cloud-Init есть недостаток - он несовместим с Guest OS Customization, который используется VMware для настройки статического IP адреса в гостевой ОС. После выполнения настроек Guest OS Customization, ВМ перезагружается, что приводит к сбою работы Cloud-Init.

Для того, чтобы обеспечить работу двух механизмов, Maher AlAsfar в своем блоге https://vmwarelab.org/2020/02/14/vsphere-customization-with-cloud-init-while-using-vrealize-automation-8-or-cloud/ привел инструкцию по подготовке шаблона ВМ на базе Ubuntu 18.04. Ниже приведен вольный перевод его статьи с небольшими уточнениями по процессу подготовки шаблона. Идея фикса заключается в том, чтобы позволить Guest OS Customization переименовать компьютер и задать статический IP адрес, после чего запустить Cloud-Init через задание в Cron.

Для начала работы нам потребуется свежеустановленная Ubuntu Server 18.04. Вы можете использовать как обычный дистрибутив, так и Live Server.

Установите актуальную версию VMware Tools:
sudo apt-get update -y
sudo apt install -y open-vm-tools

Если вы используете Ubuntu Server (не Live Server), то установите Cloud Init:
sudo apt-get install -y cloud-init

Отредактируйте файл /etc/cloud/cloud.cfg и добавьте в него строчку disable_vmware_customization: true

Закомментируйте строку #D /tmp 1777 root root - в файле /usr/lib/tmpfiles.d/tmp.conf

В файле /lib/systemd/system/open-vm-tools.service добавьте строку After=dbus.service в разделе [Unit].

Для Live Server выполните рекомендации из https://kb.vmware.com/s/article/54986. Удалите каталог /var/lib/cloud/seed/nocloud-net и удалите файл /etc/cloud/cloud.cfg.d/50-curtin-networking.cfg

Выполните команду sudo dpkg-reconfigure cloud-init и оставьте настройку Cloud Init через OVF (OVF: Reads data from OVF Transports).

Теперь нам потребуется подготовить скрипт, который будет запускаться Cron'ом спустя 90 секунд после старта ОС. Создайте файл /vra/enable-cloud-init.sh:
#/vra/enable-cloud-init.sh
sudo crontab -r

sudo rm -rf /etc/cloud/cloud-init.disabled

sudo cloud-init init
sleep 20

sudo cloud-init modules --mode config
sleep 20

sudo cloud-init modules --mode final
Второй скрипт требуется запустить перед выключением ВМ. Этот скрипт удалит временные файлы и устаревшие параметры ВМ и создаст задание в crontab. Создайте скрипт для подготовки шаблона /vra/cleanup.sh:
#/vra/cleanup.sh
#Schedule the script to run at next boot
echo "@reboot sleep 90; sh /vra/enable-cloud-init.sh" | crontab -

#Disable cloud-init
touch /etc/cloud/cloud-init.disabled

#Delete obsolete netplan network interface config file
rm -rf /etc/netplan/50-cloud-init.yaml

#Delete temp files
rm -rf /tmp/*
rm -rf /var/tmp/*

#Regenerate host ssh certificates
rm -f /etc/ssh/ssh_host_*
dpkg-reconfigure openssh-server

#Clear out the local repository
apt-get clean

#Clear cloud-init logs and seeds
cloud-init clean --logs --seed

#Remove machine-id
cat /dev/null > /etc/machine-id
rm /var/lib/dbus/machine-id
ln -s /etc/machine-id /var/lib/dbus/machine-id

#Stop rsyslog service
service rsyslog stop

#Clean up bash history
history -w && cat /dev/null > ~/.bash_history
history -c
Добавьте права на запуск: chmod +x /vra/cleanup.sh

Запустите скрипт:
sudo /vra/cleanup.sh

Выключите ВМ:
shutdown -h now

Шаблон ВМ готов к кастомизации. Теперь требуется создать blueprint, указать в нем шаблон ВМ и параметры кастомизации в разделе CloudConfig и запустить тестовое задание.

После завершения кастомизации Guest OS Customization в vSphere Client при выборе ВМ на вкладке Monitor -> Events появится сообщение Customization of VM succeeded.

Спустя 90 секунд внутри ОС запустится задание Cron, которое выполнит оставшиеся настройки припомощи Cloud-Init. Проверить статус cloud-init можно с помощью команды: cloud-init status --long

Проверить данные, которые были переданы Cloud-Init для настройки, можно с помощью команды: cloud-init query userdata

В случае возникновения ошибок, можно проверить журналы Guest OS Customization: /var/log/vmware-imc/toolsDeployPkg.log
Журналы Cloud-Init: /var/log/cloud-init.log

Дополнительная информация по подготовке образа Ubuntu:
  1. https://jimangel.io/post/create-a-vm-template-ubuntu-18.04/
  2. https://blah.cloud/infrastructure/using-cloud-init-for-vm-templating-on-vsphere/
  3. https://github.com/vmware/open-vm-tools/issues/240

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

Использование физических ПК в качестве рабочих столов в Horizon

Update: На сайте techzone.vmware.com доступен документ Using Horizon 7 to Access Physical Windows Machines, описывающий детали использования физических ПК в Horizon (https://techzone.vmware.com/resource/using-horizon-7-access-physical-windows-machines).

Одной из основных сложностей в организации работы VDI является предоставление необходимых вычислительных и дисковых ресурсов для запуска виртуальных десктопов. И дело не только в стоимости этих ресурсов. Если приобрести или арендовать необходимые лицензии, или даже взять в тестовое пользование, можно в течение нескольких дней, то поставка, установка и настройка оборудования может потребовать недели или даже месяцы. Для того, чтобы быстрее предоставить пользователям удаленный доступ к рабочим столам, в Horizon можно создавать пулы, включающие существующие физические компьютеры: настольные ПК или ноутбуки.

Среди плюсов такого решения:
  • Простота настройки VDI. Поскольку пользователи уже работают со своими ПК, то не требуется создавать и распространять эталонный образ, устанавливать приложения, мигрировать данные пользователей. Достаточно поставить агент Horizon Agent на ПК, создать пулы с физическими десктопами и назначить их нужным пользователям.
  • Отсутствие необходимости модернизировать серверную инфраструктуру. Для работы VDI достаточно поднять один сервер Horizon Connection Server (или несколько, если требуется отказоусточивость и масштабирование) с 4 vCPU и 10 ГБ ОЗУ, и один или несколько Unified Access Gateway c 2 vCPU и 4 ГБ ОЗУ для организации удаленного доступа пользователей из Интернет. 
  • Широкие функциональные возможности по работе с ПК в удаленном режиме - пользователи могут подключать различные периферийные устройства: принтеры, сканеры, USB-накопители, гарнитуры и web-камеры, копировать данные через буфер обмена или общие папки, использовать возможности графических адаптеров для воспроизведения видео или работы с 3D приложениями и многое другое.
  • Быстрая адаптация для пользователей. Пользователи работают со своими ПК, с ОС и приложениями, к которым они привыкли.
К минусам можно отнести:
  • Отсутствие возможности удаленной перезагрузки и диагности устройства. Если ПК зависнет, сотрудникам поддержки придется разбираться с проблемой локально.
  • Сложность поддержки. Поскольку физические ПК являются персональными устройствами, то обеспечение доступности и сохранности данных на ПК становится первоочередной задачей.
В старых версиях Horizon для подключения к физическим ПК применялись протоколы RDP или PCoIP. PCoIP хотя и обеспечивает более высокий уровень производительности, но требует установки в ПК адаптера PCoIP Host Card (http://blog.vmpress.org/2013/08/pcoip-1.html) и дополнительное сетевое подключение для передачи трафика PCoIP.

Начиная с 7.7, в Horizon появилась поддержка подключения к физическим ПК по протоколу Blast. Это стало возможным благодара появлению в Windows 10 Build 1803 функции Indirect Display Driver, позволяющей захватывать изображение с графического адаптера и перенаправлять его на виртуальные дисплеи.

Поддерживаются графические адаптеры Intel, AMD и NVIDIA, для которых установлены драйверы, совместимые с WDDM 2.4 или выше.

Сама процедура установки и настройки пула с физическими ПК мало чем отличается от создание обычного пула с ВМ. В качестве подготовительных шагов требуется ввести ПК в домен, установить драйвер графического адаптера и актуальную версию Horizon Agent и зарегистрировать ПК на Connection Server.

При создании пула выбрать Manual desktop pool.

В качестве источника десктопов указать Other sources.

Выбрать VMware Blast в качестве протокола по умолчанию.

И выбрать один или несколько физических ПК для добавления в пул.

При подключении к ПК в диспетчере устройств отобразится виртуальный адаптер VMware Horizon Indirect Display Driver.

Дополнительную информацию по адаптеру можно получить из утилиты dxdiag.

Хочу напомнить, что аппаратное кодирование изображения кодеками H.264 и H.265 в Blast доступно только на графических адаптерах NVIDIA.


Более подробно об использовании графических адаптеров NVIDIA в Blast можно прочитать в статьях http://blog.vmpress.org/2017/05/vmware-blast-h264.html и http://blog.vmpress.org/2019/02/horizon-blast-h265.html

Напоследок несколько советов по настройке физических ПК:
  • Отключите гибернацию на ПК. Сделать это можно из меню Control Panel -> Options, или выполнив команду: powercfg /h off
  • Отключите отображение кнопок выключения и перезагрузки ПК из меню Пуск. Сделать это можно через групповые политики: User Configuration -> Administrative Templates -> Start Menu and Taskbar -> Remove and prevent access to the Shut Down, Restart, Sleep, and Hibernate commands. Для того, чтобы применять эту настройку только при удаленном подключении пользователей вы можете использовать VMware Dynamic Environment Manager.
  • Для удаленного включения ПК вы можете задействовать функцию Wake-on-LAN в настройках BIOS на ПК. Для отправки WOL пакетов можно использовать различное ПО управления или просто скрипт на PowerShell: https://gallery.technet.microsoft.com/PowerShell-for-Wake-on-LAN-81f79a0a
  • Для оптимизации ПК для работы в VDI вы можете использовать утилиту: https://flings.vmware.com/vmware-os-optimization-tool