VMware ESXi на Raspberry Pi: первые тесты и выводы

Не так давно в статье на Хабре мы рассказывали, что VMware ESXi стала доступна для Raspberry Pi. В этой статье мы рассмотрим установку гипервизора и запуск гостевой ОС на Raspberry PI 4 Model B.

Мы подразумеваем, что читатель обладает базовыми навыками по работе с VMWare ESXi.

Подготовка рабочего места

Прежде чем приступать к установке, необходимо подготовить рабочее место. Вот что использовалось при написании инструкции:

  • Raspberry Pi 4 Model B 4GB RAM;
  • источник питания Qualcomm GA-QC810;
  • кабель USB A to USB type C;
  • карта MicroSD 16GB;
  • адаптер MicroSD to USB;
  • USB флешка 32GB;
  • USB флешка 16GB;
  • кабель HDMI-mini to HDMI;
  • комплект клавиатура+мышь с беспроводным адаптером;
  • ноутбук с Ubuntu 20.04;
  • кабель RJ-45;
  • монитор.

Уделите особое внимание источнику питания, так как нехватка тока может привести к разным ошибкам в процессе установки гипервизора. Используемый нами Qualcomm GA-QC810 дает 3А при напряжении 5В, что идеально подходит для нашей «малинки». Также рекомендуем использовать активное охлаждение Raspberry PI вместо пассивного.

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

Обратите внимание, что на момент написания статьи VMWare ESXi не поддерживает модуль Wi-Fi, для подключения к сети используется только проводной интерфейс.

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

Обновление EEPROM

Первым делом обновите EEPROM «малинки». Эта процедура выполняется в Raspberry PI OS. Эта ОС должна быть предустановлена на Raspberry PI, но, если вы уже устанавливали другую ОС, это не проблема.

Скачиваем Raspberry Pi Imager с официального сайта. Для Ubuntu программа распространяется в виде deb-пакета. Далее в терминале переходим в каталог со скачанным пакетом и устанавливаем его:

sudo dpkg -i imager_1.4_amd64.deb

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

sudo apt --fix-broken install

Если зависимости и Imager успешно установились, можно приступать к установке Raspberry Pi OS.

Окно Raspberry Pi Imager v1.4 с выбранными ОС и накопителем

Подключаем MicroSD-карту к ноутбуку и запускаем утилиту. В качестве ОС выбираем Raspberry Pi OS (32-bit), а в качестве SD Card — подключенную MicroSD-карту. Убедитесь, что выбрали правильное устройство, так как нажатие кнопки «write» сотрет все данные на устройстве и запишет туда файлы выбранной ОС.

Запись Raspberry Pi OS на MicroSD-карту

После завершения записи утилита дополнительно проверит корректность записанных данных. Если все хорошо, то устанавливаем MicroSD-карту в Raspberry Pi и запускаем. После загрузки ОС нас приветствует первоначальная настройка ОС. Отвечаем на ее вопросы и ближе к концу соглашаемся обновить ПО.

Обновлений EEPROM не найдено

После обновления ПО можно приступать к обновлению EEPROM. Сначала проверим наличие обновлений:

sudo rpi-eeprom-update

У нас установлена актуальная версия, поэтому необходимости выполнять обновление нет. Однако если версия CURRENT все же отличается от LATEST, то обновляемся:

sudo rpi-eeprom-update -a
sudo reboot

Теперь, когда EEPROM обновлен, приступаем к установке образа UEFI.

Установка UEFI

Для загрузки VMWare ESXi необходим UEFI, которого по умолчанию нет на Raspberry Pi. Это легко исправить. Выключаем «малинку», извлекаем MicroSD-карту и подключаем ее к ноутбуку.

Карточку необходимо отформатировать в FAT32 и примонтировать в удобное место:

sudo mkfs.fat -I /dev/sdX
sudo mount /dev/sdX /mnt

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

cd /tmp
wget 'https://github.com/raspberrypi/firmware/archive/master.zip'
unzip master.zip

В репозитории нас интересует содержимое каталога boot, кроме файлов с расширением .img, которые представляют собой образы с ядром ОС Linux. Избавляемся от img-файлов и копируем содержимое каталога на MicroSD-карту:

