OpenQuality.ru

Качество программного обеспечения

Качество программного обеспечения: в главных ролях

Лента  Радар  Блог  Опыт  
Разум  Видео  Заметки  Эпизоды


Eucalyptus: поднятие виртуальных Windows-машин

Добрый день.

Технический пост для автоматизаторов, внедряющих 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-машин. Решение – за автоматизатором.

Отправить в Twitter, Facebook, FriendFeed, ВКонтакте | Опубликовано 15.10.2009 в рубрике "Облака"

Комментарии (1)

  1. Pingback : OpenQuality.ru | Кому в облаках жить хорошо? | January 17, 2010

    […] – Eucalyptus. Открытый код, слегка сыроват, но можно заточить под свои нужды. Более того, Eucalyptus получил большую […]



Добавить комментарий

Пожалуйста, исправьте результат: дважды два равно



КРАТКОЕ СОДЕРЖАНИЕ

Что такое качество программного обеспечения и как его улучшить: теория и практика, задачи и решения, подводные камни и обходные пути.


ПУТЕВОДИТЕЛЬ

Список всех статей с краткой аннотацией и разбивкой по рубрикам. Открыть карту.

ПОДПИСКА

Доступ к самым интересным материалам по электропочте и RSS. Подробности.

ИЩЕЙКА