Собственное облако с помощью Eucalyptus


Любой системный администратор слышал об Amazon EC2, удобнейшей системе облачных вычислений, которая позволяет получить любое количество серверов любой конфигурации с помощью одного клика мышью и тут же зайти на них, используя SSH. Достоинства сервиса очевидны, как и его цена. Но стоит ли платить, когда такую же систему можно поднять на своих машинах за каких-нибудь 30 минут?

По правде говоря, модель облачных вычислений уровня 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 состоит из трех компонентов:

  1. Контроллер узла (Node Controller, NC). Запускается на каждом узле, вовлеченном в облако, и отвечает за запуск, работу и остановку виртуальных машин.
  2. Контроллер кластера (Cluster Controller, CC). Управляет контроллерами узлов, принимает решение, на каких узлах будут запущены виртуальные машины.
  3. Контроллер облака (Cloud Controller, CLC).
  4. Устанавливается на машине, имеющей доступ к внешней сети, выступает в роли головного интерфейса для доступа к облаку. Обрабатывает пользовательские запросы на запуск виртуальных машин и собирает данные о загруженности узлов от контроллеров кластеров.

Подготовка к установке

Я буду устанавливать Eucalyptus в Ubuntu Linux, поэтому все последующие инструкции приведены для этой операционной системы. Если вы хотите использовать другой дистрибутив, обратитесь к руководству Eucalyptus Administrator Guide для систем CentOS 5.3, OpenSUSE 11, Debian Lenny 5.0 и Debian Squeeze/sid. Там же описан метод сборки системы из исходников и приведен список всех зависимостей.

Итак, приступим:

1 Часы фронтенда, узлов и клиентских машин должны быть синхронизированы, поэтому на каждой из них необходимо выполнить следующие команды:

$ sudo ntpdate-debian -s $ sudo apt-get install openntpd

2 Компоненты Eucalyptus должны иметь возможность свободно общаться друг с другом. Для этого порты 8443, 8773 и 8774 на машине-фронтенде и порт 8775 на узлах должны быть открыты.

3 Контроллер облака и узлы общаются, используя протокол SSH, поэтому между ними должен быть произведен взаимный обмен ключами пользователей root или eucalyptus.

4 Узлы должны быть сконфигурированы так, чтобы использовать bridge в качестве основного сетевого интерфейса. Для этого отключите или удалите NetworkManager (если вы работаете с десктопной редакцией Ubuntu), а затем установите пакет bridge-utils:

$ sudo apt-get install bridge-utils

Теперь откройте файл /etc/network/interfaces, закомментируй все имеющиеся настройки интерфейсов и добавьте строки:

auto br0 iface br0 inet dhcp bridge_ports all

Если в сети нет DHCP-сервера, добавьте настройки внешнего сетевого интерфейса прямо в файл:

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).

Все они упакованы в один тарболл, для установки которого необходимо проделать следующее:

1 Загрузить тарболл со странички http://open.eucalyptus.com/downloads.

2 Распаковать его во временный каталог и добавить путь до него в /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

3 Установить пакеты -cloud и -cc на машину-фронтенд (та, которая будет использоваться в качестве контроллера облака и кластера):

$ sudo apt-get install eucalyptus-cc eucalyptus-cloud eucalyptus-common

4 Установить контроллер узла на каждый узел, входящий в облако:

$ 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/eucalyptuscloud 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 хост3 ..."

Укажите в аргументе опции -addnode адреса всех узлов, которые должны быть вовлечены в облако.

Конфигурирование web-интерфейса

Откройте страничку https://localhost:8443 в web-браузере, заменив localhost на имя машины, исполняющей роль контроллера облака. Eucalyptus использует самоподписанные сертификаты, поэтому нужно указать браузеру принять сертификат. Далее введите admin/admin в качестве имени пользователя и пароля. После этого система проведет вас через три процедуры:

  • Обязательная смена пароля администратора.
  • Ввод email-адреса администратора.
  • Подтверждение адреса сервиса Walrus. По умолчанию он запускается на контроллере облака.

