Пошаговое руководство по развертыванию IaaS-сервиса на базе OpenNebula

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

О проекте OpenNebula

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

После изучения возможностей, предоставляемых такими опенсорсными платформами, как Eucalyptus, OpenStack, CloudStack и OpenNebula, решено было остановиться на последнем варианте, и вот почему. Настройки Eucalyptus не всегда понятны и требуют постоянного чтения документации, соответственно, вероятность допустить ошибку довольно высока. Набирающий обороты и несколько более простой в настройках OpenStack только к лету 2012-го разобрался с лицензией (теперь исключительно Apache License), но сам проект не оставил впечатления целостного решения. Вероятно, потому, что изначально любой элемент можно заменить другим. В итоге получается хорошая головоломка, которую можно сложить, но придется постараться, чтобы заработало так, как требуется. Разрабатываемый под крылом Apache CloudStack четвертой версии показался весьма интересным. Во всяком случае, установка относительно проста, а процесс конфигурирования вполне логичен. Но при более близком знакомстве обнаружилось, что некоторые установки в интерфейсе CloudStack Managment Server недоступны, а попытка что-то поправить штатным инструментом гипервизора не всегда правильно интерпретировалась. Вот так и пришли к OpenNebula, которая произвела впечатление в меру простой, логичной и функциональной.

Проект стартовал в 2005 году как научно-исследовательский, поддерживается сообществом и изначально распространялся с открытым исходным кодом (Apache License). Развитие спонсируется большим количеством организаций, среди которых CERN, FermiLab, China Mobile, европейское космическое агентство и другие. OpenNebula представляет собой открытую и расширяемую платформу автоматизации работы ЦОД, позволяющую развернуть на уже имеющихся серверах публичный, приватный или гибридный IaaS, функционально схожий с Amazon EC2. На физическом сервере и кластере одновременно можно использовать разные гипервизоры, в настоящее время это Xen, KVM и VMware, в качестве гостевых будут работать любые из поддерживаемых гипервизорами ОС. Реализован интерфейс к Amazon EC2, поддерживается API — EC2 Query, OGF OCCI, vCloud и свой. Модульная архитектура позволяет интегрировать OpenNebula с любой платформой виртуализации, хранилищем данных или менеджером управления. Поддерживаются все присущие облакам технологии и функции, включая Live Migration (виртуальную машину можно легко перенести на другой сервер).

Ядро OpenNebula написано на С++, утилиты управления — на Ruby и shell. Все релизы называются в честь звездных туманностей (англ. nebula).

Инфраструктура OpenNebula

Управляют инфраструктурой OpenNebula с помощью управляющего сервера, так называемого фронтенда, который может работать на Linux или OS X. Обмен данными между управляющей машиной и узлами облачного кластера происходит по протоколу SSH. Для хранения параметров OpenNebula использует базу данных MySQL либо SQLite. Реализовано управление образами дисков, горячее подключение, репозиторий шаблонов, управление всем жизненным циклом VM (создание, клонирование и так далее) и учетными записями (пользователь, группа, роли). Подсистема хранения образов дисков поддерживает несколько хранилищ SAN и NAS. Доступ к образам с любого узла кластера организован по протоколам SSH, NFS, SFTP, HTTP, GlusterFS, Lustre, iSCSI/LVM. Виртуальные сети создаются в Virtual Network Manager, который обеспечивает нужный уровень абстракции и изоляции, поддерживается несколько технологий: dummy, iptables, ebtables, Open vSwitch, 802.1Q VLAN и VMware.

Для удобного управления виртуальными ресурсами и учетными записями применяется несколько уровней абстракции. Физические серверы объединяются в кластеры, которые уже могут распределять и балансировать нагрузку. Несколько установок OpenNebula объединяют в зоны (oZones), доступ к которым организован через абстрактный дата-центр, содержащий собственный набор ресурсов и учетные записи. Используется также концепция групп, каждая из которых имеет индивидуальные установки и набор доступных ресурсов, не пересекающихся с остальными.

Облачную среду OpenNebula могут совместно использовать несколько организаций или групп пользователей с делегированием полномочий и настройкой квот. Поддерживается несколько типов учетных записей со своими привилегиями. Все это позволяет создать гибкую адаптируемую и управляемую инфраструктуру, в которой все получают доступ только к отведенным ресурсам и функциям управления.

