오픈 스택이란?
오픈 스택이란 오픈 소스 기반의 클라우드 컴퓨팅 플랫폼이다. 주로, IaaS(인프라 서비스) 환경을 구축하는데 사용되며, 기업에서는 데이터 센터 같은 물리적 인프라를 가상화해서 프라이빗 클라우드, 퍼블릭 클라우드, 하이브리드 클라우드를 구성할 수 있게 해준다.
주요 특징
- 오픈 소스
- Apache 2.0 라이선스를 사용하고 있어서 누구나 코드에 접근 가능하고 수정 및 배포가 가능하다.
- 모듈형 아키텍처
- 여러 개의 독립적인 모듈로 구성되어 있으며 필요한 모듈만 사용해서 클라우드 환경을 구축할 수 있다.
- API 기반 관리
- API를 통해서 각 모듈이 상호 작용하기 때문에 관리 및 자동화 환경에 적합하다.
오픈 스택 아키텍처
오픈 스택의 각 모듈을 컴포넌트라고 부르며 다음과 같은 컴포넌트가 존재한다.
- Nova: 가상 머신 (VM) 등의 컴퓨팅 자원을 관리하는 서비스
- Neutron: 네트워크 자원을 구성하고 관리하는 서비스
- Cinder: 블록 스토리지를 제공한다.
- Swift: 오브젝트 스토리지를 제공한다.
- Glance: 운영체제 이미지 관리
- Keystone: 인증과 권한 관리
- Horizon: 웹 기반 대시보드로, 관리자와 사용자가 오픈스택 자원을 쉽게 관리할 수 있도록 도와준다.
오픈 스택 동작방식
오픈 스택의 각 모듈간의 통신이 이뤄지는 분산 환경이다. 안정적이며 효율적인 통신이 필수적인데 이런 통신을 하기 위해서 각 모듈을 RPC(remote procedure call) 통신을 사용해서 비동기적으로 처리된다. RPC 통신을 통해서 비동기 통신을 통해 대규모 요청을 안정적으로 처리할 수 있으며 네트워크나 서비스 장애시에도 안정적으로 대응이 가능하고 모듈간 의존성을 낮추어 유지보수와 확장성도 쉽게 만들 수 있다.
오픈스택에서의 메시지 큐와 RPC의 흐름
- Nova → RPC 호출 → 메시지 큐(RabbitMQ)로 전송
- 메시지 큐는 Cinder에 메시지를 전달
- Cinder가 작업 수행 후 결과를 메시지 큐에 전달
- 메시지 큐는 Nova에 결과를 반환
오픈 스택 패키지 구조
오픈 스택은 nova, neutron, cinder 등 다양한 모듈(컴포넌트)를 사용해서 자원을 관리하는데 여러 오픈스택 서비스와의 통신을 위해 추상화된 인터페이스를 제공하고 자동 인증과 통합된 API 호출을 가능하게 해서 개발자가 복잡한 HTTP 요청을 편리하게 제공할 수 있도록 Openstack sdk라는 개발자를 위한 클라이언트 라이브러리를 지원한다.
openstack sdk
- 인스턴스 생성, 네트워크 설정, 볼륨 관리 등 다양한 openstack 리소스를 제어 가능하다.
- 다양한 openstack 서비스(nova, neutron, keystone 등)와 통합된 API 호출 지원
- 멀티 클라우드 환경 지원 (여러 openstack 클러스터에 연결 가능)
인스턴스 목록을 가져오는 샘플 코드
from openstack import connection
# OpenStack 인증 정보 설정
conn = connection.Connection(
auth_url='<http://openstack.example.com:5000/v3>',
project_name='my_project',
username='admin',
password='password',
user_domain_name='Default',
project_domain_name='Default'
)
# 인스턴스 목록 가져오기
for server in conn.compute.servers():
print(f"Name: {server.name}, Status: {server.status}")
osc-lib
osc-lib은 openstackclient의 확장 및 플러그인 개발을 위한 python 라이브러리이며 기본 명령어 집합만 제공하는 python-openstackclient에 확장하여 cli를 제공할 때 사용할 수 있다. 개발자가 타겟이기 보다는 운영하는 사람이나 사용자가 cli를 통해서 편리하게 관리할 때 사용된다.
python-openstackclient
통합 cli를 제공하며 명령어 옵션과 플러그인은 OSC-lib 프레임워크를 통해 확장 가능하다. 또한, 새로운 openstack 서비스가 추가될 때마다 해당 서비스의 CLI 플러그인을 설치해 명령어를 확장할 수 있다. 내부적으로는 openstack rest api를 호출하여 명령을 처리한다.
샘플 CLI
openstack server list # (Nova 인스턴스 목록 조회)
openstack network create net1 # (Neutron 네트워크 생성)
오픈 스택에 대한 개인적인 의견
클라우드 서비스를 제공하는데 VMWARE의 솔루션을 사용하는 경우도 많지만 24년도에 VMWARE 영구 라이센스를 종료하고 구독제 시스템으로 변경 후 솔루션 사용 비용이 몇 배는 늘어났기 때문에 오픈 스택이 더 각광 받지않을까라는 생각이 든다.
또한, 모듈 기반의 서비스를 제공하기 때문에 사용자 입장에서 필요한 모듈만 사용가능하고 API 기반의 관리가 가능하기 때문에 기업 입장에서도 상대적으로 유지보수가 용이하기 때문에 이전보다 더 수요가 많을 것으로 예상 된다. 그에 따라, 오픈 스택에 대한 전문적인 지식을 보유한 사람들도 늘어 날 것이고 클라우드 시장에 가장 중심적인 역할을 하지 않을까 싶다. 폐쇠적인 환경 보다는 오픈된 환경에서 개발 된다는 것을 기술적인 진보에 있어서 중요한 요소라고 생각된다.
댓글