Клиентские утилиты Euca2ools, совместимые с интерфейсом EC2, используют x509-сертификаты для доступа к контроллеру. Чтобы их сгенерировать, перейдите на страничку Credentials и скачайте сертификаты с помощью клика по кнопке “Download certificates”. Затем создайте каталог $HOME/.euca и распакуйте в него сертификаты. Выполните следующую команду:

$ . $HOME/.euca/eucarc

Ее придется выполнять каждый раз, когда вы захотите использовать клиентские утилиты из пакета Euca2ools, поэтому лучше поместить эту строку в $HOME/.bashrc.

Конфигурирование узлов

Eucalyptus предлагает четыре различных сетевых режима для гостевых ОС.

По умолчанию выбран режим SYSTEM, при котором ОС получают произвольные адреса от DHCP-сервера. Второй режим называется STATIC и позволяет назначать каждой инстанции ОС свой собственный IP-адрес с помощью внутреннего DHCP-сервера. Режим MANAGED размещает ОС в обособленных подсетях, подчиняющихся специальным правилам, заданным пользователем (например, запрет PING, открытие SSH-доступа к ОС, присвоение ВМ публичного IP и т.д.) Режим MANAGED-NOVLAN предоставляет все то же самое, за исключением сетевой изоляции подсетей.

Для изменения сетевого режима достаточно открыть файл $EUCALYPTUS/etc/eucalyptus/eucalyptus.conf и изменить значение опции VNET_MODE и значения других, зависимых от режима, опций. Файл хорошо прокомментирован, так что операция не должна вызвать проблем. Для более подробного изучения этого вопроса, обратись к руководству: http://open.eucalyptus.com/wiki/EucalyptusNetworking_v1.5.2.

Создание образов ОС

За хранение образов операционных систем отвечает сервис Walrus, обращаясь к которому, контроллеры узлов получают образы и кэшируют их на собственных машинах.

ВМ-образ Eucalyptus состоит из следующих компонентов: образ диска, ядро и RAM-диск (опциональный). Все их необходимо загрузить в Walrus и зарегистрировать в Eucalyptus. Ниже показано, как это сделать для дистрибутива Ubuntu 9.04, уже подготовленного для использования в Eucalyptus и доступного со странички http://open.eucalyptus.com/wiki/EucalyptusUserImageCreatorGuide_v1.5.2.

Распаковываем архив:

$ 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/vmlinuz2.6.28-11-generic.manifest.xml

Последняя команда напечатает уникальный идентификатор ядра (eki), который нужно присвоить переменной $EKI.

Добавляем и регистрируем RAM-диск:

$ euca-bundle-image -i euca-ubuntu-9.04x86_64/kvm-kernel/initrd.img-2.6.28-11generic \ --ramdisk true $ euca-upload-bundle -b ubuntu-ramdiskbucket \ -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.04x86_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

Используя web-интерфейс (страница Configuration), можно указать идентификаторы RAM-диска и ядра, которые будут использованы по умолчанию в том случае, если их ID не указаны в предыдущих командах. Для удаления образа сначала необходимо его «разрегистрировать»:

$ euca-deregister <emi-XXXXXXXX>

Затем удалить файлы из Walrus (указанные переменные устанавливаются командой “. $HOME/.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, чтобы получить сертификаты. Распаковываем их в каталог $HOME/.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-адреса для виртуальных машин, а пользователь должен выполнить следующие шаги для подключения к ВМ:

1 Разрешить коннекты к SSH из внешней сети:

$ euca-authorize -P tcp -p 22 -S 0.0.0.0/0 default

2 Сделать запрос на выделение публичного IP:

$ euca-allocate-address

3 Ассоциировать IP с ВМ (ID возвращает команда euca-describe-instances):

$ euca-associate-address <IP> -i <ID виртуальной машины>

4 Подключиться к ВМ:

$ ssh -i mykey.private root@<IP>

Для остановки ВМ следует использовать команду:

$ euca-terminate-instances <ID ВМ>

Выводы

Eucalyptus не самая простая в использовании система, но один раз настроив облако вы получите в распоряжение свой собственный Amazon, который может месяцами работать, не требуя вашего вмешательства.

Статья написана для журнала Хакер.

Источник: http://execbit.ru

Ссылка на оригинал: http://execbit.ru/2011/08/23/eucalyptus/