Собственно для администрирования физических и виртуальных систем предложены утилиты командной строки (начинаются на one* — onevm, onehost, oneuser и так далее) и веб-интерфейсы OpenNebula Sunstone (администрирование cloud-окружений) и OpenNebula Zones (управление зонами).

Возможности веб-консоли позволяют развернуть VM, подключиться к ним по VNC, управлять хранилищами, образами, сетями и так далее. Разработчиками предложен сервис OpenNebula Marketplace, позволяющий просто устанавливать преднастроенные виртуальные окружения, подготовленные в рамках проекта. Для мониторинга работы серверов в Sunstone интегрирована система Ganglia. Кроме того, возможности OpenNebula расширяются при помощи модулей и аддонов. Например, OpenNebulaApps представляет собой еще один слой, позволяющий на основе OpenNebula построить PaaS (Platform as a Service).

В OpenNebula MarketPlace доступны готовые образы виртуальных машин
В OpenNebula MarketPlace доступны готовые образы виртуальных машин

Обычные пользователи управляют своими системами через веб-портал OpenNebula Self-Service или посредством консольных команд (occi-*), которые, по сути, являются надстройками над интерфейсом OCCI (Open Cloud Computing Interface). Веб-консоли на данный момент локализованы частично, хотя проблем в использовании это не вызывает.

 

INFO

Программное обеспечение OpenNebula ставится только на управляющий сервер.

Установка OpenNebula в Ubuntu 12.04 LTS

На момент написания этих строк последней является версия 3.8.3 (Twin Jet), вышедшая в январе 2013 года. В этом релизе появились новые драйверы VMware, различные усовершенствования в EC2- и OCCI-интерфейсе, управлении состоянием VM, работе гипервизора KVM и многое другое. Проект предлагает набор образов для виртуальных машин Cloud Sandbox, позволяющих быстро развернуть управляющий сервер, оценить работу и доступ к демооблаку. Подготовлены пакеты для самостоятельной установки на x64-версии Ubuntu, Debian, openSUSE и RHEL/CentOS. Возможна установка из исходных текстов и на другие дистрибутивы Linux.

Нужные пакеты доступны в официальных репозиториях дистрибутивов, но, как правило, их версии сильно запаздывают. Например, в Ubuntu ситуация сейчас такая:

$ sudo apt-cache show opennebula | grep -i version  Version: 3.2.1-2

Процесс развертывания управляющего сервера не выглядит запутанным, и при должной внимательности сюрпризов не возникает. Установку собственно Ubuntu и гипервизоров расписывать не буду, эти вопросы уже хорошо освещены.

Хранилище образов в OpenNebula находится в каталоге /var/lib/one/images. Лучше под него отвести отдельный раздел или диск, чтобы в последующем не беспокоиться о наличии свободного места. Имена всех узлов должны разрешаться через службу DNS.

Для управления сетью на хостах нам потребуется мост. Ставим пакет bridge-utils и OpenSSH-сервер, который понадобится для удаленного управления:

$ sudo apt-get install bridge-utils openssh-server

Теперь настраиваем.

$ sudo nano /etc/network/interfaces  ... auto br0 iface br0 inet static address 192.168.1.111 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1  bridge_ports eth0 bridge_fd 9 bridge_hello 2 bridge_maxage 12 bridge_stp off

Если сетевых карт несколько, то настройки для каждой аналогичны. Перезапускаем сетевой сервис и проверяем:

$ sudo service networking restart $ brctl show br0 8000.000c2959428e no eth0 ...

Ставим пакеты, необходимые для работы OpenNebula:

$ sudo apt-get install build-essential cgroup-lite cracklib-runtime curl dpkg-dev ebtables g++ g++-4.6 libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libapparmor1 libcrack2 libdpkg-perl libmysqlclient18 libnuma1 libpq5 libreadline5 libruby1.8 libstdc++6-4.6-dev libvirt-bin libvirt0 libxenstore3.0 libxml2-utils libxmlrpc-c++4 libxmlrpc-core-c3 mysql-common ruby ruby-daemons ruby-eventmachine ruby-json ruby-mysql ruby-nokogiri ruby-password ruby-pg ruby-rack ruby-sequel ruby-sequel-pg ruby-sinatra ruby-sqlite3 ruby-termios ruby-tilt ruby1.8 ruby1.8-dev rubygems thin thin1.8

