Nova

배병진·2023년 5월 2일
3

Openstack

목록 보기
2/6

Nova란?

  • Openstack Compute Service이며 IaaS 시스템의 핵심 서비스라고 하는데 무슨 소리냐

    클라우드 컴퓨팅 운영체제에서 리눅스 커널과 같은 역할을 하며, 오픈스택의 컨트롤러(운영,관리)의 역할을 하고 있다고 생각하면 된다. 간단하게 VM을 만드는 핵심 서비스(덩어리)라고 보면 된다.

Nova 특징

  • 특정 하드웨어나 소프트웨어에 얽매이지 않고 언제든지 그 규모를 수평적으로 확장 가능해야하며,

    레거시 시스템과 서드파티 기술과 통합이 가능하도록 설계됐다.

Nova 구성요소

  • nova-api

  • nova-compute

  • nova-scheduler

  • nova-conductor

  • nova-console

  • nava-consoleauth

  • nova-novncproxy

  • Message Queue

  • SQL Database

1. Nova api

  • 모든 API 요청에 대한 EndPoint 제공과 이에 대한 사용자 API 요청을 받아 수행

  • 여러 정책들을 실행하고 인스턴스 실행과 같은 실제 작업이 발생하도록 도움

  • 모든 API에 대한 요청이 Nova api 로 들어오다 보니 실무 중 인스턴스 생성이 안되는 현상이 발생할때 nova.api.log를 많이 본다.

2. Nova-compute

  • KVM이나 QEMU 등이 사용하는 libvirt와 같은 하이퍼 바이저 API를 통해서 가상머신을 생성하거나 중지하기위해 사용되는 데몬

  • 시스템 명령을 실행하며 DB에 그 상태에 대한 업데이트 수행

3. Nova-scheduler

  • 인스턴스 요청을 받으면 어느 컴퓨트 서버 호스트에서 이를 실행할지 결정하는 서비스

4. Nova-conductor

  • nova-compute와 DB사이에서 상호 연동을 중재하는 서비스

    즉, nova-compute가 DB에 직접 접속하는 것을 차단

5. Nova-console

  • 가상머신으로의 콘솔 접속을 제공하는 서비스

**6. Nova-consoleauth

**

  • 가상머신으로의 콘솔 접속 시 사용자에 대한 토큰 인증을 수행

7. nova-novncproxy

  • VNC를 통해 실행 중인 인스턴스에 접근 가능한 프록시 서비스를 제공

8. Message Queue

  • RabbitMQ와 같은 메시지 큐 서비스에 의해 실행된 데몬들 사이로 메시지가 통과될 수 있도록 허용하며

    서비스들의 중앙에 위치하여 각 서비스를 연결하는 허브와 같은 역할을 함

9. SQL Database

  • 전반적인 클라우드 인프라에 대한 서비스 시작 및 전체 실행 시간 등의 정보를 저장

  • 오픈스택에서 지원가능한 DB : Mariadb, MySql, PostgreSQL 등

10. nova-placement-api

  • 컴퓨트 노드, 공유 스토리지 풀, IP할당 풀처럼 인스턴스에 자원을 제공하는 서비스의 전체 자원과 사용량을 추적하기 위해 사용하는 서비스

Nova 서비스 동작 과정

  1. Nova-api 서비스는 대시보드를 통해 사용자의 인스턴스 생성 요청을 받고

  2. 요청을 메시지 큐 서비스를 통해 컴퓨트 노드에서 실행중인 nova-compute 서비스에게 전달한다.

  3. 전달 받은 nova-compute 서비스는 compute node에서 실행중인 하이퍼바이저에게 이를 전달한다.

  4. 전달 받은 하이퍼바이저는 미리 설정해놓은 네트워크 및 Flavor를 사용하여 인스턴스를 생성한다.

레거시 시스템

예전부터 사용돼 내려온 컴퓨터 기술, 새로운 기술로 대체 가능한 기존의 기술

첫 글에서 여러 서비스가 있지만 모든 서비스를 구성하지 않는 이유는 대체적 회사에서 여러 솔루션들이 도입되어있기에 사용할 필요가 없다고 생각이 든다.

KVM(Kenel-based Virtual machine)

  • 물리적 Linux 시스템에 설치하여 가상 머신을 생성할 수 있는 소프트웨어 기능

  • Linux 시스템을 베어 메탈 하이퍼바이저로 전환 가능하다 보니 다양한 운영체제에 맞추어 컴퓨팅 인프라 확장 가능

  • 그럼 Vmware랑 KVM의 차이가 없지 않냐 라는 질문이 있을 수 있다. 이런 질문에 대해서는 라이센스 비용이 발생차이라고 볼 수 있다. KVM은 오픈 소스로 구현이 가능하지만 Vmware는 상용 라이센스를 통해 제공하는 차이가 있다.

하이퍼 바이저

