![Open Stack](https://habrastorage.org/getpro/habr/post_images/0c9/953/a5a/0c9953a5a95d5ace503a0a4d1876b875.png)
Главная новость этого месяца: мы запустили публичное тестирование новой услуги — «Виртуальное приватное облако». Любой пользователь может получить в свое распоряжение собственную облачную инфраструктуру, гибкую, управляемую, легко масштабируемую и способную справиться с любыми нагрузками.
О возможностях и преимуществах нового сервиса мы подробно расскажем ниже.
Введение
Облачными технологиями мы занимаемся уже давно и внимательно следим за ситуацией на рынке соответствующих услуг. Мы обратили внимание на следующий момент: из российских провайдеров облачных услуг практически никто не предлагает решений, полностью отвечающих требованиям корпоративных клиентов.
В первую очередь следует упомянуть публичные облака — пожалуй, это самый распространённый на сегодняшний день тип услуг в обсуждаемой сфере. Они хорошо подходят для частных лиц и небольших компаний — в таком облаке даже неопытному пользователю под силу достаточно быстро настроить сайт или запустить небольшое приложение.
С более сложными вариантами использования облака часто возникают проблемы: например, отсутствие публичного API может затруднить интеграцию облачных машин с другими приложениями, а невозможность загрузки собственных образов приводит к необходимости ручной настройки каждого сервера, а в некоторых случаях не позволяет использовать нужное программное обеспечение.
Сфера применения публичных облаков в корпоративной практике также весьма ограничена: на их основе можно создать корпоративный портал или организовать документооборот для небольшой компании, но в качестве среды для развертывания сложных бизнес-приложений их уже использовать сложно — возникают вопросы, связанные с разграничением прав между сотрудниками компании или удобством планирования. Вполне типична ситуация, когда фактическим владельцем учетной записи является один сотрудник, планированием использования ресурсов занимается другой, а настройкой серверов — вообще целый отдел. Доступ в облако при этом возможен только от имени того пользователя, на которого зарегистрирован аккаунт; для корпоративных пользователей это по вполне понятным причинам неприемлемо.
В качестве альтернативы публичному облаку может выступить частное (приватное) облако на базе собственной или арендованной инфраструктуры. К сожалению, организация и содержание приватного облака требует, как правило, значительных финансовых вложений на раннем этапе и может быть неэффективной во многих ситуациях.
Следует также отметить, что многие из существующих решений ориентированы в первую очередь на вертикальное масштабирование — ручное или автоматическое увеличение производительности виртуальных серверов по мере увеличения нагрузки.
Однако если речь идет об очень больших нагрузках (возникающих, например, при работе с «тяжёлыми» корпоративными приложениями), возможности используемых в облаке аппаратных и программных компонентов не позволят бесконечно наращивать производительность отдельной виртуальной машины.
Кроме того, вертикальное масштабирование в облаке иногда может оказаться очень невыгодным с финансовой точки зрения: оплата по принципу pay-as-you-go (т.е. по фактическому потреблению) при незапланированных нагрузках может обернуться весьма неприятными сюрпризами. Для корпоративных клиентов такой принцип оплаты существенно затрудняет планирование расходов — в большинстве случаев сложно предсказать, какой объем ресурсов будет потреблен машиной, работающей под реальной нагрузкой.
Во многих ситуациях более эффективным оказывается горизонтальное масштабирование. В теории оно может обеспечивать гораздо большую совокупную производительность. Однако на практике такое масштабирование часто оказывается затруднено в связи со сложностью добавления компонентов в инфраструктуру и необходимостью тщательно планировать архитектуру приложений.
Аргументом в пользу горизонтального масштабирования является широкое распространение систем управления конфигурацией, таких, как Puppet или Chef. Эти инструменты позволяют практически полностью автоматизировать добавление новых компонентов в кластер, тем самым наращивая его совокупную производительность без дополнительных затрат труда.
Виртуальное приватное облако
Технологии развиваются, требования к облакам растут, но на российском рынке пока что не появлялось продукта, в котором были бы учтены все актуальные тенденции. Работая над нашим новым сервисом, мы старались сфокусироваться на потребностях бизнеса и обеспечить максимальную гибкость и возможность построить облачное окружение, адаптируемое под любые задачи. Новая услуга называется «Виртуальное приватное облако».
В ряду современных облачных сервисов такая услуга занимает особое место. Это — не публичное облако в традиционном понимании, но и не частное облако, принадлежащее одному клиенту. Мы предлагаем в аренду изолированную облачную инфраструктуру, в рамках которой пользователь может создавать виртуальные машины, подключать к ним блочные устройства, загружать образы виртуальных машин, конфигурировать сетевую топологию любой сложности и выполнять многие другие операции. Новое облако управляется при помощи открытого API, что позволяет интегрировать его с другими приложениями.
Корпоративные клиенты оценят гибкую систему проектов и пользователей, которая позволит им разграничить доступ к серверам и доступ к главному аккаунту. Выбранный нами подход к распределению ресурсов позволит осуществлять четкое планирование — клиент арендует нужное количество ресурсов, распределяет их между своими проектами и использует для создания виртуальных машин и других объектов.
Перспективным вариантом использования сервиса является реселлинг. Реселлер может создавать проекты и передавать своим клиентам доступ к ним. Таким образом, клиент реселлера может даже не знать, что его виртуальные машины запускаются на базе нашей инфраструктуры — он работает со своим проектом с помощью отдельной внешней панели управления.
Услуга несомненно окажется привлекательной и для частных лиц, которые смогут использовать наш новый сервис для самых разнообразных целей в диапазоне от развертывания сред для запуска игр до тестирования ПО.
Чтобы реализовать все описанные возможности, нам требовалась платформа с публичным API. Наш выбор пал на OpenStack — платформу, де-факто давно уже являющуюся стандартом для построения современных облачных сервисов.
OpenStack: краткая справка
OpenStack представляет собой совокупность сервисов с открытым исходным кодом для построения публичных и частных облаков.
Работа над OpenStack началась в 2010 году, когда был объединен код двух платформ: Nebula (так называлась платформа, создававшаяся специально для NASA) и RackSpace CloudFiles (разработка компании RackSpace). Вскоре интерес к новому проекту стали проявлять разработчики различных дистрибутивов Linux: уже в 2011 году OpenStack стал основной облачной платформой для Ubuntu Server и Ubuntu Enterprise Cloud. В том же году OpenStack стал использоваться и в OC Debian. В 2012 году к проекту присоединилась компания RedHat и начала работу над собственным дистрибутивом.
Cегодня в работе над проектами OpenStack принимают участие около 9000 индивидуальных разработчиков и 250 организаций, в том числе и такие известные компании, как IBM, EMC, HP, Canonical, Yahoo! и другие.
OpenStack имеет модульную архитектуру и включает следующие компоненты (перечисляем только наиболее важные компоненты — на самом деле их гораздо больше):
- Nova — контроллер для управления виртуальными машинами. Он выполняет такие функции, как обработка запросов на создание виртуальных машин, контроль работоспособности, распределение нагрузки на физические машины, реакция на сбои и т.п.;
- Neutron — компонент для управления сетями. С его помощью пользователи могут определять сети, подсети и маршрутизаторы и конфигурировать внутреннюю топологию сетевой инфраструктуры. Neutron поддерживает механизм плавающих (floating) IP-адресов, которые можно динамически выделять виртуальным машинам;
- Cinder — сервис блочных устройств. Обеспечивает функциональность дисков виртуальных машин;
- Glance — компонент для управления образами виртуальных машин. Образы Glance используются для быстрого и согласованного развертывания новых серверов;
- Keystone — модуль авторизации; ключевой компонент, обеспечивающий единую точку авторизации пользователей во всех сервисах;
- Heat — модуль, отвечающий за оркестрацию. С его помощью можно автоматически разворачивать виртуальные серверы и приложения на базе шаблонов;
- Swift — модуль объектного хранения данных, который мы уже на протяжении нескольких лет используем в нашей услуге «Облачное хранилище».
Взаимодействие компонентов можно представить в виде следующей схемы:
![компоненты OpenStack](https://habrastorage.org/getpro/habr/post_images/646/f7e/140/646f7e1404e3ce7ef5f78b89f8187d02.png)
Почему OpenStack стал, как это уже было сказано выше, фактическим стандартом для построения современных облачных сервисов? Этому способствовали в первую очередь следующие факторы:
- Открытый исходный код, предоставляющий широкие возможности для доработки и усовершенствования существующих сервисов;
- Гибкость. Облачная инфраструктура на основе OpenStack получается гибкой и управляемой. Настроенная система выдерживает любые изменения дизайна и в случае необходимости может быть легко переконфигурирована, к примеру, если планируется использование другой системы хранения данных;
- Широкие возможности интеграции. OpenStack не является замкнутой системой и может взаимодействовать с другими продуктами. Доступна поддержка различных систем виртуализации, существуют плагины для подключения разнообразных устройств хранения данных и сетевого оборудования.
Стоит отметить, что все компоненты Openstack обладают открытым API, благодаря чему под платформу написано большое количество различных сценариев и приложений, позволяющих автоматически развертывать целые кластеры, настраивать виртуальные машины и запускать сервисы с минимальной ручной настройкой.
Как устроено новое облако
![VPC схема](https://habrastorage.org/getpro/habr/post_images/8c6/3e9/60a/8c63e960acc5eb6895c0b87f7ecd293f.jpg)
Домены и проекты
Каждый пользователь услуги «Виртуальное приватное облако» получает в распоряжение домен — собственное виртуальное пространство для создания проектов и пользователей. Под проектом в данном случае понимается совокупность объектов и ресурсов, к которым может иметь доступ пользователь: виртуальных машин, дисков,
сетей и других.
Ресурсы и квоты
В начале работы владелец облака приобретает ресурсы (оперативную память, ядра CPU, дисковое пространство) и распределяет их между своими проектами, тем самым устанавливая лимиты на создание разнообразных объектов. В любой момент можно перераспределить ресурсы между проектами или отказаться от части ресурсов.
Управление доступом
Владелец виртуального частного облака может создавать пользователей и устанавливать для них права доступа к проектам. Такая возможность предназначена для корпоративных клиентов, а также для реселлеров, создающих проекты и предоставляющих доступ к ним сторонним пользователям на коммерческой основе.
Для каждого проекта создается прямая ссылка, по которой можно получить доступ к его ресурсам, не регистрируясь в нашей панели управления. В ближайшее время мы планируем реализовать возможность кастомизации и изменения дизайна для внешней пользовательской панели.
Гибкое создание виртуальных машин
Наша услуга позволяет пользователю создавать именно такую машину, какая ему нужна, не вынуждая выбирать из нескольких заданных заранее конфигураций (flavor), как это часто делается в облаках, реализованных на базе Openstack. В любой момент можно увеличить каждый параметр виртуальной машины (например, количество оперативной памяти), не трогая при этом другие.
Сетевые подключения
Виртуальные машины можно подключать к сети различными способами. Владелец облака может либо арендовать у нас выделенную публичную подсеть (аналогично тому, как это делается для выделенных физических серверов), либо воспользоваться механизмом «плавающих» IP-адресов (floating IP).
В последнем случае машина получает адрес из частной сети, на который можно назначить публичный адрес из общего пула. В любой момент можно отвязать IP-адрес от одной машины и прикрепить его к другой. Преобразование внешних адресов во внутренние и наоборот осуществляется с помощью виртуального роутера.
Машины можно подключать и к изолированной локальной сети (если, например, она используется в качестве бэкенда, и непосредственный доступ к Интернету ей не нужен). В случае необходимости такую сеть можно подключить к роутеру и назначить некоторым машинам внешние IP-адреса — например, для удобства обслуживания.
Загрузка образов
В новом облаке поддерживается набор образов для самых распространённых дистрибутивов Linux (таких, как Ubuntu, Debian, CentOS, OpenSUSE), а также Windows Server 2012. Помимо стандартного агента cloud-init, в образах присутствует созданный нами агент, реализующий целый ряд полезных функций: переустановку пароля по запросу из панели управления, статическую конфигурацию сети (в случае отсутствия DHCP), управление SSH-ключами. Кроме того, клиенты могут загружать в проект собственные образы виртуальных машин. Поддерживаются форматы образов, используемых в системах виртуализации Virtualbox, KVM, VMware, а также формат Amazon EC2.
Жесткие диски
К машине можно подключать произвольное количество жестких дисков. Диски могут быть созданы как пустыми, так и на базе образов. Поддерживается технология снапшотов. Если позволяют возможности операционной системы в виртуальной машине, диски можно подключать и отключать «на лету».
Прочие возможности
Помимо всего прочего, поддерживается возможность добавления SSH-ключей, графическая консоль, генерация RC-файлов для работы с консольными клиентами и другие. В ближайшее время ожидается появление множества новых возможностей — следите за новостями!
Панель управления
Важным компонентом любого облака является пользовательская панель, с помощью которой осуществляется управление виртуальными машинами и другим ресурсами. Сообществом разрабатывается панель, которая называется Horizon — как правило, поставщики продуктов на базе Openstack включают ее в комплект в качестве основного средства доступа к инфраструктуре. Реализуя собственное облако, мы решили отказаться от Horizon и создали собственную панель. Чем было обусловено такое решение?
Те, кто видит Horizon в первый раз, вряд ли заметят какие-либо неудобства. Недостатки становятся заметны лишь в процессе работы, когда привлекательность дизайна отходит на второй план. Создатели Horizon попытались уместить в одну панель все возможные операции по управлению облаком, в результате она получилась слишком громоздкой. Некоторые нужные функции зачастую «запрятаны» слишком глубоко (начинающий пользователь вряд ли сможет их найти), и это делает работу с Horizon достаточно неудобной.
Интерфейс нашей панели организован таким образом, чтобы все необходимые функции всегда были под рукой. Кроме того, мы автоматизировали некоторые сложные сценарии (такие, как построение сетевой инфраструктуры, включающеее создание сетей и подключение их к программным роутерам). Таким образом, те пользователи, которым не нужна вся функциональность облака, получают интерфейс, позволяющий без лишних сложностей создавать машины в выделенной подсети, а более требовательным пользователям доступен полный контроль над инфраструктурой.
Еще один минус Horizon заключается в том, что он (будучи при этом созданным относительно недавно — в 2011 году) основывается на морально устаревшей схеме, предполагающей генерацию страниц на стороне сервера. В качестве примера недостатков такого подхода можно упомянуть, что все обновления статусов приходят в виде отрендеренных фрагментов HTML.
Мы постарались сделать нашу панель более производительной и удобной в обращении, для чего реализовали ее на базе актуальных технологий — панель представляет собой одностраничное веб-приложение (Single Page Application), написанное на JavaScript. Такое решение позволило обеспечить быстрый отлик интерфейса, тем самым повышая комфортность и удобство работы с панелью управления для пользователя.
![VPC панель управления](https://habrastorage.org/getpro/habr/post_images/524/08e/0fe/52408e0fe8fd07381d58c94717becb6f.png)
Исходя из выбранного комплекса технологий нам потребовалось также реализовать вебсокет-сервер, используемый для обновления статусов объектов в реальном времени. Именно благодаря ему мы можем узнать об изменениях, произошедших с виртуальными машинами и дисками — к примеру о том, что установка машины завершена.
Дополнительные серверные компоненты также понадобились и для реализации управления пользователями и ресурсами.
Заключение
Услуга «Виртуальное приватное облако» предоставляет пользователям широкие возможности, для рассказа о
которых одной статьи явно не достаточно. В ближайшее время цикл публикаций, посвящённых OpenStack, будет продолжен.
Сейчас виртуальное приватное облако функционирует в режиме бета-тестирования. Для дальнейшей работы по его усовершенствованию нам очень важно ознакомиться с мнением пользователей. Поэтому мы приглашаем вас принять участие в тестировании. Всем нашим зарегистрированным клиентам мы уже отправили приглашения по электронной почте. Краткая инструкция по основам работы с нашим новым сервисом опубликована здесь.
Заявку на участие в тестировании можно отправить с помощью тикет-системы.
Сообщить нам о замеченных ошибках и поделиться идеями по усовершенствованию услуги «Виртуальное приватное облако» можно как в комментариях к этому посту, так и по электронной почте или через тикет-систему.
Мы постараемся учесть все замечания, пожелания и предложения в дальнейшей работе.
Читателей, которые по тем или иным причинам не могут оставлять комментарии здесь, приглашаем в наш блог.