[openstack] 각 요소별 설명

2015. 5. 10. 14:07카테고리 없음

[openstack] 각 요소별 설명


OpenStack

OpenStack laas 클라우드 컴퓨팅 프로젝트입니다. 또한, 오픈소스로 여러사람들이 참여하고 있습니다.

 

OpenStack 목표는 모든 규모의 Pubilc, Private 클라우드에 대해서 유연한 솔루션을 제공하려고 하죠. 물론 이렇게 하려면 매우 간단하게 구현되야 하고 확장성이 좋게 만들어져야 합니다

 

이런 이유로 OpenStack 여러 components  이루어져 있고, 유기적으로 함께 작업을 진행하는 형태로 만들어져 있습니다. 그리고 component API(application programming interfaces) 이용해서 서로간에 서비스를 제공 하게 됩니다.

 

이러한 API 사용해서, 다른 서비스들과 통신할 수도 있으며, 혹은 비슷한 특성을 가지는 다른 서비스를 대체해서 사용 있습니다

 

Structure

아래의 그림은 OpenStack 서비스들의 관계를 개념적으로 보여줍니다.

 



 

전체적인 OpenStack 서비스의 구조를 단순화 시켰습니다. 그림에서 각각의 서비스가 어떻게 상호작용하고 있는지 주의깊게 봐야 합니다.

 

여기서는 각각의 Component들이 어떤 역활을 하는지 간단하게 알아보도록 하죠.

  • "Horizon" (Dashborad) :  사용자와 관리자가 서비스를 이용할 있도록 인터페이스를 제공해줍니다
  • "Nova" (Compute) :  이미지와 관련된 메타데이터를 검색하고, 사용자의 요청을 가상머신 내부에서 변환시켜 적용합니다.
  • "Quantum" (Network) :  네트워크를 가상화 시켜, 서비스를 제공하는 디바이스들을 연결합니다. 사용자가 독립된 네트워크를 만들 수도 있으며, 원하는 디바이스만 선택해서 연결 수도 있습니다.
  • "Cinder" (Block Storage) :  Cloud안에 있는 VMs Hosted 저장공간을 제공해 줍니다.
  • "Clance" (Image) :  VMs 올라갈 이미지들을 목록화 하고 저장할 있는 공간입니다.
  • "Swift" (Object Store) :  일반적인 OS에서 사용되는 NTFS, FAT 같은 파일시스템 보다는, 파일을 저장하고 이후에 검색해서 찾아가는 컨테이너에 가깝다고 있습니다.
  • "Keystone" (Identity) :  Openstack에서 제공하는 모든 서비스에 대한 인증과 권한부여를 담당합니다

  

 



 

여기까지 OpenStack 전체적인 그림을 잡았다면, 이제는 하나하나 자세하게 알아보도록 하죠.

 

 

Horizon - DashBoard

 

Django Web Application 사용해서 제작되었습니다. 아마도 프레임워크를 많이 다뤄보신 분이라면 쉽게 Horizon Code 찾고 이해할 있을 겁니다. 주로 Apache에서 제공하는 서비스 모듈인 mod_wsgi 이용합니다.

 

mod_wsgi WSGI 인터페이스를 제공하여파이썬으로 제작된 어플리케이션들을 사용하기 쉽도록 해줍니다. 또한어플리케이션 혹은 서버 에서 어플리케이션과 통신 있는  명세를 제공해줍니다

 



 

DashBoard 웹사이트를 쉽게 커스터마이징 있도록, 재사용이 가능한 모듈, API 인터페이스, 그리고 프레젠테이션으로 Code 나뉘어져 있습니다

 

또한, 기본적으로 SQLite3 같은 작은 데이터베이스를 내부적으로 가지고 있지만, 실제 사용되는 대부분의 데이터는 다른 서비스에서 가져오게 됩니다

 

일반적으로 Horizon Dashboard 용도로 만들어 졌지만, 필요에 따라서 사용자의 편의에 맞게 다시 구현 있습니다.

 

 

Nova - Compute



 

위에 보이는 그림의 요소를 하나하나 살펴보겠습니다.

  • Nova-API Client 사용자의 요청을 처리 합니다.
  • 가상화를 관리하는 Nova-Compute, 다른 하이퍼바이져 API 이용해서, VMs 생성하거나 제거할 있습니다.
  • 저장 공간을 제어하는 역활을 하는 Nova-Volume (현재는 Cinder 변경 되었습니다.) 인스턴스에 저장공간을 새로 만들고, 다른 저장공간을 붙이거나 제거할 있습니다.
  • Nova-Network (현재는 Quantum으로 변경되었습니다.) 네트워크를 관리합니다. 네트워크 작업이 요청이 되면 그에 해당하는 작업을 수행하게 됩니다.
  • 스케쥴링을 수행하는 Nova-Schedule VM 요청을 큐에서 받아, 언제 동작을 수행 할지 결정 하게 됩니다.
  • 기본적으로 RabbitMQ 사용하고 있는 큐는 데몬간에 메시지를 전달 하는 작업을 수행 합니다.
  • 또한, Build-Time Run-Time 상태를 저장 하는 Database 있습니다.
  • nova-consoleauth, nova-novncproxy, nova-console 프록시를 통해서 사용자가 가상 인스턴스에 접근 있게 해줍니다.
  • 인스턴스를 생성할 , 자원을 얼마만큼 사용할 건지 선택을 해주어야 합니다. 그리고 IP 주소나 저장공간 같은 것도 추가 있습니다.

 


 

