Guide to learning the OpenStack architecture

🗓️

작년 입사와 동시에 팀 대상으로 혼자 진행했던 스터디 및 세미나 자료를 다시 한번 정리하여 공개한다.

오픈스택 컴포넌트 전부

Component typeService typeService nameDescriptionetc..
ComputeInstanceNova인스턴스
ComputeResource managementPlacement가상화 리소스 관리allocate, pool
DeployOrchestrationHeat템플릿 기반 인스턴스 배포 서비스
BackupInstance BackupFreezer인스턴스 백업 및 스냅샷
HAInstance HAMasakari인스턴스 고가용성
StorageImage StorageGlance인스턴스 이미지 관리공유
StorageObject StorageSwift오브젝트 스토리지like S3
StorageBlock StorageCinder인스턴스 블록 스토리지 관리
StorageDistributed StorageCeph분산 스토리지 백엔드Cinder, Glance 백엔드
StorageShared File SystemManilaNAS 서비스NFS, CIFS
NetworkNetworkNeutron인스턴스 네트워크 제공 서비스
NetworkLBOctaviaLBaaS
DashboardBackoffice (user)Horizon오픈스택 관리 대시보드공유
AuthIdentityKeystone오픈스택 인증/인가 서비스공유
MeteringMonitoringCeilometer오픈스택 모니터링
MeteringMonitoringGnocchi오픈스택 모니터링
  • 메인 컴포넌트 : Nova, Glance, Swift, Cinder, Neutron, Horizon, Keystone
  • 유효한 컴포넌트 : Ceph, Manila, Octavia, Masakari, Heat, Freezer, Ceilometer, Gnocchi, Placement

오픈스택의 메인 컴포넌트 및 유효한 컴포넌트 리스트 정리

메인 컴포넌트

오픈스택이 작동하기 위해 꼭 필요한 필수 컴포넌트

Component typeService typeService nameDescriptionetc..
ComputeInstanceNova인스턴스
StorageImage StorageGlance인스턴스 이미지 관리공유
StorageObject StorageSwift오브젝트 스토리지like S3
StorageBlock StorageCinder인스턴스 블록 스토리지 관리
NetworkNetworkNeutron인스턴스 네트워크 제공 서비스
DashboardBackoffice (user)Horizon오픈스택 관리 대시보드공유
AuthIdentityKeystone오픈스택 인증/인가 서비스공유

Nova

  • 개념 : OpenStack Compute
  • 관리하는 리소스 : 인스턴스의 CPU, Memory, Disk 관리 및 인스턴스 생명주기
  • 기능 : 가상 인스턴스 생성, 스케줄링, 회수

Glance

  • 개념 : OpenStack Image Service
  • 관리하는 리소스 : 인스턴스를 생성할 때 사용되는 이미지를 제공
  • 기능 : 가상 머신 디스크 이미지, 가상 머신을 생성할 때 사용되는 이미지를 제공

Swift

  • 개념 : OpenStack Object Storage
  • 관리하는 리소스 : 객체 스토리지를 관리
  • 기능 : 오픈스택에 오브젝트 스토리지 제공

Cinder

  • 개념 : OpenStack Block Storage, Persistent Block Storage Project
  • 관리하는 리소스 : 블록 스토리지 볼륨을 생성, 연결, 분리하는 등의 기능을 제공
  • 기능 : 인스턴스에 블록 스토리지 제공

Neutron

  • 개념 : OpenStack Network
  • 관리하는 리소스 : 네트워크, 서브넷, 포트, 라우터 등을 생성하고 관리하여 가상 머신 간의 통신 관리
  • 기능 : 가상 머신 간 및 외부와의 네트워크 연결을 제공

Horizon

  • 개념 : OpenStack 대시보드
  • 기능 : 웹 기반 포털

Keystone

  • 개념 : Identity 서비스.
  • 관리하는 리소스 : 오픈스택 컴포넌트 인증/인가 리소스 관리
  • 기능 : 인증정보 관리와 각 리소스 인가 기능, 토큰 발급. endpoint 카탈로그 제공

