Журнал LinuxFormat - перейти на главную

LXF148:tut7

Материал из Linuxformat
Версия от 20:52, 21 июля 2014; 2sash-kan (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Eucalyptus: Рулим облаками

С Eucalyptus и небольшой помощью от Ubuntu, Крис Браун вдруг обнаружил,

что не боги собственные облака запускают.



Eucalyptus – это открытая программа, поддерживающая создание собственных облаков (на своем оборудовании), с API, совместимым с EC2 и S3 от Amazon.

Между Eucalyptus и EC2 есть важное отличие: Eucalyptus в качестве основной технологии виртуализации применяет KVM, а Amazon – Xen.

Eucalyptus – штука относительно сложная; его название является сокращением от (приготовились...) Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems [Гибкая вычислительная архитектура для связывания ваших программ с полезными системами]. Он содержит пять основных компонентов:

  1. Контроллер облака (Cloud controller, CLC)
    Интерфейс на базе web; через него администраторы получают права, управляют образами машин, создают учетные записи пользователей и настраивают сервис. Он опрашивает контроллеры узлов [node controllers], получая данные о доступных ресурсах, вырабатывает сложные решения расписания и просит контроллер(ы) кластера реализовать их. Каждая установка Eucalyptus содержит только один CLC.
  2. Контроллер Walrus Storage (WS3)
    Предоставляет хранилище для образов машин и других файлов; совместим с S3 (Simple Storage Service) от Amazon.
  3. Контроллер EBS (Elastic Block Storage)
    Предоставляет постоянные блочные устройства (виртуальный эквивалент дискового раздела), которые можно примонтировать к работающим машинам.
  4. Контроллер кластера (Cluster Controller, CC)
    Выступает посредником между CLC и контроллером узла. Он получает запросы от CLC на выделение образа для машины и решает, на каком узле в кластере будет запущен данный экземпляр.
  5. Контроллер узла
    Управляет исполнением, проверкой и уничтожением экземпляров [instance] машин на одном узле (физическом компьютере) в кластере. У каждого физического компьютера в кластере есть один контроллер узла.
(thumbnail)
Рис. 1. Большое, масштабируемое облако Eucalyptus со множеством контроллеров кластера и узлов в каждом кластере.
(thumbnail)
Рис. 2. Для демонстрации концепции облако можно создать всего на двух компьютерах, плюс третий как пользовательский. Именно эта конфигурация используется на нашем уроке.

Каждый из этих компонентов предоставляет web-службу, определяемую описанием сервиса WSDL. На рис. 1 показано, как связаны компоненты. В более скромном сценарии, контроллер CLC, WS3, CC и EBS могут сосуществовать на одной машине («с внешним интерфейсом»), см. рис. 2. На нашем уроке описывается конфигурация из трех компьютеров. Учтите, что для этого требуются три настоящих, а не виртуальных компьютера.

Ubuntu и Eucalyptus

Ubuntu Enterprise Cloud (UEC) от Canonical – в сущности, оболочка для Eucalytpus, которая облегчает задачу сборки собственного облака. UEC предоставляет опции во время установки, для создания либо «интерфейсной», либо «узловой» машины, а также средства упрощения публикации образа новой машины. Так что имейте в виду: оставшаяся часть урока выдержана в духе Ubuntu.

Вы можете возразить, что я отстал от жизни. Ведь в конце мая на саммите разработчиков Ubuntu в Будапеште Canonical объявила, что, начиная с Ubuntu 11.10, в качестве дежурной облачной платформы Eucalyptus заменят на OpenStack.

Но эта замена не сильно повлияет на рынок внутри Ubuntu Server, пока в апреле 2012 не выйдет следующий релиз с долгосрочной поддержкой; и даже после этого Eucalyptus, возможно, будет поддерживаться. Что касается OpenStack, то мы и его, скорее всего, как-нибудь рассмотрим.

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

  1. Установить интерфейсную часть и контроллер узла.
  2. Установить и обработать предустановленный образ машины.
  3. С помощью EBS создать постоянное блочное устройство и файловую систему в нем, и примонтировать его к образу машины.


Если вы хотите последовать руководству и попробовать все сами (это в общем несложно), вам понадобится:

  • Копия Ubuntu 10.04 LTS Server CD. Его можно скачать с http://releases.ubuntu.com/lucid.
  • Компьютер для внешнего интерфейса. (Я использовал довольно слабосильную систему, с 1 ГБ памяти и маленьким диском объемом 40 ГБ.)
  • По крайней мере один компьютер, чтобы запускать на нем экземпляры виртуальных машин. У меня был 4-ядерный сервер с 8 ГБ памяти. Для простой демонстрации работоспособности можно обойтись и меньшим объемом.
  • В идеале – третий компьютер (возможно, ноутбук), для запуска на нем web-браузера и средств управления. Далее этот компьютер будет называться «клиентским». На худой конец, эту часть можно проделывать и на машине с внешним интерфейсом, если вы установили на ней графический рабочий стол. Эти машины должны содержаться в одной сети. Если вы создаете облако «взаправду», вам понадобится сеть, доступная другим пользователям.
  • Шаг 1 Установите интерфейсную часть, загрузившись с 10.04 LTS Server CD и выбрав в меню загрузки Install Ubuntu Enterprise Cloud. Вас спросят, какие компоненты вы хотите установить. Поскольку этот компьютер будет обеспечивать все функции внешнего интерфейса, выберите Cloud Controller, Walrus Storage Service, Cluster Controller и Storage Controller. Вам нужно придумать имя кластеру (мы взяли «lxf»), а также указать область IP-адресов, резервируемых для экземпляров машин. Убедитесь, что выбранный вами диапазон не используется и не будет выделяться ни одному из серверов DHCP в вашей сети.
  • Шаг 2 Установите хотя бы один узел. Снова загрузитесь с 10.04 LTS Server CD и выберите в меню загрузки Install Ubuntu Enterprise Cloud. Если повезет, он определит присутствие только что установленного CLC и предложит установить просто пакет Node Controller. Эта установка очень проста.
    Кстати, вы вовсе не обязаны делать установку на пустой компьютер: можно взять уже имеющийся и через apt-get установить пакеты eucalyptus-cloud, eucalyptus-cc, eucalyptus-walrus и eucalyptus-sc в интерфейсной части, а пакет eucalyptus-nc установить на каждом узле. Правда, потребуется немного ручной работы, чтобы зарегистрировать компоненты и обменяться ключами SSH.
  • Шаг 3 На клиентском компьютере установите пакет euca2ools:
$ sudo apt-get install euca2ools


Он содержит массу утилит командной строки, которые создают образы машин, создают и уничтожают экземпляры, управляют объемом хранения и многим другим.

Утилиты Eucalyptus требуют импортировать несколько сертификатов для аутентификации и задать некоторые переменные окружения, чтобы к их значениям можно было обращаться. Это следует проделывать в той оболочке, откуда вы запускаете утилиты управления. UEC сделала эту установку (относительно) простой, а именно:

  • Шаг 4 На машине-клиенте перейдите по https://192.168.1.75:8443 (подставьте IP-адрес вашей машины с внешним интерфейсом). В вашем браузере для этого адреса нужно сделать исключение по безопасности, объявив сертификат этого сайта доверенным. Выполните вход с именем и паролем пользователя «admin», затем, следуя подсказкам, смените пароль.
  • Шаг 5 Перейдите на вкладку Credentials. Нажмите кнопку Download Credentials, скачайте и сохраните zip-файл. В нем содержатся сертификаты, а также скрипт под названием eucarc, который установит их за вас.
  • Шаг 6 Создайте каталог ~/.euca-admin и распакуйте в него скачанный файл с сертификатами, примерно так:
$ mkdir ~/.euca-admin
$ chmod 700 ~/.euca-admin
$ unzip -d ~/.euca-admin ~/Downloads/euca2-admin-x509.zip
$ source ~/.euca-admin/eucarc

(В файл ~/.bashrc можно внести строку, чтобы к файлу eucarc можно было обращаться автоматически.)

  • Шаг 7 Облако уже функционирует, хотя в нем не задано ни одного экземпляра машины. Проверьте это с помощью:
$ euca-describe-availability-zones verbose

Вы увидите нечто вроде этого:

AVAILABILITYZONE lxf 192.168.1.75
AVAILABILITYZONE |- vm types free / max cpu ram disk
AVAILABILITYZONE |- m1.small 0004 / 0004 1 192 2
AVAILABILITYZONE |- c1.medium 0004 / 0004 1 256 5
AVAILABILITYZONE |- m1.large 0002 / 0002 2 512 10
AVAILABILITYZONE |- m1.xlarge 0002 / 0002 2 1024 20
AVAILABILITYZONE |- c1.xlarge 0001 / 0001 4 2048 20

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

  • Шаг 8 Сейчас нам нужно получить образ машины. Идя опять же по пути наименьшего сопротивления, возьмем готовый пакет из хранилища образов: перейдем на вкладку Store и выберем образ (наш выбор – Ubuntu 10.04 LTS 64-bit) и нажмем на Install. Образ скачается и скопируется в WS3 на интерфейсную часть. Список образов вам выведет команда
$ euca-describe-images
IMAGE eki-F2ED10CE image-store-1305523043/kernel.manifest.xml
IMAGE eri-0762113B image-store-1305523043/ramdisk.manifest.xml
IMAGE emi-DCE61058 image-store-1305523043/image.manifest.xml

(Строки для краткости отредактированы.) Если зайти на интерфейсную машину, образ можно найти в /var/lib/eucalyptus/bukkits. Вы увидите, что образ состоит из трех частей: образ ядра (eki), образ ramdisk (eri) и образ машины (emi).

  • Шаг 9 Уже можно создавать экземпляр машины, использующей этот образ. Ей будет выделен IP-адрес из диапазона, указанного вами при установке интерфейсной части. Также в ней будет запущен SSH-сервер, чтобы на нее можно было зайти. Для аутентификации UEC использует публичный и закрытый ключи аутентификации SSH. Значит, следующий этап состоит в создании пары ключей SSH. Публичный ключ в этой паре будет занесен на интерфейсную часть и внедрен в создаваемые экземпляры. Закрытый ключ создается в локальном файле. Выполните следующие команды:
$ cd ~/.euca-admin
$ touch chriskey.priv
$ chmod 600 chriskey.priv
$ euca-add-keypair chriskey > chriskey.priv

Понятно, вместо chriskey возьмите другое имя для ключа. Можно создать несколько ключей и использовать различные ключи для разных экземпляров машины. Выводится список ключей таким образом:

$ euca-describe-keypairs
KEYPAIR chriskey 1a:bd:73:27:63:20:55:98:7f:e0:a d:94:18:45:a3:62:bf:9a:07:b7

Как видите, у меня определен только один ключ.

  • Шаг 10 Eucalyptus поддерживает «именованные сети» (они же «security groups»), где можно задавать сетевые правила доступа (фильтрации), применяемые к каждому экземпляру машины в группе. Группа, созданная по умолчанию, называется (угадайте...) default. В ней нужно применить правило, разрешающее в экземплярах машин доступ к порту 22, вот так:
$ euca-authorize default -P tcp -p 22 -s 0.0.0.0/0


Список security groups и связанных с ними правил выводится командой

$ euca-describe-groups
GROUP admin default default group
PERMISSION admin default ALLOWS tcp 22 22 FROM CIDR 0.0.0.0/0

Здесь видно, что у меня только одна группа и одно правило.

  • Шаг 11 Наконец мы можем создать экземпляр машины в облаке:
$ euca-run-instances emi-DCE61058 -k chriskey -t m1.small
RESERVATION r-65660AA5 admin admindefault
INSTANCE i-4EFB0895 emi-DCE61058 0.0.0.0 0.0.0.0 pending chriskey 0
m1.small2011-05-16T05:57:15.705Z lxf eki- F2ED10CE eri-0762113B

Первое создание экземпляра из образа займет некоторое время (несколько минут) на сборку. Впоследствии экземпляры машин из того же образа будут создаваться за секунды. Прогресс можно отслеживать с помощью команды euca-describe-instances. По создании экземпляра, статус изменится с «pending» на «running», и будет показан IP-адрес, выделенный для вашей машины.

$ euca-describe-instances
RESERVATION r-336D073E admin default INSTANCE i-389106DE emi-DCE61058
192.168.1.220 172.19.1.2 running chriskey 0 m1.small 2011-05-16T10:20:56.293Z lxf eki- F2ED10CE eri-0762113B

При первой нашей попытке команда euca-run-instances не смогла завершиться, видимо, сочтя достаточным просто записать малопонятные сообщения в файл журнала. Слегка растерявшись, я проделал полное обновление пакетов на интерфейсной и узловой машинах и перезагрузился. После этого все заработало хорошо.

  • Шаг 12 Настал момент истины. Сейчас вы должны провести SSH на экземпляр вашей машины, используя только что выведенный IP-адрес и созданный ранее закрытый ключ:
$ ssh -i ~/.euca-admin/chriskey.priv ubuntu@192.168.1.220

Образам машин по умолчанию назначается учетная запись ubuntu. Выполнив вход, вы увидите довольно минималистскую систему, и сначала вам, скорее всего, захочется установить дополнительные пакеты, чтобы машина отвечала заявленным целям (на врезке «Заправка облака» описан способ получше). Итак, мы достигли второй цели из трех.

Экземпляр можно перезагрузить командой

$ euca-reboot-instances i-389106DE

Локальное хранилище, прикрепленное к каждой машине, после перезагрузки остается нетронутым. Но если прекратить работу экземпляра командой

$ euca-terminate-instance i-389106DE

то и хранилище исчезнет. Завершению экземпляра соответствует выброс компьютера со всеми его дисками на помойку. Виртуального эквивалента «выключения компьютера» не существует.



Постоянное хранилище

Скорее всего, вам потребуется, чтобы облако хранило данные, которые существуют независимо от конкретного экземпляра машины. Eucalyptus предоставляет две схемы для постоянного хранения. Первая называется Walrus Storage Service, она эквивалентна S3 (Simple Storage Service) от Amazon. S3 предоставляет контейнеры под названием “bucket [ведро]”, где можно размещать файлы. «Файловой системы» в понимании Linux здесь нет.

Вторая схема называется EBS (Elastic Block Storage). С ее помощью можно создавать «тома» указанного размера и прикреплять их к любому работающему экземпляру машины. Он выглядит как обычное блочное устройство, и на нем можно создавать файловую систему и монтировать его как обычный раздел диска.

Однако тома EBS существуют независимо от образа какой-либо машины и не привязаны ни к какому отдельному образу. Их можно рассматривать как внешние USB-приводы, которые можно подключить к любой машине. Здесь мы создадим файловую систему объемом 2 ГБ в зоне доступности lxf:

$ euca-create-volume -s 2 -z lxf
VOLUME vol-5AAF0646 2 creating 2011-05-18T04:58:34.699Z

Про свои тома можно узнать командой euca-describe-volumes:

$ euca-describe-volumes
VOLUME vol-5AAF0646 2 lxf available 2011-05-18T04:58:34.699Z

Присоединим том к копии с помощью команды euca-attach-volume:

$ euca-attach-volume vol-5AAF0646 -i i-59F20903 -d /dev/sdb
VOLUME vol-5AAF0646

Это можно рассматривать как подключение внешнего USB-привода к отдельному компьютеру. В экземпляре том появится как устройство /dev/sdb.

Если теперь зайти в сеансе SSH на экземпляр компьютера, вы сможете увидеть это устройство, а далее уже использовать традиционные утилиты, такие как Fdisk, для создания на нем разделов, а затем Mke2fs для создания файловых систем в этих разделах. Это уже стандартные действия для файловых систем, я не буду их повторять. Но, поверьте, это работает – и решает третью поставленную нами задачу.

Том можно отсоединить от существующего экземпляра и присоединить к другому:

$ euca-detach-volume vol-5AAF0646
$ euca-attach-volume vol-5AAF0646 -i i-3F2F0842 -d /dev/sdb

Будьте осторожны! Отсоединение тома эквивалентно вытаскиванию внешнего привода: убедитесь, что он сначала был отмонтирован.

Если вы дошли до этого места – поздравляю! Тема Eucalyptus гораздо обширнее, чем можно охватить на четырех страницах, но сейчас вы уже создали облако, и на рынке труда вздорожали этак на 50%.

Персональные инструменты
купить
подписаться
Яндекс.Метрика