Swift - Object Storage



  • Proxy Server 컨테이너를 만들거나, 메타데이터의 수정, 파일의 업로드와 같은 요청들을 허용해 줍니다. 또한, 파일 컨테이너 목록들도 제공해 줍니다.
  • Accounts Server Swift 계정을 관리합니다.
  • Container Server Swift 내부의 폴더나 컨테이너가 할당되는 것을 관리합니다.
  • Object Server 스토리지 노드에 들어 있는 실제 파일이나 오브젝트를 관리합니다.
  • 또한, Replication Server 모든 클러스터들에 대해서 검사와 업데이트를 지속적이고 이용 가능하게 제공합니다.

 


 

Clance - Image Store

들어 가기 전에 잠시 Image 뭔지 알아봅시다.

 

Image 저장 매체의 내부 구조와 컨텐츠들을 포함하는 단일 파일 이며, 파일 시스템과 동일한 형태를 띄고 있습니다. 일반적으로 OS 인스턴스(혹은 스냅 ) 배포하기 위한 형태로 많이 사용되고 있습니다.

* 스냅 샷은 현재 실행되는 디스크 상태 그대로, 새로운 이미지를 만든 것을 이야기 합니다.

 

다시 Clance 대해 이야기 하겠습니다.

  • Glance-api 이용해서 이미지의 검색, 복구, 저장과 같은 요청을 처리할 있습니다.
  • 스토리지를 
  • The storage registry glance-registry processes and retrieves metadata about images.
  • 그리고 이미지의 메타데이터를 저장하는 데이터베이스가 있습니다.
  • 또한, Replication Server 모든 클러스터들에 대해서 지속적이고 유효한 검사와 업데이트를 제공하기 위해서 동작합니다.

 

Keystone - Identity

  • Keystone 인증과, 단일 지점에 대한 정책 설정을 API 통해 처리 있습니다.
  • 모든 Keystone 관련 함수들은 백엔드에서 접근할 있으며, 특별한 서비스를 다른 방식으로 사용 있도록 허용합니다. 그리고 일반 사용자에게 LDAP SQL 그리고 KVS(Key-Value Stores) 제공합니다.

 

Quantum - Network

  • Quantum-server API 요청과 플러그인에 대한 연결을 지원합니다.
  • 플러그인과 에이전트는 네트워크 서브넷, IP 주소를 생성하고 포트를 열거나 닫는 역활을 수행 합니다.
  • 또한, Quantum-server 여러 에이전트의 정보들을 메시지큐에 담아 전달합니다.
  • 특정 플러그인에 대한 네트워크 상태를 저장하는 데이터베이스가 존재합니다.

 

                                                   


 

Cinder - Block Storage

  • Cinder API 볼륨의 타입이나 스넵샷의 변경을 허용해줍니다. cinder-api 요청을 받아들이고 cinder-volume에게 보내어 동작합니다.
  • cinder-volume cinder 데이터베이스에 상태를 지속적으로 기록하며, 메시지 큐를 통해 다른 프로세스와 통신할 있습니다. 그리고 블럭 스토리지에 직접적으로 하드웨어나 소프트웨어를 제공합니다.
  • cinder-scheduler 새로운 볼륨을 만들기 위해서 최적의 블럭 스토리지 노드를 선택합니다.
  • 메시지 큐를 이용해서 Cinder 프로세스간의 통신을 있습니다.
  • 데이터베이스는 볼륨의 상태를 저장합니다.

 

 



 

위의 그림은 보다 상세한 구조를 그려주고 있습니다. 복잡하게 서로간의 관계를 표시해 주고 있지만, 이것조차 주요 내용들만 표시되고 있습니다.

 

여기까지 OpenStack 주요서비스에 대해서 간략하게 알아보았습니다.

 

아직 OpenStack 계속 발전해가고 있습니다. 여기서 소개되지 않은 DNS 관련 서비스인 Moniker 같은 것은 릴리즈를 앞두고 있으며, 기타 작은 서비스들도 많이 존재하고 있습니다.

 

여기서 다룬 보다 상세한 내용을 보고 싶다면, OpenStack Doumention 참조 하는게 좋을 같네요.

 

추가로, 해당 내용들은 번역이 부실할수 있으므로 가능하면 원문을 보시는 것을 추천합니다 ^^;

gyeoung kim님이 11th February 2013에 게시

  

 

출처: <http://ihavekeyboard.blogspot.kr/2013/02/openstack-overview.html