본문 바로가기

교육/Advanced 과정

오픈스택(OpenStack) 2편 컴포넌트 알아보기

오픈스택 OpenStack 컴포넌트의 이해

 

오픈스택 컴포넌트

오픈스택(OpenStack)은 주요 기능이 각각 독립된 하부 컴포넌트로 나뉘어 개발되고 있습니다. 컴포넌트는 코어 컴포넌트옵셔널 컴포넌트로 크게 두가지로 분류됩니다.

오픈스택 컴포넌트 종류

코어 컴포넌트의 종류로는 Nova, Neutron, Swift, Cinder, Keystone, Glance 등이 있고, 옵셔널 컴포넌트 종류로는 Horizon, Heat, Ceilometer 등이 있습니다.  컴퓨팅 리소스인 VM 인스터스의 생성, 삭제, 관리를 담당하는 Nova, 그리고 네트워크 연결을 제공하는 Neutron이 있습니다. 스토리지 컴포넌트를 보게 되면 오브젝트 스토리지 서비스를 제공하는 Swift, Block 스토리지를 제공하는 Cinder가 있구요. VM을 생성할 때에 OS 이미지를 보유하는 Glance, 각각의 컴포넌트들에 대해서 인증 관리를 하는 Keyston이 있습니다. 옵셔널 하게 배포 관리를 위한 Heat, GUI 기반 통합 제어를 제공하는 Horizon 등이 대표적인 주요 컴포넌트라고 할 수 있겠습니다.

 

오픈스택 컴포넌트 - Compute

오픈스택 컴포넌트 - Compute Nova

오픈스택(OpenStack) 컴포넌트 중에 가장 먼저 설명드릴 것은 Compute 서비스 Nova 입니다. Nova는 kt cloud 에서 가장 핵심적으로 제공하는 서비스인 IaaS 와 같이 Computing 자원을 제공하는 서비스입니다. Nova는 실제 물리적인 Host 시스템 위에서 작동하는 VM 들을 관리하는 역할을 수행하죠. 실제로는 Nova-api, Scheduler, Compute, Conductor 등 다양한 요소들이 존재하게 됩니다. 그 중 Nova scheduler는 어떤 VM을 만들 때 어떠한 실제 물리 서버가 적절한지 공간적인 스케쥴링을 해 주는 요소 입니다. 그래서 실제 VM을 생성할 물리 장비가 지정된다면 Nova compute 와 같은 요소를 사용해서 VM을 생성하게 되죠. Nova compute 는 Hypervisor를 이용하여 VM  인스턴스를 생성하고 삭제합니다. kt cloud의 경우  KVM 과 같은 Hypervisor를 사용합니다. KVM은  리눅스 OS 위에 탑재가 되어있고, Hypervisor에서 제공하는 libvirt 라는 라이브러리를 이용하여 제어할 수 있습니다. 그리고 각 VM 에 대해서 각각의 상태를 관리할 필요가 있는데요. Nova Conductor 라는 중간에서 데이터 베이스를 관리하는 별도의 모듈을 두고 있구요.  이 모듈에서 VM 인스턴스에 대한 정보들을 데이터 베이스화 하여 관리하고 있습니다. 그림을 보시면 Nova 에 대한 동작을 할 떄 중간에 que가 있는 것을 확인하실 수 있습니다.  결국은 동시에  여러 개의 시스템이 Nova 를 사용하기 때문에 중간에 que 와 같은 완충장치를 둬서 
동시사용에 대응가능한 구조를 가지고 있습니다. 뒤에 나올 오픈스택(Openstack) 컴포넌트들에서도 보실 수 있지만 계속해서 API나 que를 이용해서 여러 개의 동시작업을 수행하는데 최적화된 아키텍처를 확인하실 수 있습니다. 

 

오픈스택 컴포넌트 - 네트워크 서비스

오픈스택 컴포넌트 - 네트워크 서비스 Neutron

다음은 네트워크 서비스 Neutron입니다. Neutron은 논리적인 인프라와 물리적인 네트워크 인프라를 모두 관리합니다.
물리적으로 연결된 하나의 선에서 여러 개의 네트워크로 논리적으로 분리 또는 여러 개의 물리적 네트워크를 논리적으로 하나의 네트워크로 묶는 것이 가능합니다. 이 때문에 Cloud에서 Tenant 라고 하는 각 고객별로 독립적인 환경을 제공할 수 있는 기반을 마련해주는 거죠.  오픈스택(OpenStack)에서 방화벽을 제공하지만 일반적인 보안 방화벽과는 다릅니다. 일반적으로 사회 정보 보안의 방화벽은 세션을 관리할 수 있는 방화벽이고, Stateless 방화벽 같은 경우는 네트워크를 개념적으로 분리하는데에 효과적으로 사용할 수 있습니다. Neutron 의 구성 요소는 사실 Third Party Plugin 에 상당히 많이 의존하고 있다고 보시면 되겠습니다. Linux 에서 제공하는 Linux bridge 라든지 Ovs 같은 기술을 활용하여, NW를 생성하고 IP주소를 할당합니다. 