Проект развивается, каждая версия требует новых зависимостей, поэтому список не окончательный и постоянно меняется. Можно поступить иначе: вначале установить пакеты OpenNebula, а затем выполнить «apt-get install -f».

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

$ sudo nano /etc/exports  /var/lib/one 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash,anonuid=10000,anongid=10000)

Не забываем перезапустить сервер:

$ sudo service nfs-kernel-server start

Все готово для установки OpenNebula. Заходим на downloads.opennebula.org, выбираем и скачиваем пакет под Ubuntu 12.04. Внутри архива несколько deb-пакетов (ранее использовался один файл), ставим все:

$ tar xzvf Ubuntu-12.04-opennebula-3.8.3.tar.gz $ cd opennebula-3.8.3 $ sudo dpkg -i *.deb

Для работы нам понадобится база MySQL:

$ sudo apt-get install mysql-server $ mysql -u root -p mysql> CREATE USER 'oneadmin'@'localhost' IDENTIFIED BY 'oneadmin'; mysql> CREATE DATABASE opennebula; mysql> GRANT ALL PRIVILEGES ON opennebula.* TO 'oneadmin' IDENTIFIED BY 'oneadmin'; mysql> quit;

Настройки сервера хранятся в /etc/one/oned.conf, в нем содержится много разных параметров, но сейчас нас интересует подключение к базе данных:

$ sudo nano /etc/one/oned.conf DB = [ backend = "mysql", server = "localhost", port = 3306, user = "oneadmin", passwd = "oneadmin", db_name = "opennebula" ]

Настройка окружения

В процессе установки deb-пакетов создается учетная запись и группа oneadmin, от имени которых и будут запущены процессы. Также некоторые команды в консоли следует давать только от имени oneadmin. На сервере управления для удобства работы лучше задать пароль «sudo passwd oneadmin», на хостах можно использовать «sudo -u oneadmin».

Аналогичную учетку нужно создать и на остальных хостах, причем ID везде должен быть одинаков. Проверяем:

$ id oneadmin  uid=117(oneadmin) gid=111(cloud) groups=111(cloud),129(libvirtd),130(kvm)

Создаем на удаленном сервере группу и учетку oneadmin, генерируем ключ, оставляя все параметры по умолчанию:

$ sudo groupadd -g 111 oneadmin $ sudo useradd -u 117 -m oneadmin -d /var/lib/one/ -s /bin/bash -g oneadmin $ sudo -u oneadmin ssh-keygen

Чтобы сервер управления мог подключаться к хостам по SSH без пароля, копируем ключи и создаем ~/.ssh/config.

$ su oneadmin $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ nano ~/.ssh/config  Host * StrictHostKeyChecking no

После чего копируем каталог /var/lib/one/.ssh на каждый узел и подключаемся, чтобы проверить, что соединение происходит без запроса пароля. Файлы для авторизации должны располагаться в подкаталоге ~/.one, его необходимо создать и заполнить вручную.

$ mkdir ~/.one

Пароль хранится в открытом виде в файле ~/.one/one_auth:

$ echo "oneadmin:p@ssw0rd" > ~/.one/one_auth $ chmod 600 ~/.one/one_auth

Во время установки при помощи пакетов пароль генерируется автоматически, его нужно переопределить утилитой oneuser:

$ oneuser passwd 0 p@ssw0rd

Аргумент «0» задает идентификатор пользователя, для oneadmin он равен 0. Настройки закончены, перезапускаем сервер:

$ su oneadmin $ one stop $ one start

Чтобы убедиться в том, что аутентификация настроена корректно, лучше сразу выполнить любую консольную команду. Если вывод не содержит ошибок, значит, все сделано правильно. Например, список пользователей:

$ oneuser list  ID NAME GROUP AUTH VMS MEMORY CPU 0 oneadmin oneadmin core - - - 1 serveradmin oneadmin server_c - - -

В случае проблем смотрим, что пишет журнал. Введя «cat /var/log/one/oned.log», получим листинг загруженных параметров сервера из конфига и сообщения о запуске элементов. Также команда netstat -ant должна показать, что открыт порт 2633.

Просмотрев журналы, можно получить информацию по настройкам OpenNebula и ошибкам
Просмотрев журналы, можно получить информацию по настройкам OpenNebula и ошибкам

Настройка веб-консолей Sunstone и Self-Service

Как уже говорилось, все операции можно производить при помощи утилит командной строки или веб-консоли. Второй способ более нагляден и прост в использовании. Настройки Sunstone выполняются в /etc/one/sunstone-server.conf, по умолчанию слушается только localhost, поэтому правим:

