Обзор технологии OpenStack

Аннотация

Библиотека классов .NET для управления ресурсами OpenStack облака.

Клочков Кирилл Сергеевич

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

Annotation

.NET class library for resource management of a OpenStack cloud.

Kirill Klochkov

In this work the problem of creation of the software means of the .NET platform intended for interaction with infrastructure of OpenStack of a cloud is considered. The work is devoted to the review of the OpenStack technology, analysis of possible solutions, and also development and implementation of class library, compatible to the .NET platform, realizing a functionality on resource management of OpenStack cloud.

Содержание

Введение. 5

Постановка задачи. 8

1. Обзор технологии OpenStack. 9

1.1. Область применения. 9

1.2. Подсистемы платформы.. 12

1.3. OpenStack API 14

1.4. Описание проблемы.. 16

1.5. Вывод. 18

2. Реализация библиотеки классов. 20

2.1. OpenStack Python SDK.. 20

2.2. Выбор языка программирования. 21

2.3. Архитектура библиотеки классов. 22

2.4. Реализация базовых классов и интерфейсов архитектуры. 25

2.5. Реализация классов базовых команд. 27

2.5.1. Пространство имён OpenstackManager.Identity. 27

2.5.2. Пространство имён OpenstackManager.Compute. 31

2.6. Реализация классов сценариев. 33

2.6.1. Регистрация пользователя. 34

2.6.2. Создание виртуального сервера. 35

2.7. Вывод. 38

3. Интеграция разработанной библиотеки классов. 40

3.1. Архитектура проектного решения. 40

3.2. Инфраструктура OpenStack. 42

3.1. Тестирование результатов интеграции. 43

3.2. Вывод. 46

Заключение. 47

ПРИЛОЖЕНИЕ А.. 50

Введение

В настоящий момент одним из самых популярных направлений в сфере информационных технологий являются облачные вычисления. Облачные вычисления - это гибкая, экономически эффективная и проверенная технология предоставления повсеместного и удобного сетевого доступа к общему пулу конфигурируемых вычислительных ресурсов (например, сетей, серверов, систем хранения, приложений и сервисов), которые посредством определенных технологий виртуализации и высокого уровня абстракции предоставляются пользователю как интернет-услуга. [1] Технология облачных вычислений имеет ряд весомых преимуществ. Например, пользователь, развернув свое приложение в «облаке», не задумывается о таких проблемах, как аппаратные средства, их поддержка, конкретный софт, установленный на машине. Он даже не задумывается о том, на какой именно или даже на каких именно машинах исполняется его приложение. Возможность запуска множество копий приложения на многих виртуальных машинах представляет преимущества масштабируемости: количество экземпляров приложения способно практически мгновенно увеличиваться по требованию, в зависимости от нагрузок. К тому же, запуск приложений или хранение данные в «облаке» избавляет от необходимости закупать все соответствующее оборудование и ПО, а затем поддерживать их работу.

Существует три класса облачных сервисов, разделенных по уровню предоставляемой абстракции.

· Инфраструктура как сервис (IaaS). Облако дает доступ к полноценному виртуальному серверу, устройствам хранения данных или сетевому оборудованию, позволяя пользователю-клиенту использовать всё доступное ему пространство и вычислительные мощности. Этот уровень является самым нижним слоем облачных систем.

· Платформа как сервис (PaaS).В данном случае предоставляется доступ к окружению, в котором разработчики создают и разворачивают свои приложения. Пользователь абстрагирован от знания и понимания того, сколько памяти и процессоров использует его приложение. Примером PaaS является Google App Engine.

· Приложение как сервис (SaaS). Пользователь получает доступ к приложению через веб-порталы. Таким образом, потребитель работает с приложением, установленным на удаленной машине. Пример SaaS – WordPress.

Инфраструктура как сервис (IaaS) — наиболее зрелая и востребованная в корпоративном сегменте модель облачных вычислений. Именно в IaaS инфраструктурах наиболее последовательно воплощаются классические преимущества облачных вычислений.

Как правило, IaaS – провайдеры предоставляет клиентам доступ к полноценному виртуальному серверу (VDS) - некой аппаратной среде или изолированной программе, предназначенной для выполнения некоторых вычислительных процессов. Если говорить понятным языком, то виртуальный сервер вырисовывается в роли программного контейнера, имитирующего работу компьютера. Данный контейнер обладает своей собственной операционной системой, набором приложений и системными устройствами (жесткий диск, процессор, сетевой контроллер или оперативная память). Виртуальный компьютер имеет полную изолированность от иных виртуальных машин и внешнего мира, а его работа достигается исключительно за счет соответствующего программного обеспечения. Для обеспечения функционирования операционной системы виртуального компьютера и выполнения, поставленных пользователем задач задействованы вычислительные ресурсы реальной системы, в которой собственно и запущен VDS. Таким образом, получается, что виртуальный сервер - это не что иное, как набор системных программ и определенная область оперативной памяти, которые находятся под полным и индивидуальным контролем самого виртуального сервера.

