The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги | ]

Использование PaaS-платформы CloudFoundry в Ubuntu 11.10
В universe-репозиторий  Ubuntu 11.10 будут входить пакеты с реализацией
поддержки серверной и клиентской части PaaS-платформы (Platform as a Service) [[http://www.opennet.ru/opennews/art.shtml?num=30241
CloudFoundry]], развиваемой компанией VMware и доступной в исходных текстах под
лицензией Apache.

Платформа позволяет сформировать инфраструктуру для выполнения в облачных
окружениях конечных приложений на Java (Spring), Grails, Ruby (Rails, Sinatra),
JavaScript (Node.js), Scala и других языках, работающих поверх JVM. Из СУБД
поддерживаются СУБД MySQL, Redis и MongoDB. PaaS-платформа, в отличие от IaaS,
работает на более высоком уровне, чем выполнение готовых образов операционных
систем, избавляя потребителя от необходимости обслуживания ОС и системных
компонентов, таких как СУБД, языки программирования, программные фреймворки и
т.п. В PaaS от пользователя требуется только загрузка приложения, которое будет
запущено в готовом окружении, предоставляемом платформой.


Устанавливаем необходимые серверные пакеты из отдельного PPA-репозитория:

   sudo apt-add-repository ppa:cloudfoundry/ppa
   sudo apt-get update
   sudo apt-get install cloudfoundry-server

В процессе установки потребуется ответить на несколько вопросов debconf, таких как пароль к MySQL.

Устанавливаем клиентские пакеты для тестирования сервера:

   sudo apt-get install cloudfoundry-client

В итоге имеем сервер "vcap" и клиент "vmc".

Настройка

По умолчанию vmc-клиент настроен для работы с внешним сервисом
CloudFoundry.com. Для того, чтобы обеспечить его работу с локальным сервером
потребуется настроить сопутствующие локальных службы.

Во первых требуется обеспечить автоматическое сопоставление для выполняемых
приложений IP-адреса cloud-окружения с доменным именем. Самым типичным способом
является использование готовых DNS-сервисов, таких как DynDNS.com, настроить
автоматическую отправку обновлений на сервис SynDNS.com можно запустив:

   dpkg-reconfigure cloudfoundry-server


В более простом случае, для проведения экспериментов можно обойтись правкой
/etc/hosts на стороне клиента и сервера.

Смотрим внешний IP-адрес сервера. Если сервер запущен не на локальной машине, а
в сервисе Amazon EC2 адрес можно посмотреть через обращение к API Amazon командой:

   wget -q -O- http://169.254.169.254/latest/meta-data/public-ipv4
   174.129.119.101

Соответственно, в /etc/hosts на сервере и клиентских машинах добавляем
управляющий хост api.vcap.me, а также хост для тестового приложения (в нашем
случае приложение будет называться testing123):

   echo "174.129.119.101  api.vcap.me testing123.vcap.me" | sudo tee -a /etc/hosts

