<< SCon 컨퍼런스 | Home | 웹기반 Cloud IDE eXo로 PaaS 플랫폼 디플로이하기 >>

Cloud Foundry의 모든 것들

Cloud Foundry가 실현된다는 것은 가상화를 통해 추상화된 하드웨어에서 개발, 배포 및 운영 자동화를 실현한 새로운 인프라라고 생각해도 될 것으로 보인다.
그래서 본 포스트는 Cloud Foundry에 대해 모든 것들을 정리해 보고자 한다.

Cloud Foundry 소개




Cloud Foundry는 VM웨어의 Open PaaS 전략에 따라 2011년 4월 발표된 오픈 소스 PaaS 소프트웨어(Ruby로 구현)에서 VM웨어가 인수한 SpringSource의 Java 플랫폼 "SpringSource Cloud Foundry"를 기반으로 시작했고 그이후 언어라든가 서비스, 프레임워크 등이 추가되고 발전되어 가고 있다.
거기에 WaveMaker(Java 통합 개발 환경을 제공하는 소프트웨어, 웹 브라우저에서 사용 가능) 인수하고, Mozy(온라인 백업 서비스) EMC에서 결합해 온라인에서 응용프로그램을 배포하고 백업까지 이어지는 부가가치 시장을 노리고 있다.

1) Cloud Foundry
Cloud Foundry는 오픈 소스 커뮤니티(CloudFoundry.org)와 β버전의 공용 PaaS 서비스(CloudFoundry.com)가 있다. Cloud Foundry는 오픈 소스 PaaS 프레임워크로 특정 IaaS에 의존하지 않고 여러 프로그래밍 언어 및 프레임 워크에 대응하고 있다. 또한. 퍼블릭 클라우드 및 프라이빗 클라우드 모두에게 배포할 수 있고 주로 응용 프로그램 개발자들을 대상으로 하고 있다. 현재는 β버전을 위해 무료로 제공되고 있지만, 정식 버전은 유료 제공을 예정하고 있다.
런타임 환경으로 Node, Ruby, Java를 지원하고 frameworks는 Spring, rails3, node, grails, play 등, 그리고 service들은 MongoDB, MySQL, PostgreSQL, RabbitMQ, Redis 등을 지원하고 있다.

2) Micro Cloud Foundry
Micro Cloud Foundry는 Cloud Foundry 환경을 개발자 데스크톱의 가상 머신상에서 재현해 개발자에게 개발 환경을 쉽게 구축하고 배포가 가능하게 해 준다.

3) Cloud Foundry for Enterprise
Cloud Foundry for Enterprise는 기업의 프라이빗 클라우드의 도입과 클라우드 공급자가 공용 클라우드 PaaS 서비스를 제공하는 것을 목적으로 상용 버전으로 제공을 예정하고 있다.

Cloud Foundry 맛보기

Cloud Foundry는 STS(Eclipse 플러그인)와 vmc라는 커맨드기반의 도구를 제공하고 있는데 여기서는 vmc기반으로 테스트 한다. 그리고 vmc는 Ruby로 되어 있으며, gem 사용할 수 있는 환경이라면 gem install vmc로 쉽게 설치할 수 있다.

1) 가입하기
여기에서 가입을 하게되면 이메일 주소로 계정 할당되었다는 정보와 Activate 메일이 온다. 그럼 활성화시키면 계정 생성은 마무리된다.

2) 자신의 서버에 Ruby, RubyGems(Centos) 설치
- ruby 지원 버전 : 1.8.7, 1.9.2
> yum grouplist |grep -i Development
> yum groupinstall "Development Tools"
> wget ftp://ftp.ruby-lang.org//pub/ruby/1.9/ruby-1.9.2-p320.tar.gz
> tar xvfz ruby-1.9.2-p320.tar.gz
> cd ruby-1.9.2-p320
> ./configure
> make; make install
> gem -v
1.3.7.1
> gem update --system

