Я работаю над проектом на основе OpenStack. Теперь нам нужна виртуальная машина для загрузки из PXE. Я не могу найти никаких документов об этом. Поддерживает ли nova загрузку PXE? Если да, как мне создать образ KVM, эквивалентный голой машине, которая будет загружаться с PXE?
Вы можете установить ipxe на диск и загрузить с помощью syslinux (или другого загрузчика); это даст вам то, что будет вести себя точно так же, как система, загруженная через PXE BIOS. Дистрибутив iPXE включает инструменты для создания загрузочного ISO-образа, который вы можете использовать для загрузки систем в OpenStack, или вы можете создать образ жесткого диска с очень похожей настройкой.
Создайте образ диска:
$ dd if=/dev/zero of=/tmp/boot.img bs=1M count=4
Разделите изображение:
$ fdisk /tmp/boot.img
Вам нужно будет установить количество цилиндров.
Создать единый раздел с типом b
и сделать его загрузочным (n
создавать, a
для переключения флага загрузки).
Подключите изображение к устройству обратной связи.
# losetup -fP /tmp/boot.img
Создайте файловую систему msdos.
# mkdosfs -I /dev/loop0p1
Смонтируйте файловую систему.
# mount /dev/loop0p1 /mnt
Установите syslinux.
# syslinux --install /dev/loop0p1
Копировать ipxe.krn
на устройство (откуда-то ... либо вы создали его сами, либо скопировали из ipxe ISO).
Создайте соответствующую конфигурацию syslinux, например:
DEFAULT ipxe
LABEL ipxe
KERNEL ipxe.krn
Проверьте это, загрузив на локальном экземпляре KVM. Загрузите его в openstack и загрузитесь с ним. Обратите внимание, что в этом примере мы создали очень маленький (4M) образ диска, но вы также можете создать большой образ диска, а затем поместить на него небольшой раздел. Все зависит от того, чего вы пытаетесь достичь.
После дополнительного расследования я обнаружил, что все не так уж и сложно. Нам просто нужно изменить код nova, чтобы добавить одну строку
<boot dev=network>
в файле xml конфигурации vm. Потому что nova использует libvirt, а libvirt уже поддерживает загрузку PXE. В любом случае, спасибо за помощь.
Окружающая среда облака должна поддерживать передачу этих параметров. Если вы используете частную сетевую функцию экземпляра, это ограничит вас, поскольку текущая настройка не позволяет передавать дополнительные параметры демону dnsmasq, который обеспечивает поддержку DHCP. Вам придется изменить исходный код продукта, чтобы предоставить интерфейс для ввода параметров PXE и соответствующий механизм передачи этих параметров в базовый процесс dnsmasq.
Однако, если вы используете «плоскую» сеть и предоставляете свою собственную службу DHCP, тогда да - можно использовать соответствующий загрузочный образ, поддерживающий PXE, и у вас будет загрузка PXE.
Компания, в которой я работаю, Нимбула, использует KVM и DNSmasq так же, как NOVA. По крайней мере, внутри мы используем gPXE для запуска экземпляров. Образ диска имеет загрузчик gPXE в начале, а остальное - разреженное пространство для желаемого размера тома.
Что касается единообразной поддержки загрузки PXE, я, вероятно, добавлю это в наш продукт для следующего цикла малых выпусков, и, возможно, когда-нибудь позже он будет перенесен на NOVA.
Добавить <boot dev=network>
тега в XML в IceHouse v.2014.1.5, мне пришлось добавить строку:
os.append(etree.Element("boot", dev='network'))
Перед кодом (вне цикла):
for boot_dev in self.os_boot_dev:
os.append(etree.Element("boot", dev=boot_dev))
Вокруг линии 1195 n /usr/lib/python2.7/dist-packages/nova/virt/libvirt/config.py (Мне также пришлось удалить config.pyc в том же каталоге и перезапустить службу nova)