Привязываем vmc-клиент к серверу vcap (CloudFoundry):

   vmc target api.vcap.me

   Succesfully targeted to [http://api.vcap.me]

Добавляем на сервер нового пользователя:

   vmc add-user 

   Email: test@example.com
   Password: ********
   Verify Password: ********
   Creating New User: OK
   Successfully logged into [http://api.vcap.me]

Заходим на сервер:

   vmc login 

   Email: test@example.com
   Password: ********
   Successfully logged into [http://api.vcap.me]


Размещаем своё приложение на сервере. В качестве примера, загрузим простую
программу на языке Ruby, использующую фреймворк Sinatra. Примеры можно найти в
директории /usr/share/doc/ruby-vmc/examples.

Переходим в директорию с приложением:
   cd /usr/share/doc/ruby-vmc/examples/ruby/hello_env

Копируем его на сервер:

   vmc push

   Would you like to deploy from the current directory? [Yn]: y
   Application Name: testing123
   Application Deployed URL: 'testing123.vcap.me'? 
   Detected a Sinatra Application, is this correct? [Yn]: y
   Memory Reservation [Default:128M] (64M, 128M, 256M, 512M, 1G or 2G) 
   Creating Application: OK
   Would you like to bind any services to 'testing123'? [yN]: n
   Uploading Application:
     Checking for available resources: OK
     Packing application: OK
     Uploading (0K): OK 
     Push Status: OK
     Staging Application: OK
     Starting Application: OK

Все готово! Теперь можно открыть в браузере http://testing123.vcap.me/ и
насладиться результатом работы загруженной программы.


Пример развертывания приложения в сервисе CloudFoundry.com

Подкоючаем vmc-клиент к сервису CloudFoundry.com:

   vmc target https://api.cloudfoundry.com

   Succesfully targeted to [https://api.cloudfoundry.com]

Входим, предварительно зарегистрировавшись на сайте CloudFoundry.com:

   vmc login
   Email: test@example.com
   Password: **********
   Successfully logged into [https://api.cloudfoundry.com]

Размещаем NodeJS-приложение:

   cd /usr/share/doc/ruby-vmc/examples/nodejs/hello_env
   vmc push

   Would you like to deploy from the current directory? [Yn]: y
   Application Name: example102
   Application Deployed URL: 'example102.cloudfoundry.com'? 
   Detected a Node.js Application, is this correct? [Yn]: y
   Memory Reservation [Default:64M] (64M, 128M, 256M, 512M or 1G) 64M
   Creating Application: OK
   Would you like to bind any services to 'example102'? [yN]: n
   Uploading Application:
     Checking for available resources: OK
     Packing application: OK
     Uploading (0K): OK   
   Push Status: OK
   Staging Application: OK
   Starting Application: OK 

Открываем в браузере http://example102.cloudfoundry.com/ и видим результат работы


Размещаем программу на Java:

Переходим в директорию с примером:

   cd /usr/share/doc/ruby-vmc/examples/springjava/hello_env

Собираем JAR-архив:

   sudo apt-get install openjdk-6-jdk maven2
   ...
   cd $HOME
   cp -r /usr/share/doc/ruby-vmc/examples/springjava .
   cd springjava/hello_env/
   mvn clean package
   ...
   cd target

Загружаем на сервер:

   vmc push

   Would you like to deploy from the current directory? [Yn]: y
   Application Name: example103
   Application Deployed URL: 'example103.cloudfoundry.com'?  
   Detected a Java Web Application, is this correct? [Yn]: y
   Memory Reservation [Default:512M] (64M, 128M, 256M, 512M or 1G) 512M
   Creating Application: OK
   Would you like to bind any services to 'example103'? [yN]: n
   Uploading Application:
     Checking for available resources: OK
     Packing application: OK
     Uploading (4K): OK   
   Push Status: OK
   Staging Application: OK 
   Starting Application: OK

Открываем в браузере http://example103.cloudfoundry.com/.

Размещаем более сложное готовое web-приложение Drawbridge, требующее для
своей работы СУБД MySQL (параметры подключаемого сервиса mysql-4a958 задаются
отдельно, в web-интерфейсе cloudfoundry.com):

   cd $HOME
   bzr branch lp:~kirkland/+junk/drawbridge   
   cd drawbridge  

   vmc push

   Would you like to deploy from the current directory? [Yn]: y
   Application Name: example104
   Application Deployed URL: 'example104.cloudfoundry.com'? 
   Detected a Node.js Application, is this correct? [Yn]: y
   Memory Reservation [Default:64M] (64M, 128M, 256M or 512M) 128M
   Creating Application: OK
   Would you like to bind any services to 'example104'? [yN]: y
   Would you like to use an existing provisioned service [yN]? n
   The following system services are available:
      1. mongodb
      2. mysql
      3. redis
   Please select one you wish to provision: 2
   Specify the name of the service [mysql-4a958]: 
   Creating Service: OK
   Binding Service: OK
   Uploading Application:
     Checking for available resources: OK
     Processing resources: OK
     Packing application: OK
     Uploading (77K): OK   
   Push Status: OK
   Staging Application: OK 
Starting Application: OK

Открываем http://example104.cloudfoundry.com 

Просмотр размещенных приложений и доступных сервисов.

Выводим список приложений:

   vmc apps 

   | Application | #  | Health  | URLS | Services    |
   | example102 | 1  | RUNNING | example102.cloudfoundry.com | |
   | example103 | 1  | RUNNING | example103.cloudfoundry.com | |
   | example101 | 1  | RUNNING | example101.cloudfoundry.com | |
   | example104 | 1  | RUNNING | example104.cloudfoundry.com | mysql-4a958 |

Выводим список доступных сервисов:

   vmc services 

   | Service | Version | Description                   |
   | redis   | 2.2     | Redis key-value store service |
   | mongodb | 1.8     | MongoDB NoSQL store           |
   | mysql   | 5.1     | MySQL database service        |

   == Provisioned Services ==

   | Name        | Service |
   | mysql-4a958 | mysql   |
   | mysql-5894b | mysql   |


Выводим список доступных фреймворков:

   vmc frameworks 

   | Name    |
   | rails3  |
   | sinatra |
   | lift    |
   | node    |
   | grails  |
   | spring  |


Изменение выделенных для приложения ресурсов

Увеличение доступной памяти:

   vmc mem example101

   Update Memory Reservation? [Current:128M] (64M, 128M, 256M or 512M) 512M
   Updating Memory Reservation to 512M: OK
   Stopping Application: OK
   Staging Application:  OK 
   Starting Application: OK  

Проверяем, какие ресурсы доступны:

   vmc stats example101
   | Instance | CPU (Cores) | Memory (limit) | Disk (limit) | Uptime       |
   | 0        | 0.1% (4)    | 16.9M (512M)   | 40.0K (2G)   | 0d:0h:1m:22s |


Увеличение числа одновременно выполняемых окружений для приложения example104 до 4:

   vmc instances example104 4

   Scaling Application instances up to 4: OK

Проверяем, какие ресурсы доступны:

   vmc stats example104

   | Instance | CPU (Cores) | Memory (limit) | Disk (limit) | Uptime        |
   | 0        | 0.0% (4)    | 21.0M (128M)   | 28.0M (2G)   | 0d:0h:19m:33s |
   | 1        | 0.0% (4)    | 15.8M (128M)   | 27.9M (2G)   | 0d:0h:2m:38s  |
   | 2        | 0.0% (4)    | 16.3M (128M)   | 27.9M (2G)   | 0d:0h:2m:36s  |
   | 3        | 0.0% (4)    | 15.8M (128M)   | 27.9M (2G)   | 0d:0h:2m:37s  |
 
Ключи: cloud, paas, CloudFoundry, vmc, vcap, virtual, ubuntu, linux / Лицензия: CC-BY
Раздел:    Корень / Безопасность / Виртуализация - Xen, OpenVZ, KVM, Qemu

Ваш комментарий
Имя:         
E-Mail:      
Заголовок:
Текст:



  Закладки на сайте
  Проследить за страницей
Created 1996-2018 by Maxim Chirkov  
ДобавитьПоддержатьВебмастеруГИД  
Hosting by Ihor