OpenStack

클라우드 운영체제(OS), 오픈스택이란?

오픈스택은 IaaS 형태의 클라우드 컴퓨팅 오픈 소스프로젝트로 2012년 창설된 비영리 단체인 OpenStack Foundation에서 유지, 관리하고 아파치 라이선스 2.0하에 배포되고 있습니다.



<그림 1> 오픈스택 소프트웨어 구성도 (* 출처: OpenStack.org)

공식적으로 ‘클라우드 운영체제(Cloud OS)’ 라 불리는 오픈스택은 크게 다음과 같이 5개의 서비스 프로젝트들로 구성되어 있습니다.

 

<표 2> 오픈스택 서비스 구성

프로젝트 명 서비스 내용
Nova Compute Service
클라우드 IaaS (Infrastructure as a Service) 구축에 필요한 가상 컴퓨트 인스턴스들을 제어하고 관리하기 위한 서비스로, 오픈스택에서 가장 중요한 프로젝트.
AWS의 EC2와 호환된 API를 제공합니다.
Swift Storage Service
블락 스토리지(Block Storage)가 아닌 오브젝트 스토리지(Object Storage) 환경을 구축하고 관리하기 위한 서비스로, 오픈스택과 별개로 독립적 구축이 가능함.
AWS의 S3의 기능과 유사합니다.
Glance Imaging Service
가상 머신 이미지들을 저장/등록/관리/전달하기 위한 서비스로 Nova 와 스토리지 간 중계 역할을 담당.
RAW, QCOW, VMDK, VHD, ISO, OVF, AMI/AKI 이미지를 지원합니다.
Keystone 인증(Identity) 서비스
통합 인증 시스템으로 오픈스택 서비스들을 위한 ID 제공.
SQL, PAM, LDAP 등에 대한 backends를 제공합니다.
Horizon Administrative Web-Interface(UI) Service
오픈스택을 기반으로 구현된 서비스들을 관리자나 사용자가 제어하기 위한 웹 인터페이스 제공합니다.
Cinder Volume Service
오픈스택 인스턴스에서 Persistent Block 단위의 디바이스를 제공합니다.
AWS의 EBS와 유사한 서비스 입니다.
Heat Orchestration
템플릿 형태의 클라우드 자동화를 위한 인터페이스를 제공 합니다.
아마존 AWS의 CloudFormation과 유사항 기능을 제공합니다.
Ceilometer Telemetry
하이퍼바이저 레벨의 SMS정보와 같은 인스턴스 사용율에 대한 정보를 수집 및 제공합니다.
Neutron Networking
Software Defined Networking(SDN)의 프레임을 제공합니다.
오픈스택에서의 인스턴스 네트워킹을 위한 서비스 입니다.

앞서 <표2>에서 언급한 서비스들은 다음 <그림 2>와 같이 연결되어 구성되게 됩니다.


<그림 2> 오픈스택 서비스 구성도

왜 오픈스택을 ‘클라우드 운영체제’ 라고 부르는 것일까요?

이를 좀 더 쉽게 이해하기 위해 오픈스택에서 가장 중요한 3가지 코어 프로젝트들인 Nova, Glance, Swift 서비스들을 다음과 같이 일반 서버 컴퓨터와 비교해 보았습니다.

<표 3> 오픈스택과 서버 컴퓨터 간 비교 분석

OS 구성 요소 담당 역할 오픈스택 서비스
Scheduler 서버의 자원 관리 Nova
Server Virtualization 서버의 가상 머신(VM) 관리 Glance
File System Object Filesystem으로 컨텐츠 저장 Swift
User API 사용자 어플리케이션 접근 관리 Nova, Glance, Swift

일반적으로 데이터센터 등에서 사용되는 서버를 활용하기 위해선 운영체제(OS)를 설치하여 사용하는데 그 운영체제(OS)에서 가장 중요한 부분이 바로 스케줄러와 사용자 API 라 할 수 있을 것 입니다. 운영체제는 기본적으로 해당 컴퓨터에서 실행되고 있는 모든 사용자 어플리케이션들이 자원 관리의 책임과 권한이 있는 스케줄러가 정의한 정책에 따라 공정하게 자원들을 접근할 수 있도록 관리하는 소프트웨어입니다.