유효한 컴포넌트

메인 컴포넌트 포함 +

Component typeService typeService nameDescriptionetc..
ComputeResource managementPlacement가상화 리소스 관리allocate, pool
DeployOrchestrationHeat템플릿 기반 인스턴스 배포 서비스
BackupInstance BackupFreezer인스턴스 백업 및 스냅샷
HAInstance HAMasakari인스턴스 고가용성
StorageDistributed StorageCeph분산 스토리지 백엔드Cinder, Glance 백엔드
StorageShared File SystemManilaNAS 서비스NFS, CIFS
NetworkLBOctaviaLBaaS
MeteringMonitoringCeilometer오픈스택 모니터링
MeteringMonitoringGnocchi오픈스택 모니터링

Placement 📌

  • 개념 : 가상화 리소스의 분배와 할당에 관련된 역할을 전담
  • 관리하는 리소스 : 인스턴스를 배치하기 위해 가용한 노드의 리소스를 관리.
  • 기능 : 호스트 및 노드에서의 가용한 리소스를 추적하고, 이 정보를 기반으로 가상 머신의 배치를 최적화.

Heat 📌

  • 개념 : 템플릿 기반 인스턴스 배포 서비스 (오케스트레이션)
  • 관리하는 리소스 : 오픈소스 인스턴스 템플릿
  • 기능 : 템플릿 기반의 오케스트레이션을 통해 가상 인프라 및 애플리케이션 스택을 관리

Freezer 📌

  • 개념 : 오픈스택 인스턴스 백업
  • 관리하는 리소스 : 인스턴스 백업 및 복원
  • 기능 : 오픈스택에서의 데이터 백업 및 복원 서비스를 제공. 가상 머신, 볼륨, 이미지 등 다양한 데이터 유형을 백업하고, 필요한 경우 이를 복원할 수 있는 기능을 제공

Masakari 📌

  • 개념 : 인스턴스 고가용성
  • 관리하는 리소스 : 가용성 관리
  • 기능 : 인스턴스의 가용성을 관리하고, 하이퍼바이저 레벨에서 발생하는 장애에 대한 자동 복구를 제공

Ceph

  • 개념 : 분산 스토리지
  • 관리하는 리소스 : 오픈스택 스토리지 서비스에 대한 백엔드
  • 기능 : 객체 스토리지, 블록 스토리지, 파일 시스템을 지원, Cinder, Swift, Manila의 백엔드

Manila 📌

  • 개념 : 오픈스택 파일 공유 서비스
  • 관리하는 리소스 : 파일 공유 (NAS)
  • 기능 : 인스턴스간 네트워크 파일 시스템 지원 CIFS, NFS 지원.

Octavia 📌

  • 개념 : 오픈스택 Load Balancer as a Service
  • 관리하는 기능 : 로드 밸런서
  • 기능 : 수평확장 가능한 로드 밸런서, 로드 밸런싱 서비스를 제공하여 트래픽을 여러 서버에 분산시키고 관리

Ceilometer 📌

  • 개념 : 오픈스택에서 발생하는 이벤트 및 텔레메트리 데이터를 수집, 저장, 및 검색하는 역할
  • 관리하는 리소스 : 인스턴스, 네트워크, 스토리지 등에서 발생하는 사용량 및 이벤트 수집
  • 기능 : 가상 머신 및 인프라 이벤트의 수집 (예: 가상 머신 시작, 정지, 네트워크 사용량 등), 보고서 생성

Gnocchi 📌

  • 개념 : Ceilometer에서 수집된 텔레메트리 데이터를 저장, 처리, 및 검색하는 서비스
  • 관리하는 리소스 : 메트릭 데이터
  • 기능 : 고성능, 확장 가능한 저장소 및 쿼리 엔진 제공, 데이터 압축 및 집계를 통한 저장 최적화, 간단하고 효율적인 데이터 검색 및 쿼리 지원

Ceilometer는 텔레메트리 데이터의 수집과 이벤트 관리를 담당하고,
Gnocchi는 수집된 데이터를 효율적으로 저장하고 조회할 수 있도록 하는 역할.