Управление облачной IaaS-инфраструктурой осуществляется поставщиком сервисов, а потребитель, в свою очередь, управляет операционными системами, хранилищем, развернутыми приложениями и, возможно, имеет ограниченный контроль над отдельными компонентами сети.[2] Как правило, провайдер покупает один мощный сервер, на него устанавливается система виртуализации, а затем мощности этого сервера раздаются нескольким виртуальным машинам. Каждый из клиентов VDS видит у себя в консоли совершенно отдельный независимый сервер и имеет полный доступ к нему. Современные серверные процессоры от Intel и AMD имеют встроенную поддержку виртуализации, поэтому затраты на организацию нескольких VDS на одном сервере минимальны.

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

Постановка задачи

Целью работы является разработка библиотеки классов на платформе .NET, которая содержала бы функционал по созданию и управлению виртуальными серверами и другими элементами облачной инфраструктуры. Для достижения данной цели поставлена задача разработать и реализовать библиотеку классов, удовлетворяющую следующим функциональным требованиям:

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

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

· Реализовывать функционал, позволяющий пользователю создавать новые виртуальные сервера и управлять существующими.

· Реализовывать функционал, необходимый для создания и управления резервными копиями виртуальных серверов пользователя.

Обзор технологии OpenStack

Проект по разработке облачной операционной системы OpenStack появился в июне 2010 года как проект, объединивший разработку Национального космического агентства США (NASA) для создания виртуальных серверов Nova и программную систему хранения данных Swift от американского хостинг-провайдера Rackspace. Важно понимать, что сам по себе OpenStack – это проект по разработке. Сайт проекта Openstack.org не предоставляет эталонного дистрибутива. Напротив, вендоры на основе кода проекта OpenStack создают свои дистрибутивы. [3]

Область применения

Главное отличие комплекса OpenStack от традиционных систем промышленной виртуализации заключается в ориентации на масштабируемые вертикально промышленные приложения.[4]

Традиционные приложения, например, база данных или почтовый сервер требуют функционала «системы промышленной виртуализации». Этот функционал включает в себя средства обеспечения высокой доступности, живой миграции, резервного копирования, возможность добавлять в виртуальную машину ресурсы или забирать их. Каждый экземпляр приложения данного типа запущен на одной виртуальной машине и растет путем расширения на одном физическом сервере, работающем под управлением гипервизора. Жизненный цикл таких виртуальных машин – как правило, годы. Эти решения могут работать при определенных условиях, таких, как наличие разделяемой системы хранения данных, высокой пропускной способности сети, что накладывает сложности, связанные с последующим масштабированием.

Облачные платформы, такие как OpenStack, предназначены для использования с другим классом приложений, таких как Apache Cassandra, MongoDB и Hadoop, которые спроектированные для горизонтального масштабирования, и являются устойчивыми к падению виртуальных машин. Ресурсы могут быть расширены за счет добавления новых экземпляров приложений на однотипных виртуальных серверах с последующей балансировкой нагрузки. Эти распределенные приложения самостоятельно обеспечивают собственную отказоустойчивость на уровне приложения, независимо от базовой инфраструктуры и передовых функций гипервизоров. Жизненный цикл подобных виртуальных машин – как правило, месяцы.

OpenStack был создан для того, чтобы обеспечить массовый запуск сотен, тысяч и даже десятков тысяч однотипных (как правило) виртуальных серверов для хостинга приложений с собственными средствами обеспечения отказоустойчивости. Сама платформа не предлагает высокой доступности отдельно взятого виртуального сервера.[4]

Таким образом, благоприятными условиями для использования платформы OpenStack являются:

· хостинг серверов и приложений с коротким сроком жизни (часы, дни, недели);

· хостинг некритичных виртуальных серверов и приложений;

· частое развертывание однотипных серверов.

В таблице 1 приведены типичные примеры использования технологии OpenStack.

Таблица 1, Примеры использования технологии OpenStack

