오픈스택의 아키텍처는 모듈식이며, 각 컴포넌트는 서로 독립적으로 작동하면서도 API를 통해 상호 연동됩니다. 오픈스택 컴포넌트 간의 통합은 RESTful API를 통해 이루어집니다. 이 API들은 사용자와 서비스 간의 상호작용을 가능하게 하며, 사용자는 이를 통해 클라우드 리소스를 관리하고 조작할 수 있습니다. 또한, 오픈스택은 다양한 서드 파티 도구와 서비스와의 통합을 지원하여, 클라우드 인프라의 기능을 확장하고 사용자 경험을 향상시킵니다.
오픈스택(OpenStack)의 노드(물리적 구성)
○ 컨트롤러 노드
오픈스택 환경의 구성을 관리합니다. REST API를 사용하여 모든 시스템 및 서비스와 통신합니다.
○ 컴퓨트 노드
인스턴스가 실제 동작하는 시스템입니다. 하이퍼바이저를 통해 가상머신을 실행 및 관리합니다. 갯수가 많거나 성능이 좋으면 가상머신을 많이 만들거나 고성능으로 만들어서 사용할 수 있습니다.
○ 네트워크 노드
네트워크 구성/관리 기능을 제공해줍니다. 구성한 인스턴스 서비스를 외부의 누군가에게 연결해주어야 합니다.
○ 스토리지 노드
오픈스택 환경에서 사용할 스토리지를 제공해줍니다. 데이터 관리가 목적이고, 블록 스토리지, 오브젝트 스토리지, 파일기반 스토리지 등의 종류로 나뉘어 각 종류 별로 별도로 구성할 수 있습니다.
○ HCI(Hyperconverged Infrastruture)
계산 노드와 스토리지 노드의 결합한 형태입니다. 동일한 시스템에 구성함으로써 IO 속도가 향상됩니다.
하지만, 주의해야할 점은 스토리지와 계산 노드가 사용하는 리소스를 명확하게 구분해 설정해줘야 합니다.
오픈스택(OpenStack)의 구성요소
코어 구성요소로는 Nova, Neutron, Glance, Cinder, Swift, Keystone이 있다.
Compute (프로젝트 : Nova) AWS의 EC2 그리고 GCP의 Compute Engine과 비슷한 서비스입니다. Cloud compute service로서 OpenStack에서 가장 핵심적인 프로젝트로 가상머신(VM)을 생성, 실행, 중지, 삭제 등 관리할 수 있는 기능을 제공하고, 다양한 하이퍼바이저 기술(KVM, Xen 등)과의 연동을 지원합니다. 사용자의 요청에 따라 컴퓨팅 자원을 제공하고 관리해줍니다.
Nova는 dashboard나 커맨드 라인 명령어가 호출하는 nova-api로부터 시작한다. nova-api는 Queue를 통해 nova-compute에 인스턴스를 생성하라는 명령어를 전달하고, 인스턴스 생성 명령어를 전달받은 nova-compute는 하이퍼바이저 라이브러리를 통해 하이퍼바이저에게 인스턴스를 생성하라는 명령어를 다시 전달한다. 그때 하이퍼바이저는 인스턴스를 생성한다. 생성된 인스턴스는 nova-console을 통해 사용자가 접근할 수 있게 된다.
Networking (프로젝트 : Neutron) 소프트웨어 기반의 네트워킹 서비스를 제공합니다. 네트워크의 생성/변경/삭제에 대한 네트워크 인프라의 구성 및 관리 API를 제공하며 플러그인을 통해 controller를 작동시켜 네트워크에 접속합니다. 가상 머신 간의 네트워킹, 외부 네트워크에 대한 접근, 네트워크 서비스(로드 밸런싱, 방화벽 등)의 제공을 지원합니다. AWS의 VPC 그리고 GCP의 Cloud virtual network와 비슷한 서비스입니다.
Neutron API를 이용하여 Neutron 서버로 IP 할당을 요청합니다. Neutron 서버는 들어온 요청을 Queue로 다시 요청합니다. Queue는 Neutron 에이전트와 플러그인으로 IP 할당 지시를 내립니다. Neutron 에이전트와 플러그인은 지시받은 작업을 데이터베이스에 저장합니다. Neutron 에이전트는 네트워크 프로바이더에게 작업을 지시합니다. 그리고, 수시로 작업 상태를 데이터베이스에 업데이트합니다. 할당된 IP를 인스턴스에서 사용할 수 있습니다.
Load-Balancer (프로젝트 : Octavia)
Glance (Image) 다양한 하이퍼바이저에서 사용할 수 있는 가상머신 이미지를 관리(저장/등록/관리/전달)합니다. Nova에서 생성된 가상머신은 Glance를 통해 가상머신 이미지를 제공받고 관리합니다. AWS의 AMI 그리고 GCP의 Boot disk와 비슷한 서비스입니다.
Glance 사용자들은 glance-aip를 통해 이미지를 등록, 삭제 및 관리를 할 수 있다. Glace- api는 glance-registry와 glance-database에서 이미지가 관리된다. 이미지를 등록할 때는 glance-registry를 통해 glance-database에 저장이 된다. 등록된 이미지를 바로 사용할 때는 glance-databas에 직접 요청하여 사용한다.
Swift (Cloude Storage Service) OpenStack의 Object 저장소로 대용량 비정형 데이터를 저장할 수 있는 높은 확장성을 가진 서비스입니다. 데이터는 RESTful API를 통해 접근 가능한 객체로 저장됩니다. (데이터에 unique ID를 부여하고 고 컨테이너(버킷)에 저장하여 필요할때 ID를 통해 데이터를 호출하는 서비스입니다.) 고가용성을 보장하기 위해 데이터를 여러 위치에 자동으로 복제하며, 대규모의 데이터 저장 요구사항을 충족시킵니다. AWS의 S3 그리고 GCP의 Cloud Storage와 비슷한 서비스입니다.
swift-proxy는 account, container, object를 관리한다. account, container는 DB를 담당하고 Object는 저장공간에 직접 저장되는 방식으로 설계되어 있다. account(사용자 계정 관리), container(저장 공간의 단위, 버킷), object(데이터)
Keystone (Identity Service) Keystone은 오픈스택의 인증 및 권한 부여 서비스로, 사용자와 서비스 간의 인증을 관리합니다. 사용자 인증, 서비스 카탈로그 관리, 정책 기반의 권한 부여 등을 제공하여, 클라우드 인프라 내의 보안을 강화합니다. Keystone은 다양한 인증 메커니즘을 지원하며, 클라우드 리소스 접근 제어의 중심 역할을 합니다.https://velog.io/@baeyuna97/OpenStack-%EC%9D%B4%EB%9E%80OpenStack 클라이언트는 다양한 API를 호출하기때문에토큰을 부여하여 관리합니다. AWS, GCP의 IAM과 비슷한 서비스입니다.
Horizon (Dashboard) Horizon은 오픈스택의 웹 기반 대시보드로, 사용자가 클라우드 리소스를 시각적으로 관리할 수 있게 해줍니다. 직관적인 사용자 인터페이스를 통해 가상 머신 생성, 네트워킹 구성, 스토리지 관리 등의 작업을 손쉽게 수행할 수 있으며, 클라우드 환경의 전반적인 모니터링과 관리를 지원합니다.
Cinder (Block Storage) 영구적인 데이터 저장을 위한 블록 스토리지로 Nova에서 생성된 인스턴스에 확장하여 사용할 수 있는 저장공간을 생성 및 삭제하고 인스턴스에 연결하는 기능을 제공합니다. 즉, 가상 머신에 사용되는 볼륨 관리를 담당하며, 데이터베이스, 파일 시스템, 애플리케이션에 필요한 지속적인 스토리지 솔루션을 제공합니다. Cinder는 다양한 백엔드 스토리지 기술을 지원하며, 스냅샷 및 볼륨 복제와 같은 고급 기능을 제공합니다. AWS의 EBS 그리고 GCP의 Persistent Disk와 비슷한 서비스입니다.
Cinder API를 통해 볼륨을 추가 및 삭제할 수 있다. Cinder-volume은 volume을 실제로 생성하고 데이터베이스에 volume정보를 업데이트합니다. Cinder는 물리 하드 디스크를 LVM(Logical Volume Manager)으로 설정합니다. 설정한 LVM은 cinder.conf와 nova.conf의 환경설정을 통하여 volume을 할당할 수 있습니다. cinder API를 통해 생성된 volume은 단일 인스턴스 또는 여러 인스턴스에 할당할 수 있습니다.
Heat (Orchestration) Heat Orchestration Template(HOT)을 사용하여 클라우드 자원을 생성하고 관리합니다. AWS의 ECS(Elastic Container Service)와 GCP의 GKE(Google Kubernetes Engine)과 비슷한 서비스입니다. https://velog.io/@baeyuna97/OpenStack-%EC%9D%B4%EB%9E%80
사용자는 API를 직접 호출하여 오케스트레이션 서비스를 요청하거나 CLI(Command Line Interface)를 통해 동일한 작업을 수행할 수 있습니다. 이때 CLI 역시 사용자 명령을 API로 변환하여 처리하게 됩니다. 수신된 API 서버는 AMQP(Advanced Message Queueing Protocol) 규격 기반의 메시지 통신을 통해 Heat Engine으로 이를 전달합니다. Heat Engine은 수신한 템플릿과 API의 파라미터에 포함된 사용자 요청 데이터를 기반으로 인프라 및 클라우드 애플리케이션을 생성하기 위하여 Nova API, Neutron API 등과 같은 오픈스택 프로젝트들의 API를 호출합니다.
Ceilometer (Monitoring Service) OpenStack 서비스와 관련된 측정 데이터를 효과적으로 수집하고 서비스로부터 전송되는 알림을 모니터링합니다. AWS의 cloudwatch 그리고 GCP의 Stack Driver와 비슷한 서비스입니다.
오픈스택(OpenStack)의 논리적 구조
1. 모듈식 설계
오픈스택은 모듈식 설계를 기반으로 합니다. 이는 오픈스택이 다양한 컴포넌트(Nova, Swift, Cinder 등)로 구성되어 있으며, 이들 컴포넌트는 독립적으로 개발되고 관리됩니다. 사용자는 필요에 따라 특정 컴포넌트를 선택하여 설치하고, 자신의 클라우드 환경에 맞게 구성할 수 있습니다. 이러한 모듈식 접근 방식은 오픈스택을 매우 유연하고 확장 가능한 클라우드 컴퓨팅 플랫폼으로 만듭니다.
2. 컴포넌트 간 상호 작용
오픈스택의 컴포넌트들은 RESTful API를 통해 상호 작용합니다. 이 API는 표준화된 방식으로 컴포넌트 간의 통신을 가능하게 하며, 사용자가 클라우드 리소스를 프로그래매틱하게 관리할 수 있도록 지원합니다. 예를 들어, Nova(컴퓨트 서비스)는 Glance(이미지 서비스)의 API를 사용하여 가상 머신을 생성할 때 필요한 이미지를 검색하고 사용합니다.
3. 확장성 및 고가용성
오픈스택의 아키텍처는 확장성과 고가용성을 고려하여 설계되었습니다. 분산 아키텍처를 통해 오픈스택은 클라우드 리소스를 여러 물리적 노드에 걸쳐 관리할 수 있으며, 이는 시스템의 부하 분산과 장애 복구를 용이하게 합니다. 또한, 오픈스택은 컴포넌트의 중복 배치를 통해 단일 실패 지점을 제거하고, 클라우드 인프라의 가용성을 향상시킵니다.
4. 인터페이스와 대시보드
오픈스택은 사용자가 클라우드 리소스를 쉽게 관리할 수 있도록 다양한 인터페이스를 제공합니다. Horizon(웹 기반 대시보드)을 통해 사용자는 웹 브라우저를 통해 리소스를 시각적으로 관리할 수 있습니다. 또한, CLI(명령줄 인터페이스)와 SDK(소프트웨어 개발 키트)를 통해 고급 사용자와 개발자는 스크립트나 애플리케이션을 사용하여 클라우드 인프라를 자동화하고 관리할 수 있습니다.