오픈스택의 메인 컴포넌트간 연결 관계 스터디

OpenStack Component Architecture

Architecture Guide Red Hat Enterprise Linux OpenStack Platform 7 | Red Hat Customer Portal

OpenStack 컴포넌트간 통신

  • RESTful API : 컴포넌트간 명령
  • AMQP (RabbitMQ) : 컴포넌트 내 RPC나 pub-sub 구조의 이벤트 발행이 필요한 경우

서비스 데이터베이스

  • RDB (MySQL) : 설정, 사용자 인증, 이벤트 정보

VM 생성 라이프사이클 스터디

Horizon

  1. REST API Horizon → Keystone
    Horizon에서 인증 요청을 하면 Keystone에서 인증과 인가 후 token을 발급합니다.
  2. REST API Horizon → Nova nova-api → Keystone
    nova-api로 요청한 호출에 대해 Keystone에 token 검사를 합니다.

Nova (compute)

  1. Database nova-api → Nova database
    새 인스턴스에 대한 정보를 데이터베이스에 저장 합니다.
  2. Message Queue nova-apinova-scheduler
    메시지 브로커를 통해 nova-scheduler로 새 인스턴스를 실행할 적절한 노드를 찾기 위해 RPC를 호출합니다.
  3. Message Queue nova_schedulernova_compute
    메시지 브로커를 통해 nova_compute로 새 인스턴스를 시작하도록 요청 합니다.
  4. Message Queue nova_computenova_conductor
    인스턴스 준비를 위해 nova_conductor에 RPC 호출을 합니다.
  5. Message Queue nova_conductor → Message Queue
    Flavor (인스턴스 생성 템플릿) 을 조회 한 후 새 인스턴스의 상태를 MQ로 게시 합니다.

Glance (Instance image)

  1. REST API nova_computeglance_api
    새 인스턴스 요청을 MQ로 부터 얻어 Flavor의 이미지를 Glance로 REST 요청합니다. 이때 Glance는 Keystone으로 token 검사를 합니다.
  2. REST API glance_apinova_compute
    이미지를 Database에서 검색하여 nova_compute로 전달 합니다.

Neutron (Network)

  1. REST API nova_computeneutron_server
    Glance 와 마찬가지로 새 인스턴스 요청에 대해 Neutron으로 REST 요청 합니다. 똑같이 Neutron은 Keystone으로 token 검사를 합니다.
  2. Database neutron_serverovn-nb
    새 인스턴스의 네트워크 정보를 데이터베이스에 추가합니다.
  3. Database ovn-northdovn-sb
    ovn-nb에 저장된 논리 구성을 데이터 경로 흐름으로 변환하여 ovn-sb에 다시 저장합니다.
  4. Database ovn-controllerovs-vswitchd, libvirtnova_compute
    ovn-sb로 부터 구성을 가져와 OpenFlow 컨트롤러로 연결합니다. 또한 libvirt에서 얻은 DHCP와 L2정보를 MQ에 반환합니다.
    반환한 정보는 nova_compute 가 받아서 인스턴스 데이터베이스에 정보를 추가합니다.

Cinder (Block device)

  1. REST API nova_computecinder_api
    Neutron과 마찬가지로 새 인스턴스에서 사용할 볼륨의 생성을 Cinder로 REST 요청 합니다. 똑같이 Cinder는 Keystone으로 token 검사를 합니다.
  2. Message Queue cinder_apicinder_scheduler
    새 인스턴스에서 사용할 볼륨을 생성하거나 찾기 위해 cinder_scheduler에 RPC 호출을 합니다.
  3. Message Queue cinder_schedulernova_scheduler
    메시지 브로커를 통해 nova_scheduler로 볼륨의 정보를 전달 합니다.
  4. nova_computelibvirt
    이제까지의 정보를 가지고 libvirt를 사용하여 인스턴스를 생성합니다.
  5. Message Queue cinder_volumelibvirt
    cinder_scheduler 에서 MQ로 전달한 볼륨 정보를 libvirt로 전달해 마운트 합니다.

🏷️