Анатомия облака с открытым кодом

Источник: IBM

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

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

Анатомия облачных вычислений

Мы начнем эту статью с изучения базовых абстракций облачной архитектуры (с понятия "инфраструктура как сервис" - Infrastructure as a Service, IaaS), после чего перейдем к рассмотрению средств создания ее компонентов, а затем и к более интегрированным решениям.

Часто используемые сокращения

  • API: интерфейс программирования приложений
  • I/O: ввод/вывод
  • SLA: соглашение об уровне сервиса
  • UI: пользовательский интерфейс

Виртуализация предоставляет уникальные преимущества, хотя и не является обязательной для создания динамически масштабируемых архитектур. Помимо масштабируемости, виртуализация предоставляет возможность переносить виртуальные машины (virtual machine, VM) между физическими серверами в целях выравнивания нагрузки. Как показано на рисунке 1, виртуализация обеспечивается программным уровнем, который называется гипервизором (другое название - монитор виртуальных машин - virtual machine monitor, VMM). Этот уровень обеспечивает возможность одновременной работы множества операционных систем (и их приложений) на одной физической машине. В гипервизоре имеется объект, называемый виртуальной машиной , который инкапсулирует в себе операционную систему, её приложения и конфигурацию. Также гипервизор или виртуальная машина могут эмулировать работу различных устройств. Наконец, для новой динамической природы виртуализации и новых возможностей, которые она предоставляет, необходимы новые схемы управления. Это управление лучше всего осуществлять на различных уровнях, разделяя локальное управление на сервере и более высокоуровневое управление инфраструктурой, обеспечивая тем самым всеобъемлющее управление виртуальной средой.

Рисунок 1. Базовые элементы узла облака
An architectural chart shows a layer view of the core cloud elements

Если взять узлы из рисунка 1 и размножить их в физической сети с совместным доступом к устройству хранения данных, организовать управление всей этой инфраструктурой, а затем обеспечить балансировку нагрузки от входящих соединений (если ваша система находится в открытом доступе), а также кэширование и фильтрацию, то получится виртуальная инфраструктура, именуемая облаком . Эта новая конструкция показана на рисунке 2. Бездействующие машины можно выключить до тех пор, пока не появится необходимость в дополнительных вычислительных мощностях (что обеспечивает лучшую энергоэффективность) при этом виртуальные машины можно распределять (даже динамически) между узлами в зависимости от их индивидуальной загруженности.

Рисунок 2. Инфраструктура облачных вычислений
Diagram shows how the various layers of cloud interact, starting                     with physical networking/storage and working up to the users/Internet

Мы определили основные элементы архитектуры облака, а теперь давайте посмотрим, какие решения с открытым кодом применяются для построения динамичной облачной инфраструктуры.

Основные технологии с открытым кодом

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

Гипервизоры

Основой облака на уровне узла является гипервизор. Хотя виртуализация не является обязательным требованием к облачным средам, она предоставляет широкие возможности для создания масштабируемых и энергоэффективных архитектур. Имеется немало открытых решений для виртуализации, однако ключевыми являются два решения, превращающие операционную систему Linux в гипервизор: Linux Kernel Virtual Machine (KVM) и Lguest. Гипервизор KVM является официальным решением, используемым в производственных средах. Lguest - это сфокусированное на Linux решение, позволяющее запускать только виртуальные машины с Linux, однако это решение интегрировано в ядро и становится все более популярным.

Помимо преобразования Linux в гипервизор, есть и другие решения, фокусирующиеся на гостевой виртуальной машине. Одно из них - это пользовательский режим Linux (User-Mode Linux, UML), в котором ядро гостевой системы Linux специальным образом модифицируется для работы поверх другой операционной системы Linux (без расширений гипервизора). Большинство пользователей хотят запускать неизмененное ядро, поэтому для них предпочтительнее решения полной виртуализации (например, KVM).

Подход UML также популярен, однако для его работы необходимо виртуальное аппаратное обеспечение (такое как терминал, виртуальный диск и сетевое оборудование).

Эмуляция устройств

Гипервизор предоставляет средства для совместного доступа к ресурсам процессора множеству операционных систем (виртуализация процессора), однако для обеспечения полной виртуализации необходимо реализовать для виртуальных машин полностью виртуальную среду. Эмуляцию машины или платформы можно осуществлять различными средствами, среди которых стоит отметить QEMU - популярный пакет с открытым кодом, поддерживающий различные гипервизоры. QEMU - это полноценный эмулятор и гипервизор. Однако в KVM QEMU используется для эмуляции устройств в виде отдельного процесса пользовательского пространства (см. рисунок 1). Интересной возможностью QEMU является то, что благодаря эмуляции дисков (в формате QCOW) в QEMU доступна такая продвинутая функциональность, как создание снимков системы и миграция виртуальных машин на лету.