Пример Описание
Тестовые и лабораторные стенды, среды обучения Любые компании стремятся к сокращению рисков, связанных с IT, в production окружениях. Часто это решается путём моделирования и тестирования процессов обновления и внедрения нового ПО в лабораторных средах. Требования к таким средам невелики, а срок существования виртуальных серверов для тестов и обучения, как правило не превышает 1 недели. OpenStack позволяет существенно ускорить развёртывание тестового окружения, и, тем самым сокращает трудозатраты на развертывание и моделирование различных ситуаций.
Среды разработки Подготовка среды для разработки вызывает у разработчиков некоторые сложности и отнимает драгоценное время. Автоматизированные системы и использование шаблонов в Openstack сокращают трудозатраты на создание такое среды, освобождая разработчиков от необходимости выполнения рутинных операций.
Среды автоматизированного тестирования Большая часть современных бизнес-приложений является распределенной. Качественная разработка требует выполнения тестирования. Если приложение состоит из веб-серверов, базы данных и серверов приложений, распределенных между несколькими серверами, то подготовка процесса тестирования будет отнимать значительное время.OpenStackобладает возможностями орекстрации и широкой автоматизации всех облачных процессов, что позволяет, написав один раз сценарий тестирования, многократно повторять его по запросу или в полностью автоматизированном режиме.
Платформа облачной виртуализации для Cloud-ready приложений Вендоры ПО постоянно обновляют свои приложения, подготавливая их для работы в облаке. КомпанияMicrosoft активно адаптирует свои продукты. На сегодняшний день в облаке Openstack могут прекрасно работать следующие приложенияMicrosoft: · Microsoft Exchange · Microsoft Lync · Microsoft MS SQL Server AlwaysOn СУБД: · Apache Cassandra · MongoDB

Подсистемы платформы

Проект OpenStack, который также называют облачной операционной системой, состоит из ряда отдельных проектов, разрабатывающих отдельные подсистемы. Конкретная установка OpenStack может включать в себя лишь часть из них. Некоторые подсистемы могут использоваться вообще автономно или как часть других OpenSource-проектов. Каждый из проектов имеет свой документированный набор REST API, утилит командной строки и «родные» интерфейсы Python, предоставляющие набор функций, аналогичных утилитам командной строки.

Одним из базовых сервисов является OpenStack Compute (Nova). Этот сервис устанавливается на всех вычислительных узлах кластера. Он предоставляет уровень абстракции виртуального оборудования (процессоры, память, блочные устройства, сетевые адаптеры). Nova обеспечивает управление экземплярами виртуальных машин, обращаясь к гипервизору и отдавая такие команды, как, например, их запуск и остановку.

Следующий сервис под названием OpenStack Networking (Neutron) отвечает за сетевую связанность. Пользователи могут самостоятельно создавать виртуальные сети, маршрутизаторы, назначать IP-адреса. Один из механизмов, обеспечиваемых Neutron, называется «плавающие адреса». Благодаря этому механизму виртуальные машины могут получать внешние фиксированные IP-адреса. Через механизм подключаемых модулей можно реализовать такой функционал, как балансировщик сетевой нагрузки как сервис, брандмауэр как сервис и VPN как сервис.

Служба идентификации OpenStack Keystone представляет собой централизованный каталог пользователей и сервисов, к которым они имеют доступ. Keystone выступает в виде единой системы аутентификации облачной операционной системы. Keystone проверяет действительность учетных записей пользователей, проверяет сопоставление пользователей проектам OpenStack и ролям и в случае успеха выдает токен на доступ к другим сервисам. Также Keystone ведет каталог служб. [3]

OpenStack Image Service (Glance) ведет каталог образов виртуальных машин, которые пользователи могут использовать как шаблоны для запуска экземпляров виртуальных машин в облаке. Также данный сервис предоставляет функционал резервного копирования и создания моментальных снимков.

Сервис OpenStack Block Storage (Cinder) управляет блочным хранилищем, которое могут использовать запущенные экземпляры виртуальных машин. Это постоянное хранилище информации для виртуальных машин. Можно использовать моментальные снимки для сохранения и восстановления информации или для целей клонирования.

Сервис OpenStack Object Storage (Swift), помимо Nova, является одним из двух первых проектов, появившихся в OpenStack. Сервис представляет собой объектное хранилище, позволяющее пользователям хранить файлы. Swift имеет распределенную архитектуру, обеспечивая горизонтальное масштабирование, а также избыточность и репликацию для целей отказоустойчивости. Swift ориентирован преимущественно на статические данные, такие как образы виртуальных машин, резервные копии и архивы.