cd firmware-master/boot
rm -f *.img
sudo cp -r * /mnt

Так как это оригинальные файлы прошивки, в них нет UEFI. Скачиваем модули с UEFI отдельно на странице релизов:

cd /tmp
mkdir uefi
cd uefi
wget 'https://github.com/pftf/RPi4/releases/download/v1.20/RPi4_UEFI_Firmware_v1.20.zip'
unzip RPi4_UEFI_Firmware_v1.20.zip
rm RPi4_UEFI_Firmware_v1.20.zip

Если вы используете Raspberry Pi с 4 ГБ оперативной памяти, то в config.txt необходимо добавить строчку gpu_mem=16:

echo "gpu_mem=16" >> config.txt

После этого добавляем файлы на MicroSD-карту:

sudo cp -r * /mnt

Далее отмонтируем карту, устанавливаем ее в Raspberry Pi и запускаем.

Экран выбора загрузки

Если все сделано корректно, то UEFI быстро загрузится и «малинка» предложит зайти в настройки или продолжить загружаться.

UEFI Setup Utility на Raspberry Pi

Заходим в Setup и видим достаточно привычную для серверов картину. Однако глаз «цепляется» за строку «3072 MB RAM». Объяснение этому достаточно простое. По умолчанию оперативная память ограничивается до 3 ГБ для совместимости с другими ОС.

Отключение искусственного ограничения оперативной памяти

Так как нам нужна вся доступная на «малинке» оперативная память, то находим пункт Limit RAM to 3 GB по пути Device Manager — Raspberry PI Configuration — Advanced Configuration и устанавливаем в Disabled. После этого сохраняем настройки нажатием клавиши F10 и выходим из Setup Utility. Для применения настроек необходимо выполнить перезагрузку, о чем нас и попросят. Соглашаемся на перезагрузку, и наш Raspberry Pi готов к установке гипервизора.

Подготовка установочной флешки

Заходим на страничку ESXi Arm Edition, выбираем ESXi-Arm-ISO, соглашаемся с лицензией Technical Preview и принимаем факт, что Flings — это экспериментальное ПО и его стоит использовать только для тестовых целей.

Скачать образ без существующего аккаунта VMware не получится. Необходимо зарегистрироваться или войти со своей учетной записи. На странице загрузок выбираем ESXi for Arm ISO image (no VMware Tools). После скачивания разворачиваем ISO-образ на меньшую из флешек:

sudo dd if=VMware-VMvisor-Installer-7.0.0-16966451.aarch64.iso of=/dev/sdX bs=1M

Подключаем в Raspberry Pi флешку с образом и чистую флешку, которая будет выполнять роль системного диска, и включаем «малинку».

Назначение порядка загрузки

По умолчанию порядок загрузки UEFI начинается с попыток загрузиться по сети. Так как мы работаем с флешками, то заходим в Setup Utility и меняем порядок в следующем пункте настроек: Boot Maintenance Manager — Boot Options — Change Boot Order — Change the order. Записи меняют приоритет по нажатию кнопок +/-. Устанавливаем флешки первыми.

После установки приоритета необходимо нажать Enter для сохранения нового порядка, а затем сохранить изменения в конфигурации с помощью F10. Перезагружаем Raspberry Pi и наконец попадаем в установщик VMware ESXi.

Установка VMware ESXi

Дополнительные параметры для установщика

Ранее мы говорили, что предпочтительным способом общения с установщиком является использование монитора и клавиатуры, а не консоли. Эта рекомендация имеет наибольшую силу во время начала установки. При использовании клавиатуры можно нажать Shift + O и задать параметры для установщика, в то время как в консольном режиме это невозможно.

Мы как раз воспользуемся этим для ограничения раздела VMFS-L до 1 ГБ. Нажимаем Shift + O и прописываем autoPartitionOSDataSize=1024. Так у нас останется место на Datastore для виртуальных машин. К сожалению, нам не удалось заставить ESXi видеть другие USB-накопители и iSCSI-устройства, поэтому ограничение раздела VMFS-L — это пока единственный способ выделить место для хранилища ВМ.

