Статьи

Использование Apache Brooklyn в Stackato

 В ActiveState мы понимаем, что приложения часто нуждаются в услугах передачи данных для улучшения взаимодействия с пользователем. Вот почему Stackato включает в себя набор системных служб, таких как MySQL , PostgreSQL , RabbitMQ и многие другие. Но бывают случаи, когда необходимы услуги помимо этих. Это где сервисные брокеры служат своей цели. В этом посте демонстрируется использование Brooklyn Service Broker для того, чтобы сделать один из широкого спектра чертежей Apache Brooklyn доступным для Stackato в качестве службы.

Также следует отметить, что было предложено включить сервисный брокер Apache Brooklyn (и плагин CLI) в инкубатор Cloud Foundry. Поэтому не забудьте внимательно следить за тем, как этот проект вскоре может сыграть важную роль в сфере услуг Cloud Foundry.

Апач Бруклин

Apache Brooklyn — это платформа для предоставления, управления и мониторинга приложений. Приложения развертываются с использованием чертежей, которые позволяют развертывать в один клик через графический интерфейс или API REST для облачных и не облачных решений.

Бруклинские чертежи

Бруклинский проект — это документ YAML, написанный с декларативным синтаксисом и обеспечивающий поддержку плагинов JVM. План описывает, среди прочего, где развернуть приложение и с какими сервисами приложение будет взаимодействовать. Чертежи могут состоять из одного процесса или комбинации процессов. Эти процессы могут быть любыми: от простого сервера веб-приложений с файлом WAR до кластера серверов приложений J2EE, подключенного к кластеру серверов баз данных SQL. Ссылка на чертежи YAML приведена здесь .

Каталоги

Бруклин предлагает каталог , сформированный постоянным набором версионных чертежей. Элементы из каталога могут быть развернуты напрямую или использованы в других чертежах. Каталог определяется с использованием той же структуры YAML, что и план с дополнительным ключом brooklyn.catalog. Описания чертежей полей, связанных с каталогом, можно найти здесь . Каталог Бруклина начинается с обширного списка предметов и может быть расширен путем добавления ваших собственных чертежей в каталог.

Сервисные брокеры

Сервисный брокер — это мост, который соединяет внешнюю службу со средой Cloud Foundry , в данном случае с Stackato. После подключения служба становится доступной для использования точно так же, как системная служба. Обычно для службы, которая должна быть доступна для экосистемы, основанной на Cloud Foundry, потребуется собственная реализация брокера пользовательских служб. Благодаря сочетанию дизайна Бруклина и возможностей Brooklyn Service Broker, можно сделать доступным полный спектр чертежей Brooklyn, не требуя специального брокера для каждой службы.

Интеграция Stackato

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

Установка JDK 8

Для установки JDK 8 следуйте этим инструкциям . Установка с использованием этих инструкций не приведет к установке или обновлению переменной среды JAVA_HOME для ссылки на установку JDK 8, которая потребуется при сборке компонента Service Broker с использованием Gradle. Чтобы установить переменную среды JAVA_HOME, добавьте следующее в ~ / .bash_profile:

export JAVA_HOME=/path/to/jdk8

Также можно указать каталог установки JDK напрямую, не используя переменную среды JAVA_HOME. Это делается путем создания файла gradle.properties в корневом каталоге компонента Service Broker, содержащего:

org.gradle.java.home=/path/to/jdk8

Установка Gradle

Выполните следующие действия для установки Gradle, который будет использоваться для создания проекта компонента Service Broker.

Установка и запуск Apache Brooklyn

Каталог Apache BrooklynПри загрузке Apache Brooklyn извлекайте файлы из Github, а не с зеркальных сайтов, как указано здесь . Как уже отмечалось здесь , это необходимо , потому что Brooklyn Service Broker имеет зависимость от клиента библиотеки Бруклина, который доступен только в версии снимка с Github. На этапе установки Maven будут собраны необходимые компоненты для запуска сервера Apache Brooklyn, а в локальный репозиторий Maven будет установлена ​​зависимость клиентской библиотеки, необходимая для сборки посредника. После того, как проект построен, Бруклинский сервер может быть запущен. В этом примере сервер Brooklyn будет работать на локальном хосте, а приложение с планом Brooklyn (сервис для Stackato) будет развернуто на AWS.

Чтобы указать учетные данные для доступа к AWS, создайте файл brooklyn.properties со свойствами ниже в качестве содержимого. Это создаст именованное местоположение , где имя местоположения будет также служить именем плана сервиса в Stackato. В Бруклине местоположения используются для указания того, где будут развернуты приложения, и включают выбор локального хоста, серверов с фиксированным IP-адресом и различных облаков.

// Create a named location called aws-oregon
brooklyn.location.named.aws-oregon:us-west-2
brooklyn.location.named.aws-oregon.identity = AWS_ACCESS_KEY
brooklyn.location.named.aws-oregon.credential = AWS_SECRET_KEY