오픈스택 컴포넌트 - 스토리지 서비스

다음은 Storage 서비스에 대해 알아볼텐데요.이에 앞서서 Storage 종류에 대해 한번 살펴 보면 좋을 것 같습니다. Storage는 File, Block, Object Storage 등이 있는데요. File Storage와 같은 경우는 대부분 컴퓨터에서 사용하는 스토리지를 말합니다. File과 Directory 같이 계층적 구조로 데이터를 보관하는데요. 그러다보니 수행자의 입장에서는 이용하기 쉽지만 문제는 계층화되어있다보니 파일시스템의 확장성에서 이슈가 있을 수 있습니다. Block Storage는 데이터를 별도의 조각으로 분리해 저장하고 이에 대한 Index 를 중앙에서 관리하는 방식인데요. 데이터를 분리하여 저장하기 때문에 파일 저장에 대한 효율성이 올라가지만 분산해서 저장하는 만큼 어플리케이션 레벨에서 분산된 파일들을 하나로 묶어주는 개발이 필요할 수가 있습니다. 실제로 Cinder 같은 경우에는 VM 내부에서 VM 에 Add 되는 하드디스크처럼 가상머신의 확장의 Storage개념으로 사용할 수가 있습니다. 

오픈스택 컴포넌트 - 오브젝트 스토리지 서비스

오픈스택 컴포넌트 - 오브젝트 스토리지 서비스 Swift

 오브젝트 스토리지 서비스 Swift 는 확장성과 용장성이 있는 시스템입니다. Key를 이용해 데이터를 검색하고 저장하게 됩니다. 오브젝트는 파일이든 미디어든 문서든 다양한 형식으로 지원이 되게 됩니다. 오브젝트와 파일들은 데이터 센터를 중심으로 널리 퍼져있는 서버의 디스크 드라이브에 적재가 되게 되구요, 오픈스택에서 제공하는 소프트웨어는 클러스터 간의 데이터 복제와 무결성을 보장하게 됩니다. 오브젝트 형식은 테이터 단위가 정해져있지 않기 때문에 구조화되지 않은 많은 양의 데이터를 관리할 때  편리하죠.

 

오픈스택 컴포넌트 - 이미지 서비스


오픈스택 컴포넌트 - 이미지 서비스 Glance

 VM 위에도 OS 가 올라가서 우리가 사용할 수 있는 컴퓨팅 환경을 제공해야 하는데요. 이러한 VM 이미지를 찾고 가져오도록 하는 서비스가 바로 Glance 입니다. Storage에 다양한 포맷의 파일로 VM 이미지를 저장하게 되고 VM 생성시 이 파일을 기반으로 VM 을 생성할 수 있습니다. 이미지 서비스 Glance API가 제공하는 표준 Rest 인터페이스는 디스크 이미지에 대한 쿼리 정보를 포함하고 있어서 클라이언트는 새로운 서버로 이미지를 스트리밍 할 수 있습니다. API 를 통해 스토리지 저장소에서 VM 이미지를 꺼내와 VM 생성이 가능한 방식입니다. 

 

Identity 서비스 Keystone

Keystone은 오픈스택을 통해서 사용자들을 역할 기반으로 접근제어하는데에 사용되는 컴포넌트입니다.
Keystone은 인증서와 토큰을 이용하여 오픈스택(Openstack) 전체 컴포넌트들에 대한 인증을 수행해주는 역할을 하구요. 여기서 토큰은 오픈스택(Openstack)의 각 리소스에 접근하는데 사용되는 데이터로써, 발급 주체는 keystone이 되고 토큰에 어떤 자원에 접근할 수 있지 범위가 지정되어 있으며 그 기간 또한 유효하게 설정되어 있습니다.따라서 오픈스택(Openstack)에서는 사용자가 있을거구요. 사용자는 오픈스택(Openstack)을 호출하는 실제 사람이 될 수도 있고, 혹은 다른 서비스가 될 수도 있습니다. 사용자는 프로젝트라고 하는 그룹에 할당된다고 보시면 됩니다. 그리고 사용자는 역할을 가지게 되는데요 사용자가 수행할 수 있는 동작이 별도로 정의가 되어있구요. 반대편에는 서비스를 이용하기 위한 네트워크 주소들을 가지고 있습니다. 
결국 ID와 URL 그리고 이 사이에서 특정 기간동안 생성이 되는 토큰이라는 것을 이용해서 접속할 대상과 접속을 원하는 주체와 인증 키 이 세가지 쌍을 통해서 인증을 수행하게 됩니다.

 

이외에도 오픈스택(Openstack) 컴포넌트에는 데이터 처리 서비스, 메시지 서비스, 데이터 베이스 서비스, 어플리케이션 관리 서비스 등등 이 있습니다. 여러가지 기능을 확장하기 위해서 각각의 모듈들을 설치해서 오픈스택(Openstack)에서 제공하는 기능을 확장할 수 있는 유연한 구조의 아키텍처를 가진 플랫폼이라고 생각해주시면 좋겠습니다.