Отвечаем на вопросы установщика, и спустя 10 минут VMware ESXi установлена. Обратим внимание, что установщик не задает вопросы про сетевые интерфейсы. Проводной интерфейс настроен получать адрес по DHCP, а беспроводной игнорируется системой.

Главная страница веб-интерфейса VMware ESXi

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

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

Во время установки гипервизора мы ограничили размер VMFS-L раздела до 1 ГБ, что позволило оставить 20 ГБ под datastore — место, где виртуальные машины хранят свои данные. Мы бы очень хотели воспользоваться возможностью загрузки готовых OVA-образов, но, к сожалению, под архитектуру ARM64 такие образы не находятся.

Установка Debian 10 из ISO-образа

Так как легким путем пойти не удалось, придется искать образы CD с ОС под архитектуру ARM64. Мы выбрали Debian 10 и скачали netinstall-версию с cdimage.debian.org.

При создании виртуальной машины нужно уделить особое внимание количеству оперативной памяти и размеру диска гостевой ОС. Во-первых, диск гостевой ОС должен быть от 16 ГБ, чтобы установщику было где развернуться. Во-вторых, количество свободного места на VMFS-разделе должно превышать количество выделенной оперативной памяти для ВМ.

Таким образом, при наличии 20 ГБ свободного места на VMFS получилось создать виртуальную машину с 2 ГБ оперативной памяти и 18 ГБ постоянной памяти. При нарушении этого условия виртуальная машина откажется запускаться, и одной из причин будет No space left on device.

Гостевая Debian 10 Buster и характеристики виртуальной машины

После множества попыток нам удалось установить Debian 10 на виртуальной машине в следующей конфигурации:

  • 2 vCPU;
  • 1 ГБ RAM;
  • 17 ГБ диск.

Со стороны операционной системы важными являются следующие настройки:

  • один раздел для всего на 17 ГБ;
  • не использовать swap;
  • из компонентов на выбор поставить только SSH Server.

Конечно, успех был достигнут не с первой попытки.

Рекомендации по решению проблем

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

Но не все проблемы решаются бездействием. Так, например, нам не удалось установить Debian с первого раза, поскольку виртуальная машина зависла на этапе разбиения диска, а следом завис и гипервизор.

Жесткая перезагрузка помогла продвинуть установку Debian дальше, но на этапе установки ядра ВМ опять зависала, потребление CPU снижалось до минимума, как и обращение к дискам. Гипервизор был неспособен перезагрузить ВМ, а datastore browser отображал бесконечную загрузку. Подозрения пали на флешку с гипервизором.

Задержка при обращении к диску до 150 секунд

Просто заменить флешку было невозможно, так как внешних накопителей подобного объема в ближайшем доступе не было. Графики мониторинга гипервизора говорили о больших задержках при обращениях к диску. Мы проверили установку Ubuntu 20.04 и CentOS 7, и каждая из ОС выдавала схожие симптомы, а проблема воспроизводилась в конкретные этапы установки.

Предположили, что установщику не хватает места. Мы сократили раздел VMFS-L до 1ГБ и выделили виртуальной машине 16 ГБ. Это сместило зависание виртуальной машины на самый конец установки и подтвердило догадку. Опытным путем было установлено, что для минимальной установки Debian 10 требуется диск на 17 ГБ.

В нашей сборке «бутылочным горлышком» было пространство на флешке, которого не хватало. Эту проблему можно решить использованием внешнего жесткого диска, однако в этом случае рекомендуем убедиться, что питания Raspberry Pi хватит для работы этого диска.

Заключение

Мы добились желаемого и не просто поставили гипервизор на Raspberry Pi, но и установили гостевую ОС, которая корректно работает. Хочется отметить, что запуск VMware ESXi на «малинке» был увлекательной и местами нетривиальной задачей.

Несмотря на малую вычислительную мощность Raspberry Pi, вероятно в будущем, ее можно применить в качестве бюджетного хоста-свидетеля (witness) для программно-определяемого хранилища VMware vSAN.