[Эта статья была написана Йорамом Вайнребом .]
vCloud, OpenStack & Cloudify
VMWare уже много лет находится на переднем крае пространства виртуализации и, безусловно, является самым популярным решением для виртуализации предприятий .
В последние годы, когда облачные технологии стали популярными, VMWare выпустила линейку продуктов vCloud для частных облаков.
Совсем недавно VMware также вышла в публичное облачное пространство со своим продуктом vCloudAir.
Во многих публикациях мы продемонстрировали, как Cloudify имеет широкую поддержку для управления приложениями в различных облаках, наиболее популярными из которых являются облака на основе OpenStack и EC2.
Гибридная облачная оркестровка — от VMWare до OpenStack и обратно с Cloudify.
Идти
Очевидно, что добавление поддержки облака vCloudAir было для нас важной целью.
Плагины VMWare vSphere и vCloudAir позволяют выделять ресурсы в vCloudAir, а также поддерживают гибридное облако в гетерогенных средах, в которых параллельно работают облака VMWare / Openstack .
Он может даже управлять приложениями, которые охватывают VMWare и Openstack в одном и том же развертывании.
Изучение API vCloudAir показало, что API vCloudAir находился под сильным влиянием традиционных продуктов VMWare и клиентской базы.
По сравнению с OpenStack и EC2, он в большей степени ориентирован на ИТ-операции, чем на разработчиков и DevOps .
Это означает, что API предоставляет огромное количество возможностей для настройки и управления, но в то же время завершает операцию, которая принимает пару простых вызовов API, преобразованных во многие другие вызовы в vCloud.
Чтобы поддерживать новое облако в Cloudify, мы должны создать или настроить плагин, который будет предоставлять различные объекты и интерфейсы / операции, которые мы можем выполнять с этим облаком.
В моем случае, поскольку времени было мало, и я хотел начать работу как можно быстрее, я решил использовать существующий плагин, который предоставляет Apache LibCloud, который сам по себе позволяет вам взаимодействовать с различными облачными API из python.
Cloudify уже имеет плагин LibCloud, который использовался для EC2 API.
Я просто расширил его, чтобы выставить объекты vCloudAir тоже.
Эта работа еще не завершена, и в настоящее время у меня есть только объекты сервера (server_plugin), которые можно увидеть здесь:
Тестируя работу, которую я проделал с реальной учетной записью vCloud, я обнаружил, что некоторые функции, которые я использовал в драйвере LibCloud vCloud (версия 0.15.1), не соответствовали API, используемому для моей учетной записи. Например, мне не удавалось получить информацию о сети, но список сетей работал.
Из-за этого мне пришлось раскошелиться на репозиторий LibCloud и внести некоторые изменения, чтобы обойти эти проблемы.
Моя модифицированная версия находится по адресу:
Я использовал пример проекта Cloudify .
Весь код остается прежним, и единственное отличие было сосредоточено на проекте YAML
import the libcloud plugin definition: imports: - http://www.getcloudify.org/spec/cloudify/3.1m5/types.yaml - libcloud.yaml Change the VM type definition to vCloud: vm_host: derived_from: cloudify.libcloud.server properties: cloudify_agent: default: user: ubuntu key: /home/ubuntu/id_rsa server: default: ### if defined, will serve as the hostname for the started instance, ### otherwise, the node_id will be used #name: no_name ### HOST_NAME"" # image: Ubuntu Server 12.04 LTS (amd64 20140619) # image_name: Ubuntu Server 12.04 LTS (amd64 20140619) image_name: ubuntu_1204_64bit image: ubuntu_1204_64bit ram: 4096 ### FLAVOR_NAME management_network_name: CFY-Internal ### Network name connection_config: default: cloud_provider_name: vcloud access_id: **************@vmware.com@*************** secret_key: *************** host: ***vcd.vchs.vmware.com port: 443
Остальная часть YAML остается точно такой же. Я просто удалил определение групп безопасности и плавающих IP-адресов, которые у меня еще не были готовы, в моем плагине vCloud.
Поскольку Cloudify позволяет вам определять оркестровку облачного приложения независимым образом, нежели фактическое облачное IaaS, на котором будет работать приложение, очень легко запустить одно и то же приложение в разных облаках практически без изменений.
Использование общего управления и оркестровки в качестве абстракции для VMware и OpenStack обеспечивает общую инфраструктуру управления и развертывания.
Приложение осведомлено о том, работает ли оно в OpenStack или VMware. Однако, поскольку вызовы каждого из компонентов инфраструктуры теперь централизованы в одном драйвере для каждой среды, он управляется один раз для всех приложений.
Кроме того, для встроенных типов существует реализация по умолчанию, поэтому в большинстве случаев пользователю необходимо иметь дело с деталями реализаций каждого типа элемента только для конкретных настроек.