OpenStack Orchestration (Heat) – сервис, задача которого – обеспечение жизненного цикла приложения в облачной инфраструктуре. При помощи шаблона формата AWS CloudFormation сервис управляет остальными сервисами OpenStack, позволяя создать большинство типов ресурсов (виртуальные машины, тома, плавающие IP, пользователи, группы безопасности и т. д.). Heat при помощи данных Ceilometer также может осуществлять автоматическое масштабирование приложения. Шаблоны описывают отношения между ресурсами, и это позволяет сервису Heat осуществлять вызовы API OpenStack в правильном порядке, например, сначала создать сервер, а потом подключить к нему том. [5]

И наконец, самый близкий к пользователю облака сервис OpenStack Dashboard (Horizon), позволяющий управлять ресурсами облака через веб-консоль.

OpenStack API

OpenStack API является RESTFull интерфейсом. Это означает, что для запуска команды, выполняющей некоторую функцию управления ресурсами OpenStack облака, необходимо отправить запрос на соответствующий URL-адресс. Формат URL определяет, какая команда будет выполнена. Запрос к URL-адрессу осуществляется по протоколу HTTP, как и в web-браузере. Это значит, что на некоторые запросы можно выполнить прямо из браузера, но это работает только в том случае, если в запрос не включается какая-то дополнительная информация. Как правило, вместо этого запросы отправляются напрямую из кода программы или с помощью утилиты командной строки, например cUrl. cUrl это один из самых простых способов отправить запрос серверу.

Как правило, каждая API-функция определяется следующими элементами

1) URL-путь, который включает себя базовый адрес, имя команды и дополнительный параметры, разделенные прямой косой чертой.

2) Метод отправления запроса (в основном, GET или POST, но существуют и другие варианты, которые не так часто используются).

3) Дополнительные данные, которые можно передать в заголовках сообщения в случае Get-запроса или в теле сообщения, в случае POST запроса.

Базовую часть URL-адреса называют конечной точкой. Разные сервисы имеют различные конечные точки, которые можно найти в документации к OpenStack.

API OpenStack можно использовать, чтобы запускать виртуальные сервера, создавать образы, или, например, прикреплять метаданные к серверам и образам.[6] На рисунке 1 изображена архитектура взаимодействия пользователя с сервисами OpenStack через вызовы методов API

Обзор технологии OpenStack - student2.ru

Рисунок 1.OpenStackAPI

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

curl -shttps://identity.api.rackspacecloud.com/v2.0/tokens -X 'POST' \

-d '{"auth":{"passwordCredentials":{"username":"MyRackspaceAcct", "password":"MyRackspacePwd"}}}' \

-H "Content-Type: application/json"

В ответ на отправленное http-сообщение возвращается следующий JSON-объект:

Описание проблемы

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

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

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

Таким образом, на этапе планирования программного проекта, в контексте задач, на решение которых он будет направлен, лучшем выбором базовой платформы, языка программирования и средств разработки может оказаться стек технологий .NET компании Microsoft. Платформа .NET состоит из общеязыковой среды выполнения (среды CLR) и библиотеки классов .NET Framework. Среду выполнения можно считать агентом, который управляет памятью, выполнением потоков, выполнением кода, проверкой безопасности кода, компиляцией и другими системными службами. При этом накладываются условия строгой типизации и другие виды проверки точности кода, обеспечивающие безопасность и надежность.[7] Библиотека классов является комплексной объектно-ориентированной коллекцией допускающих повторное использование типов, которые применяются для разработки приложений — начиная с обычных приложений, запускаемых из командной строки, и приложений с графическим интерфейсом пользователя (GUI), и заканчивая приложениями, использующими последние технологические возможности ASP.NET, такие как Web Forms и веб-службы XML.[8] Платформа .NET обеспечивает согласованную объектно-ориентированную среду программирования для локального сохранения и выполнения объектного кода, для локального выполнения кода, распределенного в Интернете, либо для удаленного выполнения, минимизирует конфликты при развертывании программного обеспечения и управлении версиями, гарантирует безопасное выполнение кода, включая код, созданный неизвестным или не полностью доверенным сторонним изготовителем, обеспечивает единые принципы работы разработчиков для разных типов приложений, таких как приложения Windows и веб-приложения. Также, платформа предоставляет возможность интегрировать код платформы .NET Framework с любым другим кодом, совместимым с этой платформой, т.е. программисты могут писать приложения на привычном языке разработки, при этом используя все преимущества среды выполнения, библиотеку классов и компоненты, написанные другими разработчиками на других языках.

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

Вывод

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

Наши рекомендации