В KVM начиная с версии ядра 2.6.25 для оптимизации производительности виртуального ввода/вывода применяется инфраструктура virtio. В ней используются находящиеся в гипервизоре паравиртуальные драйверы с обработчиками прерываний, позволяющими довести производительность гостевой операционной системы почти до уровня хост-системы. Этот подход работает только в случае, если есть возможность специальным образом изменить гостевую операционную систему. Он нашел применение в гостевых системах Linux, работающих на гипервизоре Linux.

В настоящее время virtio и QEMU совместно работают над оптимизацией транзакций эмулируемых устройств, выполняемых между гостевой системой Linux и эмулятором QEMU в пользовательском пространстве.

Виртуальная сеть

При консолидации виртуальных машин на физических серверах растут требования к производительности работы сети на платформе. Однако вместо реализации работы сети виртуальных машин на физическом уровне платформы можно также виртуализировать их локальное взаимодействие. Для оптимизации сетевой производительности виртуальных машин служит виртуальный коммутатор , или vSwitch. Он работает как физический коммутатор, однако является частью платформы виртуализации (см. рисунок 3). На этом рисунке виртуальные интерфейсы (virtualized interfaces, VIF), ассоциированные с виртуальными машинами, взаимодействуют посредством виртуального коммутатора с физическими интерфейсами (physical interfaces, PIF).

Рисунок 3. Высокоуровневое представление открытого виртуального коммутатора Open vSwitch с виртуальными и физическими интерфейсами
Diagram shows layers starting on the bottom with the pysical domain, then physical interfaces, virtual interfaces and the VMs at the top

Для решения этой проблемы имеется очень интересное решение с открытым кодом, называемое Open vSwitch . Помимо реализации виртуального коммутатора для виртуальных сред, vSwitch также может интегрировать несколько физических платформ и предоставлять функциональность корпоративного уровня, такую как виртуальные локальные сети (virtual local area networks, VLAN), основанное на приоритетах качество обслуживания (Quality of Service, QoS), агрегация каналов и поддержка аппаратного ускорения (например single-root I/O virtualization, IOV, для сетевых адаптеров). Решение Open vSwitch доступно начиная с ядра версии 2.6.15; оно поддерживает ряд решений виртуализации (Xen, KVM, VirtualBox) и стандартов управления (Remote Switched Port Analyzer [RSPAN], NetFlow и т.д.).

Инструменты и технологии для работы с виртуальными машинами

Так как виртуальные машины представляют собой объединение операционной системы, корневой файловой системы и конфигурации, имеется очевидный спрос на разработку инструментов для работы с ними. Однако чтобы ощутить весь потенциал виртуальных машин и инструментов, должен существовать переносимый способ для их сборки. Текущий подход, называемый Open Virtualization Format (OVF), - это гибкий, эффективный и переносимый способ создания виртуальных машин. OVF создает для образа виртуального диска XML-обертку, в которой определяется конфигурация виртуальной машины, в том числе настройки сети, требования к процессору и памяти и множество расширяемых метаданных для еще более подробного описания образа и требований к платформе. Ключевой качеством OVF является то, что с его помощью можно распределять и переносить виртуальные машины независимо от гипервизора.

Есть несколько утилит для управления образами виртуальных машин (VM images, VMI), а также их конвертации из одного формата в другой. Разработанная VMware утилита ovftool - это полезный инструмент, который можно использовать для конвертации VMI (например, для преобразования формата VMDK - VMware Virtual Disk Development Kit в OVF). Этот и другие инструменты полезны, если у вас есть VMI-образ, однако что делать, если у вас есть физический сервер, который вы хотите конвертировать в VMI? Для этого можно использовать инструмент Clonezilla . Хотя изначально он разрабатывался как инструмент клонирования дисков для восстановления после аварий, его можно использовать для конвертации физического сервера в образ виртуальной машины, который затем легко развернуть в виртуальной инфраструктуре. Формат OVF набирает популярность, и уже есть несколько готовых, а также находящихся в разработке инструментов (например, утилиты, построенные поверх libvirt) для конвертирования образов и управления ими.

Локальное управление

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

Red Hat представила библиотеку libvirt в качестве API для управления платформой виртуализации (гипервизорами и виртуальными машинами). Интересно то, что libvirt поддерживает несколько типов гипервизоров (среди которых KVM и Xen), а также предоставляет привязки к своему API для нескольких языков (например, C, Python и Ruby). Она реализует "последнюю милю" управления, взаимодействуя непосредственно с гипервизором платформы и расширяя API-интерфейсы для более крупных решений управления инфраструктурой. С помощью libvirt легко запускать и останавливать виртуальные машины; она также предоставляет API-интерфейсы для более сложных операций, таких как миграция виртуальных машин между платформами. Можно также использовать shell-оболочку libvirt (построенную поверх libvirt), которая называется virsh.