Теперь можно построить проект и запустить Бруклинский сервер.

cd ~/example
git clone https://github.com/apache/incubator-brooklyn
cd incubator-brooklyn

// Build the project, this step will take a bit of time, even when test are skipped,
// so now would be a good time to grab a coffee, or tea if that's your fancy
mvn clean install -DskipTests

// Start the Brooklyn server
usage/dist/target/brooklyn-dist/bin/brooklyn launch --localBrooklynProperties path/to/brooklyn.properties

Сервер Бруклина теперь должен быть доступен по адресу localhost: 8081. Например, сервер Redis будет добавлен в каталог для использования с нашим приложением. Чтобы добавить сервер Redis в каталог, откройте сервер Brooklyn в веб-браузере. Появится диалоговое окно, выберите вкладку «Каталог», нажмите кнопку «Добавить в каталог», выберите «Объект», а затем вставьте следующий текст YAML в текстовую область.

brooklyn.catalog:
  id: redis
  version: 1.0
  iconUrl: classpath://redis.png
  description: Redis is an open-source, networked, in-memory, key-value data store with optional durability
name: Redis

services:
- type: brooklyn.entity.basic.BasicApplication
  brooklyn.children:
  - type: brooklyn.entity.nosql.redis.RedisStore
        id: redis
        name: Redis Server

Установка и запуск Brooklyn Service Broker

Затем загрузите, настройте и разверните Brooklyn Service Broker. Брокер службы также будет развернут на локальном хосте.

cd ~/example
git clone https://github.com/cloudfoundry-community/brooklyn-service-broker
cd brooklyn-service-broker

Есть некоторые свойства, которые должны быть определены в файле application.properties, прежде чем мы сможем запустить посредник.

brooklyn.uri=127.0.0.1:8081
brooklyn.username=brooklyn-username
security.user.name=simple-user
security.user.password=simple-password

Свойство brooklyn.username необходимо для запуска посредника, а security.user.name и security.user.password используются для аутентификации посредника.

// Start the broker, available at localhost:8080
gradle clean bootRun

// Verify the broker is working. A JSON response containing information about
// the Redis server added earlier will be returned
// Enter simple-password when prompted for a password
curl -u simple-user localhost:8080/v2/catalog

Добавление Apache Brooklyn Services в Stackato

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

// Add the broker to Stackato
stackato create-service-broker --username simple-user --password simple-password --url http://192.168.68.29:8080 brooklyn-service-broker

// Verify example catalog 'Redis' is available
stackato services

// Make service plan public, plan name = aws-oregon
stackato update-service-plan --public aws-oregon --vendor Redis

Теперь сервис может быть привязан к приложениям. В Stackato некоторым сервисам присваивается переменная окружения * _URL, содержащая строку соединения uri с сервисом. Например, такие службы, как база данных MySQL или очередь сообщений RabbitMQ, будут иметь переменную среды MYSQL_URL и RABBITMQ_URL соответственно. Удобство такой переменной среды недоступно для сервисов, предоставляемых через брокера сервисов. Вместо этого нужно будет проанализировать переменную среды VCAP_SERVICES, чтобы получить учетные данные для установления соединения со службой.

Когда stackato создает сервис, Brooklyn предоставит экземпляр AWS Elastic Computer Cloud с Redis в регионе Орегон (определенный ранее с помощью файла brooklyn.properties). Для запуска экземпляра потребуется несколько минут, прежде чем он будет готов.

В этом примере служба будет привязана к развернутому экземпляру приложения Python Currency Converter .

// Deploy the Currency Converter app
git clone https://github.com/Stackato-Apps/bottle-currency
cd ~/bottle-currency
git checkout brooklyn-example
stackato push -n --no-start

// Create and bind the Brooklyn-enabled Redis Server to the Currency Converter app
stackato create-service Redis --plan aws-oregon bottle-currency-db bottle-currency

Мы также можем использовать Redis-Cli для прямого подключения к нашему серверу Redis, чтобы убедиться, что все работает.

// Connect to the Redis server
redis-cli -h host.address -p redis.port

// Connection is established
> keys *
1) "CADUSD"
> get CADUSD
"0.79475461951123"

Ниже приведен фрагмент файла wsgi.py из нашего примера приложения-конвертера валют, адаптированного для сервера Redis с включенным Бруклином.

vcap_services = json.loads(os.getenv('VCAP_SERVICES'))
...
credentials = vcap_services['Redis'][0]['credentials']['Redis Server']
host = credentials['host.address']
port = credentials['redis.port']
rdb = Redis(host=host, port=port)

Вывод

Интересуетесь возможностями Apache Brooklyn на Stackato? Загрузите Stackato Micro Cloud или зарегистрируйтесь на 20 ГБ лицензии и попробуйте сами.

Информация в этом блоге была основана на «Интеграции Cloud Foundry с Apache Brooklyn Part 1: Service Broker» Роберта Мосса