3) vmc 설치 및 인증 확인, 패스워드 변경(http://docs.cloudfoundry.com/tools/vmc/installing-vmc.html)
- 가입 이메일로 아이디와 패스워드를 보내주면 그걸로 vmc 설치한 다음 로그인, 패스워드 변경 작업을 커맨드로 진행하면 된다.
> gem install vmc
> vmc target api.cloudfoundry.com
Successfully targeted to [http://api.cloudfoundry.com]
> vmc login
Email: hahojin@gmail.com
Password: ********
Successfully logged into [http://api.cloudfoundry.com]
[root@rent-1137 ~]# vmc passwd
Changing password for 'hahojin@gmail.com'
New Password: *******
Verify Password: *******

Successfully changed password
# 서비스 되는  Java, Node.js, Ruby 정도
> vmc runtimes
+--------+-------------+-----------+
| Name   | Description | Version   |
+--------+-------------+-----------+
| node   | Node.js     | 0.4.12    |
| node06 | Node.js     | 0.6.8     |
| ruby18 | Ruby 1.8    | 1.8.7     |
| ruby19 | Ruby 1.9    | 1.9.2p180 |
| java   | Java 6      | 1.6       |
+--------+-------------+-----------+
> vmc frameworks
+------------+
| Name       |
+------------+
| rails3     |
| standalone |
| sinatra    |
| java_web   |
| grails     |
| rack       |
| node       |
| play       |
| lift       |
| spring     |
+------------+
> vmc services
+------------+---------+---------------------------------------+
| Service    | Version | Description                           |
+------------+---------+---------------------------------------+
| mongodb    | 1.8     | MongoDB NoSQL store                   |
| mysql      | 5.1     | MySQL database service                |
| postgresql | 9.0     | PostgreSQL database service (vFabric) |
| rabbitmq   | 2.4     | RabbitMQ message queue                |
| redis      | 2.2     | Redis key-value store service         |
+------------+---------+---------------------------------------+

4) Rabbitmq기반의 Spring 생플 포팅하기
- 관련 참조 소스 : https://github.com/rabbitmq/rabbitmq-cloudfoundry-samples
- 빌드 및 배포
# Spring  소스 컴파일
> git clone git://github.com/rabbitmq/rabbitmq-cloudfoundry-samples.git
> cd rabbitmq-cloudfoundry-samples/spring/
> mvn package
# 앱 CloudFoundry 등록하기
> cd target
> vmc push
Would you like to deploy from the current directory? [Yn]: y
Application Name: mimul-spring
Detected a Java SpringSource Spring Application, is this correct? [Yn]: y
Application Deployed URL [mimul-spring.cloudfoundry.com]: 
Memory reservation (128M, 256M, 512M, 1G, 2G) [512M]: 
How many instances? [1]: 1
Create services to bind to 'mimul-spring'? [yN]: y
1: mongodb
2: mysql
3: postgresql
4: rabbitmq
5: redis
What kind of service?: 4
Specify the name of the service [rabbitmq-f3dd6]: 
Create another? [yN]: n
Would you like to save this configuration? [yN]: y
Manifest written to manifest.yml.
Creating Application: OK
Creating Service [rabbitmq-f3dd6]: OK
Binding Service [rabbitmq-f3dd6]: OK
Uploading Application:
  Checking for available resources: OK
  Processing resources: OK
  Packing application: OK
  Uploading (3K): OK   
Push Status: OK
Staging Application 'mimul-spring': OK                                          
Starting Application 'mimul-spring': OK        
# 등록된 앱 확인
> vmc apps
+--------------+----+---------+-------------------------------+----------------+
| Application  | #  | Health  | URLS                          | Services       |
+--------------+----+---------+-------------------------------+----------------+
| mimul-spring | 1  | RUNNING | mimul-spring.cloudfoundry.com | rabbitmq-f3dd6 |
+--------------+----+---------+-------------------------------+----------------+

5) URL로 등록된 앱 확인
- 메세지 등록


- 메세지 확인


6) 관리 커맨드들
#동작 확인 및 모니터링
> vmc logs mimul-spring
#인스턴스 증감 커맨드
> vmc instances mimul-spring +1
> vmc instances mimul-spring
+-------+---------+--------------------+
| Index | State   | Start Time         |
+-------+---------+--------------------+
| 0     | RUNNING | 05/22/2012 11:20AM |
| 1     | RUNNING | 05/22/2012 05:08PM |
+-------+---------+--------------------+
# instance 별 로그 모니터링
> vmc logs mimul-spring --instance 0
INFO: Starting Servlet Engine: Apache Tomcat/6.0.35
.....
INFO: Server startup in 1275 ms
> vmc logs mimul-spring --instance 1
INFO: Starting Servlet Engine: Apache Tomcat/6.0.35
.....
INFO: Server startup in 1275 ms