$ sudo nano /etc/one/sunstone-server.conf  :host: 0.0.0.0 :port: 9869

Остальное можно пока не трогать. Запускаем:

$ su oneadmin $ sunstone-server start

Как видно из конфига, Sunstone использует порт 9869, к нему и подключаемся браузером, вводя для регистрации данные oneadmin.

Интерфейс Sunstone прост, разобраться с основными установками будет несложно. Все настройки разделены на пять групп:

  • Dashboard — общая статистика;
  • System — настройка учетных записей пользователей, групп и ACL;
  • Virtual Resources — виртуальные машины, образы и шаблоны образов;
  • Infrastructure — настройка узлов, виртуальной сети, систем хранения и кластеров;
  • Marketplace — доступ к подготовленным образам виртуальных машин.

По умолчанию в Sunstone анонимный доступ к Marketplace, но если уже есть своя учетная запись в Marketplace, данные следует указать в sunstone-server.conf.

Создание виртуальной сети в OpenNebula Sunstone
Создание виртуальной сети в OpenNebula Sunstone

Доступ пользователей к VM организован через сервис OCCI, настройки которого находятся в /etc/one/occi-server.conf. По умолчанию здесь также разрешен доступ только с localhost, меняем:

$ sudo nano /etc/one/occi-server.conf  :host: 0.0.0.0 :port: 4567

Остальное можно не трогать. Запускаем:

$ occi-server start

Открыв браузер на странице http://example.org:4567/ui, получим доступ к веб-интерфейсу OpenNebula Self-Service, его возможности во многом совпадают с Sunstone, но, естественно, их чуть меньше, и они проще. Также управлять своими VM можно при помощи набора утилит occi-*. Например, получим список преднастроек:

$ occi-instance-type list
Для обычных пользователей предназначен OpenNebula Self-Service
Для обычных пользователей предназначен OpenNebula Self-Service

Аналогично активируется сервис OpenNebula Zones, настройки которого прописаны в /etc/one/ozones-server.conf. Кроме того, потребуется создать базу данных ozones. Далее запускаем ozones-server start. По умолчанию подключение производится к порту 6121.

Виртуализация vs облако

Сегодня в моде термин «облако». Несмотря на его раскрученность, многие не видят принципиального отличия виртуализации от облака и не понимают, где заканчивается одно и начинается другое. По сути, виртуализация — это гипервизор и набор инструментов управления, каждый разработчик предпочитает поддерживать только свой гипервизор, не позволяя управлять другими. Сам набор рассчитан на инженера, а не рядового пользователя.

Платформы для построения облака предоставляют дополнительный уровень абстракции, позволяя не привязываться к физическому оборудованию и использовать в единой инфраструктуре различные гипервизоры. Такой подход упрощает управление большими массивами и позволяет выделять ресурсы по необходимости. И главное, в процессе могут участвовать обычные пользователи.

Политики размещения VM

Планировщик OpenNebula при размещении новой VM руководствуется установками политик (Data Center Placement Policies), которые указываются в /etc/oned/sched.conf. По умолчанию используется политика packing, при которой задействуется минимальное число серверов, что обеспечивает минимальную фрагментацию (переменная RUNNING_VMS). Политика striping (-RUNNING_VMS) указывает на равномерное распределение VM по имеющимся серверам, это гарантирует максимально доступное количество ресурсов. Установка load-aware укажет на необходимость размещения VM на сервере с минимальной нагрузкой (FREE_CPU). Политика custom для размещения использует вычисляемый вес (rank), который админ может настроить самостоятельно (по умолчанию формула RUNNING_VMS * 50 + FREE_CPU).

Настройки политик размещения VM в sched.conf
Настройки политик размещения VM в sched.conf

Заключение

Знакомство с проектом OpenNebula показало, что это простой и удобный инструмент для развертывания IaaS-сервиса с возможностью делегирования полномочий разным пользователям. Настройки каждого компонента OpenNebula хорошо документированы, поэтому при возникновении проблем найти причину не составит особого труда.

Мартин «urban.prankster» Пранкевич, martin@synack.ru

Оставить мнение

Check Also

Цифровой паноптикум. Настоящее и будущее тотальной слежки за пользователями

Даже если ты тщательно заботишься о защите своих данных, это не даст тебе желаемой приватн…