클라우드 서비스를 구축하기 위한 실제 하드웨어 구성은 복잡하겠으나 클라우드 서비스를 사용하는 사용자(혹은 어플리케이션) 입장으로 보자면 하나의 커다란 서버 컴퓨터로 생각할 수 있고, 그러한 서버 컴퓨터를 동작시키기 위한 운영체제가 바로 오픈스택이라 보면 이해하는데 도움이 될 것 입니다.

먼저 운영체제(OS)의 가장 핵심인 스케줄러는 오픈스택에서 노바(Nova)가 담당하고 있습니다.



<그림 3> 노바(Nova) 동작 구성도 (* 출처: OpenStack.org)

위 <그림 3>에서 NOVA 라는 단어와 GLANCE 라는 단어를 지워버리면 ‘운영체제 개론’ 같은 교재에서 봤음직한 운영체제 내부 스케줄러의 그림이 떠오를 것 입니다.

오픈스택의 노바(Nova)는 <그림 3>와 같이 노바 볼륨(Volume)을 통해 스토리지 관리를, 노바 네트워크(Network)를 통해 네트워크 관리를, 노바 컴퓨트(Compute)를 통해 컴퓨트 인스턴스(Instance)들을 관리하고 있는 가장 핵심적인 프로젝트 입니다.

일반적으로 데이터센터에서 사용되는 서버 컴퓨터들은 하드웨어 자원을 100% 가까울 정도로 충분히 활용하기 위해서 VMWare 사의 vSphere 와 같은 서버 가상화 기술을 사용하고 있습니다. 이와 유사하게 오픈스택에서도 가상 머신 이미지들을 저장/등록/관리/전달하기 위한 서비스로 글랜스(Glance)가 사용되고 있습니다.

혹시 리눅스에서 사용되는 어플리케이션이 윈도우(MS Windows)에서 실행되지 않는 이유를 알고 계십니까? 이는 운영체제(OS)가 달라서가 아니라 파일이 실제로 저장되는 하드 디스크 메모리 주소 번지를 파일 단위로 관리하고 있는 소프트웨어인 파일 시스템(가령 NTFS 와 ext4)이 서로 다르기 때문입니다. 이렇듯 파일 시스템은 본래 운영체제와 별개로 독립적으로 사용될 수 있으며, 오픈스택의 스위프트(Swift) 역시 오픈스택의 노바(Nova)와 글랜스(Glance)와 함께 쓰일 수도 있고 별개로 독립적으로 구축될 수도 있는 오브젝트 스토리지(Object Storage) 서비스를 구현할 수도 있습니다.

마지막으로 운영체제가 제공하는 아주 중요한 서비스 중 한 가지가 바로 사용자 API (User API)를 제공하는 일 입니다. 예를 들어 여러분들이 MS Windows 용 어플리케이션을 개발한다고 해서 MS Windows 운영체제 내부를 알 필요는 없습니다. 여러분들은 단지 MS Windows 가 제공해주는 MFC 나 WIN32 API 와 같은 User API 만 알고 있으면 MS Windows 기반의 어떠한 어플리케이션이라도 구현이 가능합니다.

이와 마찬가지로 오픈스택 역시 클라우드 운영체제(Cloud OS)라는 이름에 걸맞게 오픈스택이 제공하는 모든 서비스들(Nova, Glance, Swift, Keystone, Horizon 등)은 각 서비스 별로 제공되는 User API를 통해 접근이 가능합니다. 이 점이 오픈스택의 가장 큰 장점이라 할 수 있을 것 입니다. 오픈스택은 퍼블릭 클라우드와 프라이빗 클라우드 서비스를 구축하기 위해 필요한 모든 소프트웨어를 제공하는데 그 목적이 있는 오픈 소스 프로젝트 입니다. 지금 이순간에도 보다 안정되고 효율적인 클라우드 서비스를 구현하기 위한 최신 기술들이 쏟아져 나오고 있습니다. 이 모든 기술들을 하나의 업체 혹은 몇몇 개발자들을 주축으로 오픈스택에 적용한다는 건 불가능에 가깝습니다. 다행히 오픈스택은 각 서비스 별로 User API를 제공하고 있으므로 누구나 손쉽게 목적에 맞도록 수정이 가능합니다.