Cloud Foundry 이모 저모

1) Cloud Foundry 아키텍처
시스템 리소스를 낭비하지 않고, 또한 애플 리케이션 추가시 시스템 다운을 방지하기 위해 비동기 I/O를 사용한다. 특히 Ruby의 비동기 I/O Event Machine을 이용하여 이벤트 기반 메시지 버스로 NATS(Cloud Foundry의 개발 멤버에서 VMware CTO의 Derek 씨가 개발)가 활용되고 있다.


- CF kernel(Cloud Foundry Kernel)과 Orchestator 분할하여 설계함으로써 IaaS에 의존하지 않도록 되어 있다.
- CF Kernel(=Cloud Foundry 커널) 부분을 "Cloud Foundry"라고 부른다.
- Orchesrator는 CF Kernel을 IaaS에 구축, 운영 및 모니터링하는 부분으로, 여기는 Cloud Foundry는 포함되지 않는다.

*. CF Kernel을 만드는데 있어서의 방향성
  • MTTR (Mean Time To Recovery)을 강화한다. 장애를 빨리 감지하고 더 빨리 복구한다.
  • 자율 시스템에서 결함을 자동 복구할 수 있도록 유지 구성 정보를 최소화한다.
  • PaaS상의 어플리케이션은 모두 확장할 수 있다.
  • Single Point of Failure가 없어야 한다.
  • 가능한 단순해야 한다.

*. 기본 디자인 패턴
  • 이벤트 기반
  • 비동기
  • 논블럭 I/O
  • 모든 구성 요소는 독립적이며 느슨하게 결합
  • 메시징을 통한 상호 인터액션
  • Eventually Consistent

*. 커널 구성 요소
  • 모든 구성 요소를 동적으로 검색
  • 자동 등록을 통해 관리 비용을 절감하고, IaaS와 PaaS 분할을 실현
  • 모든 구성 요소를 하나의 OS에서 움직일수도 있고 여러 OS에 분할하여 할 수도 있다. (전자는 Micro Cloud Foundry, 후자는 확장 가능한 Cloud Foundry)

*. 커널 구성 요소 유형
  • CloudController : 구성 관리 제어 컨트롤러
  • Router : 인터넷 라우터와 별개. URL 부하 분산 기능
  • DEA (Droplet Execution Agent) : 사용자 응용 프로그램을 실행 담당
  • HealthManager : 감시 도구(DEA의 응용 프로그램 상태 모니터링)
  • Messaging System : 구성 요소 간 메시징 처리


*. Cloud Foundry의 플로우


2) Cloud Foundry Portal(https://komportal.cloudfoundry.com)
- 어플리케이션 시작/중지 및 서비스(DB)의 bind 작업, 로그 확인이 가능하게 되어 있다.(어플리케이션 deploy와 update는 현재 지원되지 않음)



[참조 사이트]



Add a comment Send a TrackBack