[kt cloud CloudSW운영팀 김호균 님]
OpenStack 컴퓨팅 서비스 이해하기: 기초편
kt cloud는 네트워크, 스토리지, 컴퓨팅 자원 등을 제공하는 인프라 서비스(IaaS)를 제공하고 있습니다. 이러한 IaaS 서비스는 주로 OpenStack, CloudStack, XenServer, VMWare와 같은 다양한 플랫폼을 통해 제공됩니다. 그중에서도 OpenStack 플랫폼이 어떻게 컴퓨팅 자원(VM)을 제공하는지, Nova 서비스를 중심으로 알아보겠습니다.
What is NoVA?
OpenStack은 다양한 상호 연관된 프로젝트들을 통해서 클라우드 인프라 서비스를 제공해주는 오픈 소스 기반 소프트웨어 플랫폼 프로젝트입니다. Nova는 Keystone, Glance, Neutron, Placement와 같은 OpenStack의 다른 구성 요소와 상호작용하여 기본적인 기능을 제공합니다. Nova는 오픈스택에서 컴퓨팅 리소스를 관리하는 핵심 컴포넌트이며, 대표적으로 다음과 같은 기능을 제공합니다.
- 가상 머신(VM) 생성 및 관리
- 자원 스케줄링 및 할당
- 다양한 하이퍼바이저 지원
이제 OpenStack Nova의 아키텍처와 구성 요소에 대해서 간단히 알아보고, OpenStack의 GUI 서비스인 Horizon을 통해 가상 머신을 직접 생성해 보겠습니다.
Nova Architecture
Nova 아키텍처는 API 서버, 스케줄러, 컴퓨트 노드, Conductor, 메시지 큐 및 데이터베이스 등으로 구성되어 있습니다. 아래에서 각 구성 요소의 역할에 대해서 간단히 알아보겠습니다.
- nova-api
- 사용자 요청을 수신하고, RESTful 방식으로 API 요청을 처리
- 인스턴스 생성 및 삭제 등의 요청을 받으면, 메시지 큐를 통해 다른 Nova 컴포넌트에 전달
- nova-scheduler
- 가상 머신 인스턴스를 어느 컴퓨트 노드에 실행할지 결정하는 역할
- 호스트의 자원 상태 (CPU, 메모리 등)를 고려하여 인스턴스를 최적의 위치에 배치
- nova-compute
- 실제로 가상 머신 인스턴스를 생성하고 관리하는 역할
- 요청을 수신하고, 하이퍼바이저(KVM, QEMU, VMWare 등)와 상호작용하여 가상 머신을 생성하는 등의 작업 수행
- nova-conductor
- 컴퓨트 노드와 데이터베이스 간의 직접적인 통신을 중개하는 역할
- 보안 및 확장성 문제를 해결하기 위해 nova-compute가 직접 데이터베이스에 접근하지 않고, nova-conductor를 통해 요청을 처리
- message-queue
- RabbitMQ와 같은 메시지 큐를 사용하여 구성 요소 간에 메시지를 전달
- DB
- Nova의 모든 상태 정보가 저장되는 데이터베이스
Horizon을 통한 가상 머신 생성
OpenStack에서는 개발자나 운영자가 자원을 보다 쉽게 관리할 수 있도록 Horizon이라는 공식 웹 기반 대시보드를 제공합니다. 이 글에서는 Horizon의 GUI를 통해 가상 머신을 생성하는 과정을 살펴보고, 이때 Nova가 다른 OpenStack 컴포넌트들과 어떻게 상호작용하여 가상 머신을 생성하는지 알아보겠습니다.
Horizon 대시보드 접속
먼저 웹 브라우저를 통해 Horizon 대시보드에 접속하겠습니다. Horizon은 개발자가 CLI(Command Line Interface)를 사용하지 않고도 OpenStack 자원을 쉽게 관리할 수 있도록 도와주는 도구입니다. Horizon 서비스도 OpenStack의 주요 서비스 중 하나로, 사용자에게 직관적인 인터페이스를 제공하여 OpenStack의 다양한 기능을 손쉽게 활용할 수 있게 해줍니다.
로그인 후, 상단의 Project를 선택하여 작업을 시작합니다. OpenStack에서 인스턴스 관리는 프로젝트 단위로 수행됩니다. 저는 admin 프로젝트에서 가상 머신(인스턴스)을 생성해보겠습니다.
인스턴스 생성
좌측 상단의 Compute 메뉴에서 Instances를 클릭하고, Launch Instance를 클릭하여 인스턴스 생성 프로세스를 진행합니다.
기본 정보 설정
Instance Name 항목에 생성할 인스턴스의 이름을 입력합니다. Availability Zone에 사용 가능한 가용 영역을 지정하고, Count에 생성할 인스턴스 수를 입력합니다. 저는 Instance Name만 지정한 후, 나머지는 기본값으로 두겠습니다.
볼륨 설정
Select Boot Source 항목은 인스턴스가 부팅될 때 어떤 방식으로 OS를 로드할지를 결정하는 옵션입니다. 보통 아래와 같은 옵션을 제공합니다.
- Image: OpenStack의 이미지 서비스인 Glance에 저장된 OS 이미지 파일(Ubuntu, CentOS, Windows 등)로부터 인스턴스를 부팅하는 방법
- Volume: OpenStack의 블록 스토리지 서비스인 Cinder에서 제공하는 볼륨(가상 하드 디스크)을 사용하여 인스턴스를 부팅하는 방법
- Snapshot: 볼륨 또는 실행 중인 인스턴스의 상태를 스냅샷으로 저장한 후, 이 스냅샷을 기반으로 인스턴스를 부팅하는 방법
저는 Image 옵션을 선택하여 Glance에 미리 업로드된 rhel-8.10 이미지를 사용하여 인스턴스를 부팅하겠습니다.
인스턴스에서 사용할 디스크는 Cinder(블록 스토리지)나 Glance(이미지 스토리지)에서 제공됩니다. 기본적으로 루트 디스크는 Glance에서 선택한 이미지를 기반으로 하며, 추가적인 블록 스토리지 볼륨은 Cinder를 통해 연결됩니다.
- Glance: 이미지 서비스로, 가상 머신에서 사용할 이미지(ISO 파일, 스냅샷)를 저장하고 제공
- Cinder: 블록 스토리지 서비스로, VM에 연결할 영구적인 스토리지를 제공
하드웨어 리소스 설정
인스턴스의 하드웨어 사양을 정의하는 프로파일을 선택합니다. vCPU, RAM, 디스크 크기 등이 정의되어 있습니다. 필요에 맞는 Flavor를 선택합니다. 저는 미리 생성된 2vCore, 2GB RAM 사양의 2x2-test flavor를 선택하겠습니다.
Flavor는 인스턴스가 사용할 리소스의 사양을 정의하는 템플릿으로, nova-scheduler는 이를 기준으로 인스턴스를 배포할 적합한 호스트를 선택합니다.
네트워크 설정
인스턴스를 연결할 네트워크를 선택합니다. 이미 정의된 가상 네트워크가 있다면 해당 네트워크를 선택하면 됩니다. 필요하다면 여러 개의 네트워크 인터페이스를 추가할 수도 있습니다. 저는 테스트 용도로 생성된 네트워크를 선택하겠습니다.
네트워크는 OpenStack의 Neutron 서비스에서 관리됩니다. VM이 외부 네트워크와 통신할 수 있도록 네트워크 연결을 구성합니다.
- Neutron: 네트워크 구성과 관리, VM의 IP 주소 할당, 서브넷 및 라우터 설정 등을 담당하는 서비스
이 외에도 Security Groups, Key Pair, Configuration 등의 항목에서 생성할 인스턴스 설정을 더 세부적으로 구성할 수 있지만, 필수 항목은 아니므로 기본 값으로 두고 Launch Instance 버튼을 눌러 인스턴스 생성을 요청하겠습니다.
인스턴스 생성 확인
Horizon을 통해 인스턴스 생성을 요청하면 Instances 페이지에서 인스턴스의 상태를 확인할 수 있습니다. 제가 방금 구성한 인스턴스의 상태가 Active로 표시되어 정상적으로 생성되었음을 알 수 있습니다. 이 페이지에서 인스턴스의 IP 주소, 상태, 그리고 사용 중인 자원 등을 모니터링할 수 있습니다.
인스턴스 접속
동작 과정
위와 같이 Horizon에서 인스턴스 생성 요청을 하면, Nova 아키텍처는 내부적으로 아래와 같은 과정을 거쳐 가상 머신을 생성합니다.
- 사용자 요청 수신
- 사용자가 OpenStack 대시보드(Horizon) 또는 CLI를 통해 가상 머신 생성 요청을 보내면, nova-api가 요청을 수신합니다.
- 자원 할당 및 스케줄링
- nova-api는 요청을 메시지 큐에 추가하고, nova-scheduler가 이를 수신하여 적절한 컴퓨트 호스트를 선택합니다.
- 이 과정에서 Placement 서비스를 통해 가용 자원을 조회하고, 수용할 호스트를 선택합니다.
- 인스턴스 생성
- 선택된 컴퓨트 노드에서 nova-compute가 요청을 수신하고, 하이퍼바이저와 통신하여 가상 머신을 생성합니다.
- 이 과정에서 Glance 서비스에서 필요한 이미지 파일을 다운로드하고, Neutron을 통해 네트워크를 설정합니다.
- 데이터베이스 업데이트
- 가상 머신이 생성되면, nova-conductor는 생성된 인스턴스의 상태와 리소스 할당 정보를 DB에 업데이트합니다.
마무리
이와 같은 흐름으로 Nova는 다른 OpenStack 서비스들과 상호작용하며 컴퓨팅 서비스를 제공합니다. Glance는 가상 머신에서 사용할 이미지(운영 체제)를 제공하고, Neutron을 통해 가상 머신이 연결될 네트워크를 구성하며, Cinder는 블록 스토리지 볼륨을 연결합니다.
OpenStack은 이러한 모듈화된 서비스들의 협력을 통해 유연하고 확장 가능한 클라우드 인프라를 관리할 수 있게 합니다.
참고/출처
'Tech story > Cloud' 카테고리의 다른 글
gRPC로 시작하는 API 개발: 첫 번째 서버와 클라이언트 구현 (1) | 2024.10.31 |
---|---|
gRPC의 내부 구조 파헤치기(2): Channel & Stub (1) | 2024.10.31 |
ELK 스택 간단히 구축하기 (0) | 2024.10.29 |
gRPC의 내부 구조 파헤치기: HTTP/2, Protobuf 그리고 스트리밍 (3) | 2024.10.29 |
REST에서 gRPC로: 차세대 API 통신 방식 도입기 (1) | 2024.10.29 |