Добрый день.
Технический пост для автоматизаторов, внедряющих Eucalyptus. Все примеры, представленные в документации Eucalyptus, и все образы виртуальных машин, выложенные в свободный доступ, красноречиво свидетельствуют о симпатии создателей Eucalyptus к Unix-системам. В продукте нет официальной поддержки гостевых Windows-машин. Более того, такой поддержки нет даже в ближайших планах. Вместе с тем, поднятие виртуальных Windows-машин жизненно важно в тех случаях, когда IT-инфраструктура базируется на платформах Microsoft. Что делать? Вот три решения. Первые два представлены в виде ссылок. Третье – создано и проверено на практике.
1. Поднятие Windows-машин в KVM
Поддержка KVM представлена, например, в Ubuntu и последних версиях RHEL. В KVM создается образ Windows-машины, далее создается memdisk и ramdisk, и все три компонента помещаются в Walrus подобно обычному Linux-образу.
2. Поднятие Windows-машин в Xen (вариант 1)
Arrenlex проделал гигантскую работу, подготовив заплатку (patch) на исходный код Eucalyptus. Его решение позволяет поднимать Windows-машины в Xen (стандартный гипервизор для OpenSUSE и CentOS). Подробности можно прочитать по вышеуказанной ссылке. Следует отметить, что достоинства представленного решения сопровождаются “организационными” недостатками: 1) команда Eucalyptus официально не поддерживает такой финт (все-таки это правка исходного кода); 2) выход новых версий Eucalyptus поднимет вопрос об этой заплатке: будет ли она работоспособна, и, если нет, то выпустит ли автор заплатки соотвествующую версию. Ниже представлен еще один подход для Xen, разработанный в попытке найти “золотую середину”: получить требуемую функциональность малой кровью.
3. Поднятие Windows-машин в Xen (вариант 2)
Идея: 1) научить libvirt создавать XML-шаблон, соответствующий архитектуре Windows-машины; 2) поднимать гостевые машины с помощью ec2-run-instances точно так же, как и Linux-машины. Таким образом, Eucalyptus “думает”, что запускает Linux-машины, а Xen получает Windows-конфигурацию на блюдечке с голубой каемочкой.
Перед выполнением нижеописанных шагов нужно сделать резервные копии скриптов gen_libvirt_xml и add_key.pl. Вот содержимое gen_libvirt_xml для поддержки Windows-машин:
#!/usr/bin/env perl # # this generates an XML template for libvirt domain specification, # which is tailored to an instance by the node controller use diagnostics; use warnings; use sigtrap; use strict; use English; # for descriptive predefined var names use Data::Dumper; # for debugging: print Dumper($var) use Getopt::Long; use FindBin; $OUTPUT_AUTOFLUSH = 1; # no output buffering print <<EOF; <domain type='xen' id='18'> <name>NAME</name> <os> <type>hvm</type> <loader>/usr/lib/xen/boot/hvmloader</loader> <boot dev='hd'/> </os> <memory>MEMORY</memory> <vcpu>VCPUS</vcpu> <features> <pae/> <acpi/> <apic/> </features> <devices> <emulator>/usr/lib64/xen/bin/qemu-dm</emulator> <disk type='file'> <source file='BASEPATH/root'/> <target dev='hda'/> </disk> <interface type='bridge'> <source bridge='BRIDGEDEV'/> <mac address='PRIVMACADDR'/> </interface> </devices> </domain> EOF
В add_key.pl нужно прописать exit 0; в начале скрипта. Тем самым мы предотвращаем попытку монтирования Linux-раздела, которая изначально предпринимается для размещения ssh-ключа. Мы не собираемся заходить на систему по ssh. Вместо этого гораздо удобнее использовать стандартный терминальный клиент для Windows (пароль администратора задавался при создании Windows-образа). Итак,
#!/usr/bin/perl exit 0; ...
Далее обычный запуск:
os111:/opt/eucalyptus # ec2-run-instances emi-22600CB2 -n 1 -t m1.large --ramdisk eki-8F9616D5
В качестве emi-образа указываем Windows-образ, а в качестве eki выступает ramdisk для любой Linux-машины.
Плюс изложенного подхода: не надо править исходный код. Решение логично, понятно, его можно легко обновить после перехода на более свежую версию Eucalyptus. Минус: “или-или”. Либо мы поднимаем только Windows-машины, либо только Linux-машины. Как обойти этот минус? Два варианта навскидку: 1) отдельные availability zones (или даже отдельные облака) для Linux и Windows; 2) “на лету” подменять get_libvirt_xml и add_key.pl при запуске Windows- и Linux-машин. Решение – за автоматизатором.
Что такое качество программного обеспечения и как его улучшить: теория и практика, задачи и решения, подводные камни и обходные пути.
Pingback : OpenQuality.ru | Кому в облаках жить хорошо? | January 17, 2010
[…] – Eucalyptus. Открытый код, слегка сыроват, но можно заточить под свои нужды. Более того, Eucalyptus получил большую […]