Открытые технологии уровня инфраструктуры

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

Технологии ввода/вывода

Построение масштабируемой и сбалансированной Web-архитектуры зависит от умения распределять Web-трафик между серверами, реализующими функциональность системы. Существует несколько решений для балансировки нагрузки, среди которых мы отметим Traffic Server - решение Yahoo!, которая недавно открыла его код. Traffic Server интересен тем, что инкапсулирует в одном пакете большое количество функциональности, в том числе управление сеансами, аутентификацию, фильтрацию, балансировку нагрузки и маршрутизацию. Изначально Yahoo! приобрела этот продукт у компании Inktomi, а сейчас расширила его и опубликовала его исходный код.

Управление инфраструктурой

Более масштабное управление инфраструктурой (управление множеством гипервизоров и еще большим количеством виртуальных машин) можно осуществлять различными способами. Два самых распространенных решения построены на основе одной и той же платформы (libvirt). Пакет oVirt - это открытый инструмент управления виртуальными машинами, который масштабируется от небольшого количества виртуальных машин до тысяч виртуальных машин, работающих на сотнях хост-компьютеров. Пакет oVirt разработан компанией Red Hat; он представляет собой основанную на Web консоль управления, которая помимо традиционного управления предоставляет средства автоматизации создания кластеров и балансировки нагрузки. oVirt написан на языке Python. Еще есть приложение VirtManager, которое также основано на libvirt и разрабатывалось в Red Hat. Оно имеет графический интерфейс, созданный с помощью GTK+ (вместо Web-интерфейса oVirt). VirtManager обладает гораздо более богатыми графическими возможностями представления данных (для отображения в реальном времени производительности и загруженности систем), а также включает в себя VNC-клиент для полноценной графической работы на удаленных виртуальных машинах.

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

Интегрированные IaaS-решения

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

Eucalyptus

Одним из самых популярных пакетов с открытым кодом для построения облачной инфраструктуры является Eucalyptus (или Elastic Utility Computing Architecture for Linking Your Programs to Useful Systems ). Этот пакет уникален тем, что его интерфейс совместим с Amazon Elastic Compute Cloud (Amazon EC2 - интерфейсом облачных вычислений Amazon). Кроме того, в Eucalyptus входит Walrus - приложение для облачного хранения данных, совместимое с Amazon Simple Storage Service (Amazon S3 - интерфейсом Amazon для облачного хранения данных).

Eucalyptus поддерживает гипервизоры KVM/Linux и Xen, а также включает в себя пакет Rocks для управления кластерами.

OpenNebula

OpenNebula - это еще одно интересное приложение с открытым кодом (распространяемое под лицензией Apache), разработанное в Мадридском университете Комплутенсе (Universidad Complutense de Madrid). Помимо поддержки частных облачных инфраструктур, OpenNebula поддерживает идею создания гибридных облаков. Гибридные облака позволяют для улучшения масштабируемости комбинировать частную облачную инфраструктуру с открытой облачной инфраструктурой (например, Amazon).

OpenNebula поддерживает Xen, KVM/Linux и VMware. Реализация управления и интроспекции в этом приложении основана на библиотеке libvirt.

Nimbus

Nimbus - это IaaS-решение, предназначенное для научных вычислений. Используя Nimbus, можно брать в аренду удаленные ресурсы (например, предоставляемые Amazon EC2) и управлять ими локально (конфигурировать, разворачивать виртуальные машины, следить за их работой и т.д.). Решение Nimbus образовалось из проекта Workspace Service (который является частью Globus.org). Nimbus зависит от Amazon EC2 и поддерживает гипервизоры Xen и KVM/Linux.

Xen Cloud Platform

Компания Citrix интегрировала Xen в свою IaaS-платформу. В ней используется Xen в качестве гипервизора, а также применяются другие компоненты с открытым кодом, например Open vSwitch. Интересным преимуществом решения Xen является управление на основе стандартов (таких как OVF, Distributed Management Task Force [DTMF], Common Information Model [CIM] и Virtualization Management Initiative [VMAN]) из проекта Kensho. Стек управления Xen поддерживает SLA-гарантии, а также подробные метрики для взимания платежей.

OpenQRM

Последним в списке, но не по значимости, является решение OpenQRM, которое классифицируют как платформу управления центом обработки данных. OpenQRM предоставляет единую консоль для управления целым виртуальным центром обработки данных. Его модульная архитектура позволяет интегрировать сторонние инструменты и приложения. В OpenQRM интегрирована поддержка отказоустойчивости (посредством избыточности), также он поддерживает множество гипервизоров, в том числе KVM/Linux, Xen, VMware и Linux VServer.

Двигаемся дальше

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


Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=29165