운영체제와 가상머신의 리소스를 분리하고, CPU, Memory, Storage 등의 리소스를 할당해주는 소프트웨어

하이퍼 바이저 종류

  • 베어 메탈(네이티브) 하이퍼바이저 : 호스트 운영체제 없이 하드웨어 상 하이퍼바이저가 바로 설치된 후 가상머신 구현

  • ex ) KVM, Xen

호스트 하이퍼바이저

  • 하드웨어 상에 호스트 운영체제가 있고 그 위에 가상머신 구현

ex ) Vmware Work Station, VirtualBox, QEMU

  • Emulation : 호스트 머신에 존재하지 않는 하드웨어 및 아키텍처를 가상 머신에게 제공하지만 Binary Translation을 수행하고 물리 장치의 동작을 소프트웨어로 동작시키기 때문에 상대적으로 느리다.

  • Simulation : 호스트 머신에 존재하는 하드웨어 및 아키텍처를 이용하여 가상머신에 제공하고 Binary Translation을 수행하지 않는다.

  • Binary Translation : 원본 명령어 집합에서 타겟 명령어 집합으로 변환하는 것

  • 보통 QEMU로 가상머신을 생성할 때, 호스트 머신과 같은 종류의 CPU라면 KVM옵션을 Enable하게 되면서 QEMU는 하드웨어를 가상화해주고 KVM은 커널 방식으로 반 가상화를 지원함으로 QEMU에서 동작하는 전 가상화에서 발생하는 성능 감소를 해주기때문에 QEMU와 KVM을 같이 설정해준다.

  • 전 가상화(Full Virtualization) : 가상 머신이 구동할 OS 또는 Device Driver에 특별한 수정을 하지 않고 그대로 사용할 수 있는 경우를 말하고 물리 환경에서 동작하는 운영체제와 장치의 드라이버들을 그대로 가상 머신에서 사용할 수 있도록 해주며 하이퍼 바이저가 모든 명령을 중재하게 되기 때문에 상대적으로 느리다.

  • 반 가상화(Para Virtualization) : 하드웨어를 완전히 가상화 하는 것이 아니라 전 가상화의 단점을 해소하기 위해 하이퍼 바이저가 모든 요청을 처리하는게 아니라 하이퍼 콜(Hyper Call) 이라는 인터페이스로 직접 하이퍼바이저에게 요청을 날릴 수 있게 해주는 것이다

● libvirt

  • Linux의 가상화를 위한 Linux API로 KVM을 포함한 다양한 하이퍼바이저뿐만 아니라 다른 운영체제를 위한 QEMU 및 일부 가상화 제품을 지원하는 API 이다.

  • 여러 가상화 소프트웨어를 동시에 사용할 때 불편하기에 여러 가상화 소프트웨어를 조작하기 위해서 libvirt API를 사용한다.

● RabbitMQ

  • 비동기 작업을 위해서 중간 Broker 라는 메시지 큐가 있는데 대표적으로 RabbitMQ, ActiveMQ, ZeroMQ, Kafaka가 있다.

  • 동기작업 : 하나의 코드가 끝나고 다른 코드가 실행이 된다

  • 비동기 작업 : 하나의 코드의 실행을 멈추지 않고 다음 코드를 먼저 실행하는 것이다.

  • AMQP(클라이언트가 메시지 미들웨어 브로커와 통신할 수 있게 해주는 메시징 프로토콜)를 구현한 메시지 브로커 시스템

브로커 구성(RabbitMQ 등)

1) Producers

2) Exchange -- Binding --> Queue

3) Consumers

브로커 동작 과정

1) Producer에서 Broker의 Exchange로 메시지 전달 시, Binding 규칙에 의해 연결된 Queue로 메시지 복사가 된다

2) 그 후 메시지를 받아가는 Consumer에서는 브로커의 Queue를 통해 메시지를 받아가서 처리한다.

Exchange와 Queue를 연결하는 Binding

모든 메시지는 Queue로 전달 되는 것이 아니라 반드시 Exchange에서 먼저 받아 Binding 규칙에 따라 Queue로 전달 된다.

Exchange 속성

Name : Exchange 이름

Type : 메시지 전달 방식

1) Direct Exchange : Routing key 기반으로 Queue에 메시지 전달

2) Fanout Exchange : Routing key에 관계없이 모든 Queue에 동일한 메시지 전달

3) Topic Exchange : Routing key 전체가 일치 하거나 일부 패턴과 일치하는 모든 Queue로 메시지가 전달되고 ( . ) 으로 구분된다.

4) Headers Exchange : 메시지 헤더값이 바인딩 시 지정된 값과 같은 경우에만 일치하는 것으로 간주한다.

Durability : 브로커가 재시작 될 때 남아 있는지 여부

Audo-Delete : 마지막 Queue 연결이 해제되면 삭제

profile
history and study

0개의 댓글