Пошаговое руководство по созданию инфраструктуры облачных вычислений на базе Eucalyptus
Евгений Зобнин (j1m@synack.ru)
Любой системный администратор слышал об Amazon EC2, удобнейшей системе облачных вычислений, которая позволяет получить любое количество серверов любой конфигурации с помощью одного клика мышью и тут же зайти на них, используя SSH. Достоинства сервиса очевидны, как и цена, которую приходится платить за все это. Но стоит ли платить, когда такую же систему можно поднять на своих машинах за каких-нибудь тридцать минут?
Содержание:
- Эвкалиптовое облако
- Устройство
- Подготовка к установке
- Установка
- Настройка фронтенда
- Конфигурирование web-интерфейса
- Конфигурирование узлов
- Создание образов ОС
- Управление
- Использование
- Выводы
- Врезка: EC2-команды для получения информации
- Боковые выносы
По правде говоря, модель облачных вычислений уровня IAAS (Infrastructure As A Service) достаточна примитивна. Это просто зоопарк машин, объединенных в общий кластер и подключенных к головному серверу, выставленному во внешний мир. На каждой машине установлен Linux с поддержкой Xen или Kvm (сама машина также должна поддерживать аппаратную виртуализацию). Пользователь делает запрос к головному серверу о выделении новой виртуальной машины с указанной ОС и другими параметрами. Сервер обрабатывает запрос, выбирает наименее загруженную машину (возможны и другие варианты, например RoundRobin), предоставляет ей образ указанной ОС и дает указание на старт. Машина запускает образ, а пользователю возвращается IP-адрес его виртуального сервера. Именно так работает инфраструктура Amazon EC2, а также ее OpenSource-аналог под названием Eucalyptus.
Eucalyptus представляет собой инфраструктуру для реализации модели облачных вычислений уровня IAAS, к особенностям которого можно отнести совместимость интерфейса управления с Amazon EC2 и простоту развертывания и конфигурирования. Eucalyptus версии 1.5.2 обладает следующими характеристиками:
- Интерфейс, совместимый с EC2 и S3 (Web-сервисы и интерфейс Query/REST).
- Поддержка Xen и Kvm.
- Простота установки и развертывания.
- Поддержка большинства дистрибутивов Linux (бинарные пакеты и исходники).
- Безопасное взаимодействие компонентов, используя SOAP и WS-security.
- Минимальная модификация Linux-окружения.
- Инструменты администратора облака для управления системой и аккаунтинга пользователей.
-
Возможность объединения множества кластеров, каждый из которых располагается в отдельном сегменте сети, в единое облако.
Eucalyptus состоит из трех компонентов:
-
Контроллер узла (Node Controller, NC). Запускается на каждом узле, вовлеченном в облако, и отвечает за запуск, работу и остановку виртуальных машин.
-
Контроллер кластера (Cluster Controller, CC). Управляет контроллерами узлов, принимает решение, на каких узлах будут запущены виртуальные машины.
-
Контроллер облака (Cloud Controller, CLC). Устанавливается на машине, имеющей доступ к внешней сети, выступает в роли головного интерфейса для доступа к облаку. Обрабатывает пользовательские запросы на запуск виртуальных машин и собирает данные о загруженности узлов от контроллеров кластеров.
Я буду устанавливать Eucalyptus в Ubuntu Linux, поэтому все последующие инструкции приведены для этой операционной системы. Если ты хочешь использовать другой дистрибутив, следуй инструкциям, приведенным в руководстве «» для систем CentOS 5.3, OpenSUSE 11, Debian Lenny 5.0 и Debian Squeeze/sid. Там же описан метод сборки системы из исходников и приведен список всех зависимостей.
-
Часы фронтенда, узлов и клиентских машин должны быть синхронизированы, поэтому на каждой из них необходимо выполнить следующие команды:
$ sudo ntpdate-debian -s $ sudo apt-get install openntpd
-
Компоненты Eucalyptus должны иметь возможность свободно общаться друг с другом. Для этого открой порты 8443, 8773 и 8774 на машине-фронтенде и порт 8775 на узлах.
-
Контроллер облака и узлы общаются, используя протокол SSH, поэтому между ними должен быть произведен взаимный обмен ключами пользователей root или eucalyptus.
-
Узлы должны быть сконфигурированы так, чтобы использовать bridge в качестве основного сетевого интерфейса. Для этого отключи или удали NetworkManager (который является неотъемлемым компонентом десктопной редакции Ubuntu), а затем установи пакет bridge-utils:
$ sudo apt-get install bridge-utils
Теперь открой файл /etc/network/interfaces, закомментируй все имеющиеся настройки интерфейсов и добавь следующие строки:
$ sudo vi /etc/network/interfaces
auto br0
iface br0 inet dhcp
bridge_ports all
Если ты предпочитаешь настраивать интерфейсы вручную, приведи запись примерно к такому виду:
$ sudo vi /etc/network/interfaces
auto br0
iface br0 inet static
address 192.168.12.20
netmask 255.255.255.0
network 192.168.12.0
broadcast 192.168.12.255
gateway 192.168.12.1
dns-nameservers 192.168.12.1
dns-search foobar foobar.com
bridge_ports eth0
Запусти следующую команду, чтобы заставить систему перечитать сетевые настройки:
$ sudo /etc/init.d/network restart
Компоненты eucalyptus разбиты на несколько пакетов:
- Контроллер облака (пакет -cloud).
- Контроллер кластера (пакет -cc).
- Контроллер узла (пакет -nc).
Все они упакованы в один тарболл, поэтому для установки необходимо выполнить следующие шаги:
- Загрузить тарболл со странички .
- Распаковать его во временный каталог и добавить путь до него в /etc/apt/sources.list:
$ tar zxvf eucalyptus-1.5.2-*.tar.gz $ cd eucalyptus-1.5.2-* $ sudo sh -c "echo deb file://${PWD} ./ \ >> /etc/apt/sources.list" $ sudo apt-get update -
Установить пакеты -cloud и -cc на машину-фронтенд (та, которая будет использоваться в качестве контроллера облака и кластера):
$ sudo apt-get install eucalyptus-cc eucalyptus-cloud \ eucalyptus-common
- Установить контроллер узла на каждый узел, входящий в облако:
$ sudo apt-get install eucalyptus-nc eucalyptus-common
Обрати внимание, что все эти компоненты вытянут зависимостей на 140 Мб. Также понадобятся утилиты управления облаком Euca2ools, которые можно скачать с той же странички и установить на любую машину (возможно, фронтенд), следуя этим инструкциям:
$ tar zxvf euca2ools-1.0-*.tar.gz
$ cd euca2ools-1.0-*
$ sudo sh -c "echo deb file://${PWD} ./ \
>> /etc/apt/sources.list"
$ sudo apt-get update
$ sudo apt-get install euca2ools
Скрипт настройки Eucalyptus изменяет конфигурационный файл $EUCALYPTUS/etc/eucalyptus/eucalyptus.conf, поэтому мы должны присвоить переменной EUCALYPTUS правильное значение. Для Debian/Ubuntu оно будет равно «/»:
$ export EUCALYPTUS=/
Перед началом конфигурирования убедись, что контроллер облака запущен и функционирует:
$ ps aux | grep euca
Если это не так, запусти его:
$ sudo $EUCALYPTUS/etc/init.d/eucalyptus-cloud start $ sudo $EUCALYPTUS/etc/init.d/eucalyptus-cc start
В случае возникновения ошибок обратись к журнальным записям:
$ sudo less $EUCALYPTUS/var/log/eucalyptus
Чтобы создать облако, необходимо зарегистрировать кластер и каждый подчиненный узел. Для этого выполни следующую команду:
$ sudo $EUCALYPTUS/usr/sbin/euca_conf -addcluster имя_кластера \ имя_хоста
Замени имя_кластера на произвольное имя, а имя_хоста на DNS-имя машины или ее IP-адрес.
Для регистрации узлов выполни следующую команду:
$ sudo $EUCALYPTUS/usr/sbin/euca_conf -addnode "хост1 хост2..."
Укажи в аргументе опции ‘-addnode‘ адреса всех узлов, которые должны быть вовлечены в облако.
Конфигурирование web-интерфейса
Открой страничку «https://localhost:8443″ в web-браузере, заменив localhost на имя машины, исполняющей роль контроллера облака. Eucalyptus использует самоподписанные сертификаты, поэтому нужно указать браузеру принять сертификат. Далее введи admin/admin в качестве имени пользователя и пароля. После этого система проведет тебя через три процедуры:
- Обязательная смена пароля администратора.
- Ввод email-адреса администратора.
- Подтверждение адреса сервиса Walrus. По умолчанию он запускается на контроллере облака.
Клиентские утилиты Euca2ools, совместимые с интерфейсом EC2, используют x509-сертификаты для доступа к контроллеру. Чтобы их сгенерировать, перейди на страничку «Credentials» и скачай сертификаты с помощью клика по кнопке «Download certificates», затем создай каталог ~/.euca и распакуй в него сертификаты. Выполни следующую команду:
$ . $HOME/.euca/eucarc
Ее придется выполнять каждый раз, когда ты захочешь использовать клиентские утилиты из пакета Euca2ools, поэтому лучше поместить эту строку в ~/.bashrc.
Eucalyptus предлагает четыре различных сетевых режима для гостевых ОС. По умолчанию выбран режим SYSTEM, при котором ОС получают произвольные адреса от DHCP-сервера. Второй режим называется STATIC и позволяет назначать каждой инстанции ОС свой собственный IP-адрес с помощью внутреннего DHCP-сервера. Режим MANAGED размещает ОС в обособленных подсетях, подчиняющихся специальным правилам, заданным пользователем (например, запрет PING, открытие SSH-доступа к ОС, присвоение ВМ публичного IP и т.д.) Режим MANAGED-NOVLAN предоставляет все то же самое, за исключением сетевой изоляции подсетей.
Для изменения сетевого режима достаточно открыть файл $EUCALYPTUS/etc/eucalyptus/eucalyptus.conf и изменить значение опции VNET_MODE и значения других, зависимых от режима, опций. Файл хорошо прокомментирован, так что операция не должна вызвать проблем. При необходимости более плотно изучить этот вопрос, обратись к руководству: .
За хранение образов операционных систем отвечает сервис Walrus, обращаясь к которому, контроллеры узлов получают образы и кэшируют их на собственных машинах.
ВМ-образ Eucalyptus состоит из следующих компонентов: образ диска, ядро и RAM-диск (опциональный). Все их необходимо загрузить в Walrus и зарегистрировать в Eucalyptus. Ниже показано, как это сделать для дистрибутива Ubuntu 9.04, уже подготовленного для использования в Eucalyptus и доступного со странички .
Распаковываем архив:
$ tar zxvf euca-ubuntu-9.04-x86_64.tar.gz
Добавляем ядро в Walrus и регистрируем его в Eucalyptus:
$ euca-bundle-image -i euca-ubuntu-9.04-x86_64/kvm-kernel/ vmlinuz-2.6.28-11-generic --kernel true $ euca-upload-bundle -b ubuntu-kernel-bucket \ -m /tmp/vmlinuz-2.6.28-11-generic.manifest.xml $ euca-register ubuntu-kernel-bucket/ vmlinuz-2.6.28-11-generic.manifest.xml
Последняя команда напечатает уникальный идентификатор ядра (eki), который нужно присвоить переменной $EKI. Добавляем и регистрируем RAM-диск:
$ euca-bundle-image -i euca-ubuntu-9.04-x86_64/kvm-kernel/ initrd.img-2.6.28-11-generic --ramdisk true $ euca-upload-bundle -b ubuntu-ramdisk-bucket \ -m /tmp/initrd.img-2.6.28-11-generic.manifest.xml $ euca-register ubuntu-ramdisk-bucket/ initrd.img-2.6.28-11-generic.manifest.xml
На этот раз euca-register выведет на экран идентификатор RAM-диска, который необходимо присвоить переменной $ERI. Добавляем и регистрируем образ диска:
$ euca-bundle-image -i euca-ubuntu-9.04-x86_64/ ubuntu.9-04.x86-64.img --kernel $EKI --ramdisk $ERI $ euca-upload-bundle -b ubuntu-image-bucket \ -m /tmp/ubuntu.9-04.x86-64.img.manifest.xml $ euca-register ubuntu-image-bucket/ ubuntu.9-04.x86-64.img.manifest.xml
Используя web-интерфейс (страница Configuration), можно указать идентификаторы RAM-диска и ядра, которые будут использованы по умолчанию в том случае, если их ID не указаны в предыдущих командах.
Для удаления образа сначала необходимо его «разрегистрировать»:
$ euca-deregister <emi-XXXXXXXX>
Затем удалить файлы из Walrus (указанные переменные устанавливаются командой «. ~/.euca/eucarc»):
$ euca-delete-bundle -a $EC2_ACCESS_KEY -s $EC2_SECRET_KEY \ --url $S3_URL -b <bucket> -p <file prefix>
После того, как облако будет создано и настроено, администратор сможет добавлять и удалять узлы:
$ $EUCALYPTUS/usr/sbin/euca_conf -addnode <имя_узла> $ $EUCALYPTUS/usr/sbin/euca_conf -delnode <имя_узла>
добавлять и удалять образы виртуальных машин (как было показано в предыдущем разделе), конфигурировать облако, используя утилиту euca_conf или через редактирование файла $EUCALYPTUS/etc/eucalyptus/eucalyptus.conf, а также управлять пользователями.
Пользователи, желающие пользоваться услугами облака, должны перейти на страницу https://адрес-контроллера-облака:8443/ и зарегистрироваться. После этого администратору будет выслан email, содержащий две ссылки, первая из которых приведет к принятию заявки, вторая – к отклонению. После перехода по первой ссылке пользователю будет выслан email, содержащий инструкции для активации аккаунта.
В любой момент администратор может отключить или удалить пользователя, используя страницу Users web-интерфейса. Там же он может сам добавлять пользователей через самостоятельное заполнение формы, результатом чего опять же станет отправка «активационного письма» на адрес пользователя.
Итак, теперь у нас есть собственное облако, и мы хотим его использовать, а именно – запрашивать ресурсы и получать их. В этом разделе рассказано, как это делать с точки зрения пользователя.
Первое, открываем в браузере страничку https://адрес-контроллера-облака:8443. На экране появится окно входа. Жмем кнопочку Apply, заполняем форму и жмем «Sign up». В этот момент администратору отправляется сообщение, получив которое, он решит, стоит ли одобрять наш аккаунт или его лучше отклонить. В случае успеха на наш email придет сообщение с просьбой подтвердить аккаунт путем перехода по ссылке.
После подтверждения аккаунта входим в сервис и попадаем на личную страничку. Жмем кнопку «Download certificate», чтобы получить сертификаты. Распаковываем их в каталог ~/.euca (можно и в другой):
$ mkdir ~/.euca; cd ~/.euca $ unzip name-of-the-key-zip.zip $ chmod 0700 ~/.euca $ chmod 0600 ~/.euca/*
И запускаем скрипт eucarc, который установит правильные значения переменных, необходимых для работы Euca2ools:
$ . ~/.euca/eucarc
Скачиваем и устанавливаем Euca2ools (адрес приведен выше).
Перед запуском виртуальных машин мы должны создать пару ключей, которые будут использоваться для доступа к ОС по протоколу SSH. Ниже мы используем mykey в качестве имени ключей, но ты можешь выбрать любое другое имя:
$ euca-add-keypair mykey > mykey.private $ chmod 0600 mykey.private
Теперь узнаем, какие образы есть на сервере и их emi (идентификатор образа):
$ euca-describe-images
И запустим нужное количество ВМ с указанным emi:
$ euca-run-instances -k mykey -n <количество инстанций> \ <emi-id>
Проверим, запустились ли запрошенные ВМ:
$ euca-describe-instances
Если ты используешь облако только в личных целях, то можешь просто подключиться к SSH-сервису нужной ВМ, используя внутренний IP-адрес. Если же пользователи должны обращаться к услугам облака из внешней сети, то узлы Eucalyptus должны быть настроены для использования сетевого режима MANAGED или MANAGED-NOVLAN, которые позволяют назначать внешние IP-адреса для виртуальных машин, а пользователь должен выполнить следующие шаги для подключения к ВМ:
- Разрешить коннекты к SSH из внешней сети:
$ euca-authorize -P tcp -p 22 -S 0.0.0.0/0 default
- Сделать запрос на выделение публичного IP:
$ euca-allocate-address
- Ассоциировать IP с ВМ (ID возвращает команда euca-describe-instances)
$ euca-associate-address <IP> -i <ID виртуальной машины>
- Подключиться к ВМ:
$ ssh -i mykey.private root@<IP>
Для остановки ВМ следует использовать следующую команду:
$ euca-terminate-instances <ID ВМ>
Сегодня, имея достаточное количество машин, любой администратор и даже рядовой пользователь может с легкостью организовать свою собственную систему облачных вычислений, которая обеспечит тестеров программного обеспечения любым количеством гетерогенных сред, выделяемых по запросу, позволит существенно повысить время бесперебойной работы Web-сервисов, создать грандиозный игровой портал или даже собственную версию Amazon EC2. Добро пожаловать в новый мир!
Врезка: EC2-команды для получения информации
Получить описание и emi всех образов виртуальной машины:
$ euca-describe-images
Получить список всех работающих ВМ, принадлежащих пользователю, выполнившему запрос:
$ euca-describe-instances
Показать все пары ключей, используемые для доступа к ВМ:
$ euca-describe-keypairs
Получить список кластеров/зон:
$ euca-describe-availability-zones
DVD
-
Для большего удобства мы собрали все необходимые команды в файл im_too_lazy_to_type_it.txt. Вместо набора команд тебе будет достаточно делать copy’n'paste.
INFO
-
Пользователь может выбрать ядро и RAM-диск во время запуска ВМ:
$ euca-run-instances --kernel <eki-XXXXXXXX> --ramdisk \ <eri-XXXXXXXX> <emi-XXXXXXXX>
WWW
-
– публичное облако на базе Eucalyptus, ресурсами которого может воспользоваться любой желающий.
, – две реализации Web-интерфейса для управления EC2-облаком.
WARNING
-
Любой пользователь может загружать и регистрировать образы (в зависимости от прав, предоставленных администратором), но только администратор может загружать и регистрировать ядра и RAM-диски.
Статья опубликована в ноябрьском номере журнала «Xakep» за 2009 год.




