오픈 스택의 주요 용어 정리

박도준·2020년 5월 13일
6

+ 오픈스택이란?

  • Heat이란?
  • 가상 서버를 생성하는 컴퓨트 Nova
  • 오브젝트 스토리지 Swift
  • 운영체제 이미지를 관리하는 Glance
  • 인증을 관리하는 Keystone
  • 네트워크를 관리하는 Neutron
  • 블록 스토리지를 관리하는 Cinder
  • 대시보드 Horizon

오픈스택이란?

클라우드 컴퓨팅을 공부하면 자주 등장하는 용어는 오픈스택입니다.
오픈스택은 오픈소스의 형태로 클라우드 컴퓨팅 환경에서 많은 부분 지원합니다.

오픈스택 홈페이지에서의 오픈스택은 아래와 같이 소개되어 있습니다.

OpenStack is a cloud operating system that controls large pools of compute, storage, and networking resources throughout a datacenter, all managed through a dashboard that gives administrators control while empowering their users to provision resources through a web interface.

간단히 요약하면 계산,저장소,네트워크 자원들을 관리하는 클라우드 운영체제입니다.

오픈스택은 현재 클라우드 인프라를 구축할 수 있는 가장 거대한 오픈 소스 프로젝트이고, 6개월에 한 번씩 새로운 버전을 릴리스하며, 기술 범위도 상당히 방대합니다.(오픈스택 릴리스 웹 사이트)

만약 오픈스택 관련 용어가 궁금하다면 여기에서 검색!!

클라우드 컴퓨팅에 사용되는 서버들을 제어하려면 전문적인 하드웨어 지식과 서버를 운영하는 운영체제의 지식이 필요한데, 이것은 어떤 하드웨어와 운영체제를 사용하는냐에 따라 다르기 때문에 환경이 바뀔 때마다 새로운 지식을 습득해야하는 문제가 있습니다.

이러한 문제를 해결하기 위해 서버의 하드웨어와 운영체제와 관계 없이 클라우드 컴퓨팅 개발의 표준을 제공하는 것이 오픈스택입니다.

오픈스택의 구성


Heat이란?

OpenStack 오케스트레이션 Heat 서비스는 heat orchestration template(hot)을 사용하여 클라우드 자원을 생성하고 관리합니다.
오케스트레이션 서비스는 실행 중인 애플리케이션을 생성하기 위해 OpenStack API를 호출하여 템플릿 기반의 오케스트레이션을 제공합니다.

  • 오케스트레이션 : 컴퓨터 시스템과 애플리케이션, 서비스의 자동화된 설정, 관리, 조정을 의미

Heat의 구조

  1. 사용자는 API를 직접 호출하여 오케스트레이션 서비스를 요청하거나 CLI(Command Line Interface)를 통해 동일한 작업을 수행할 수 있습니다.
    이때 CLI 역시 사용자 명령을 API로 변환하여 처리하게 됩니다.

  2. 수신된 API 서버는 AMQP(Advanced Message Queueing Protocol)규격 기반의 메시지 통신을 통해 Heat Engine으로 이를 전달합니다.

  3. Heat Engine은 수신한 템플릿과 API의 파라미터에 포함된 사용자 요청 데이터를 기반으로 인프라 및 클라우드 애플리케이션을 생성하기 위하여 Nova API, Neutron API 등과 같은 오픈스택 프로젝트들의 API를 호출합니다.

Heat Orchestartion Template

Heat는 템플릿 기반의 오케스트레이션 서비스를 제공하는 프로젝트로 사용자가 구성하고자 할 가상 자원들을 템플릿에 명시하도록 합니다.

템플릿은 JSON(Java-Script Object Notation)이나 YAML(YAML Ain't Mark-up Language)과 같이 사람이 쉽게 읽고 작성할 수 있는 텍스트 기반의 데이터 인코딩 방식을 이용합니다. 아마존 웹서비스의 CFN 템플릿이 JSON 기반의 표현 방식을 사용하는 반면 HOT 템플릿YAML을 인코딩 방식으로 사용합니다. YAML 방식이 JSON 방식에 비해 파싱(parsing)의 부하가 좀 더 크지만 JSON과 달리 멀티라인 스트링을 지원하고 주석 처리가 용이하다는 장점을 갖습니다.


가상 서버를 생성하는 컴퓨트 Nova

오픈스택 Nova컴퓨트 서비스의 핵심이며 하이퍼바이저(VM을 생성하고 구동하는 소프트웨어), 메시지 Queue, 인스턴스 접속을 하는 콘솔 등 다양한 기능이 유기적으로 연결되어 가상 서버를 생성할 수 있는 시스템을 구성합니다.

특이점으로는 RESTful API를 지원하고 아마존 EC2 서비스와 호한이 됩니다. 즉, Nova API는 EC2 API와 연동이 가능합니다.

  • Restful API : REST란 웹에 존재하는 모든 자원(이미지,동영상, DB 자원)에 고유한 URL를 부여해서 활용하는 것으로, Restful API는 REST의 특징을 지키면서 API를 제공하는 것을 의미합니다.
  • 아마존 EC2 : Amazon Elastic Compute Cloud(EC2)는 안전하고 크기 조정이 가능한 컴퓨팅 파워를 클라우드에서 제공하는 웹 서비스로 개발자가 더 쉽게 웹 규모의 클라우드 컴퓨팅 작업을 할 수 있도록 설계되었습니다.

Nova의 Logical Architecture

  1. Nova는 dashboard나 커맨드 라인 명령어가 호출하는 nova-api로부터 시작한다.
  2. nova-api는 Queue를 통해 nova-compute에 인스턴스를 생성하라는 명령어를 전달하고
  3. 인스턴스 생성 명령어를 전달받은 nova-compute는 하이퍼바이저 라이브러리를 통해
  4. 하이퍼바이저에게 인스턴스를 생성하라는 명령어를 다시 전달한다.
  5. 그 때 하이퍼바이저는 인스턴스를 생성한다.
  6. 생성된 인스턴스는 nova-console을 통해 사용자가 접근할 수 있게 된다.

Nova가 지원하는 하이퍼바이저

Nova가 지원하는 하이퍼바이저는 그룹은 아래와 같이 3개입니다.

만약 지원하는 하이퍼바이저 종류를 더보고 싶으면 여기에서 확인!!

노드별로 설치되는 Nova


오브젝트 스토리지 Swift

Openstack SwiftObject Storage 중 하나이며 오픈소스 프로젝트입니다.
분산 구조의 Object 데이터의 저장 스토리지 체계로서 가장 많이 사용되는 Open Source Project가 바로 Openstack Swift입니다.

  • Object Storage : 데이터에 unique ID를 부여하여, 컨테이너 버킷에 저장하고, 필요한 데이터에 대해 부여했던 ID를 통해 호출하여 사용하는 스토리지이다. 대용량의 저장공간이 필요할 때 사용하기 적절한 스토리지이다.

    • 장점 : 데이터를 저장할 위치와 방법에 대해서 고민하지 않아도 된다.

    • 단점 : 빠른 성능을 요구하는 경우에 쓰이기에는 부적절 하다.

OpenStack Swift는 동영상, 이미지, 디스크 이미지 등의 대용량, 비정형 데이터를 저장하기에 적합한 스토리지로, 데이터를 파일과 메타데이터로 저장하며 각각의 파일을 복제 방식을 이용해 분산 관리하고 계정마다 저장공간을 분리하지 않고 하나로 사용하여 공간을 최대한으로 활용하는 분산형 Object Storage입니다.

Swift의 Logical Architecture

  • 오픈스택 Swift는 swift-proxy, account(사용자 계성 관리), container(저장 공간의 단위), object(실 데이터)로 구성된다.
  • swift-proxy는 account, container, object를 관리한다.
  • account, container는 DB로 데이터를 관리하고, Object는 저장공간에 직접 저장되는 방식으로 설게되어 있다.

Swift 장점

  • 동영상, 이미지, 디스크 이미지 등의 대용량 비정형 데이터를 저장하기에 적합
  • 각각의 Object들은 고유한 URL을 갖고 API로 제어
  • 멀티 테넌트로 구현이 가능하며 저장 공간에 제약이 없음.(계정마다 저장공간을 할당받는 것이 아닌 모든 공간을 같이 사용)

Swift API

Swift는 OpenStack의 통합 Console을 이용해 기본적인 Object 저장 및 다운로드 등의 기능을 이용할 수 있습니다. 하지만 OpenStack이 없는 상태로 Swift만 단독으로 사용하여 사용자가 원하는 기능을 구현하거나 또는 별도의 UI를 만들기 위해서는 Swift API를 이용해야 합니다.

Swift는 API를 통해 Object를 관리할 수 있도록 다양한 기능을 제공하며 개발자의 편의를 위해 다양한 형태의 API를 제공합니다. Swift API는 기본적으로 REST API입니다.

REST API 등을 사용하여 Object를 관리하기 위해서는 먼저 사용자 인증을 받아야 하는데, 일반적으로 OpenStack의 KeyStone Auth를 사용해 Token을 받습니다. 받은 Token을 이용하여 Object Storage를 관리하게 됩니다.

API요청을 받아들이고 이를 처리하는 역할은 Proxy Server가 담당하며 요청의 종류에 따라 실제 데이터의 처리를 어디서 수행하게 될지를 결정합니다.

Proxy Server

Porxy Server는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 뜻합니다.

Porxy Server는 Swift의 모든 요청을 Ring(분산 서버들의 정보를 가지고 있다.)을 참고하여 적합한 서버에 처리를 분산하는 역할을 합니다.

Ring

Ring은 데이터가 저장될 논리적 위치와 물리적인 저장 위치 간의 매핑을 제공하는 정보로서 전화번호부 또는 주소록과 비슷한 역할을 합니다.
Ring 파일에는 스토리지 디바이스 정보들이 존재하는데 그 정보에 대한 내용이 아래와 같습니다.
Ring 파일은 Proxy 노드에서 생성하여 모든 스토리지 노드가 동일하게 가지고 있습니다.


운영체제 이미지를 관리하는 Glance

오픈스택은 Nova를 사용하여 가상머신(인스턴스)를 만듭니다. 그리고 Nova는 다양한 하이퍼바이저를 지원하고, 하이퍼바이저 위에 생성될 가상머신에는 반드시 운영체제가 필요합니다.
이때 다양한 하이퍼바이저에서 사용할 수 있는 가상머신 이미지를 관리하고, 가상머신에 설치된 운영체제를 보관 및 관리하는 것이 Glance입니다.

Glance의 Logical Architecture

  • Glance 사용자들은 glance-api를 통해 이미지를 등록, 삭제 및 관리를 할 수 있다.

  • glance-api는 glance-registry와 glance database에서 이미지가 관리된다.

  • 이미지를 등록할 때는 glance_registry를 통해 glance-database에 저장이 된다.

  • 등록된 이미지를 사용할 때는 glance-database에 바로 사용요청을 한다.

더 쉽게 그림으로 보면 아래와 같습니다.

Glance의 이미지

오픈스택에서 인스턴스를 생성할 때, Virtual box나 VMWare에서 생성하는 가상머신처럼 운영체제 이미지를 다운로드 받아 설치할 수 있을 꺼라고 생각하지만 사실은 다릅니다.

오픈스택 Nova에서 인스턴스를 생성할 때는 가상머신을 생성한 후 운영체제를 별도로 설치하는 것이 아니라 이미 하이퍼바이저에서 생성한 가상머신에 운영체제를 설치한 이미지를 Glance에 등록시키고, 등록시킨 이미지를 이용하여 인스턴스를 생서하는 것입니다.

다시 말해, 다운로드 받은 이미지를 Glance에 등록시켜 놓고, 등록시킨 이미지로 인스턴스를 생성한다는 뜻입니다.


인증을 관리하는 Keystone

keystone오픈스택 내의 자원을 아무나 사용하는 것이 아닌 오픈스택 구성원만 사용할 수 있게 사용자 인증을 통해 물리 서버내의 자원을 사용할 수 있도록 관리합니다.

Keystone의 Logical Architecture

  • Token Backend는 사용자 별 Token(사용자가 오픈스택 서비스가 제공하는 자원에 접근할 때 신분을 증명하기 위해 사용하는 텍스트 데이터)을 관리합니다.
  • Catalog Backend는 오픈스택의 모든 서비스의 End-point URL을 관리합니다.
  • Policy Backend는 테넌트, 사용자 계정 및 롤 등을 관리합니다.
  • Identity Backend를 통하여 사용자 인증을 관리합니다.

OpenStack에서의 Keystone 위치


오픈스택에서 Keystone은 모든 서비스를 관장하는 위치에 자리하고 있습니다. Keystone은 타인이나 해커로부터 시스템을 안전하게 보호하고, 사용자 등록 및 삭제, 권한 관리, 사용자가 접근할 수 있는 서비스 포인트 관리까지 사용자 인증에 대한 모든 관리를 Keystone이 수행하고 있습니다.

Tenant(Project), User, Role

Keystone은 사용자 인증 부분과 서비스 인증 부분을 관리합니다. 사용자일 경우에는 사용자 그룹인 Tenant, 사용자 계정 정보인 User ID와 PW, 사용자 권한인 Role을 가집니다.
(Keystone V2까지 Tenant라는 이름으로 사용되고 V3부터는 Project로 사용됨)
서비스일 경우에는 서비스를 등록하고 해당 서비스의 Endpoint URL을 등록합니다.

  • Tenant(어떤 자원이나 어플리케이션에 대한 권리를 가진 보안그룹)는 User가 포함됩니다.
  • User는 Role(사용자가 어떤 동작을 수행하도록 허용하는 집합)을 가지고 있습니다.
  • Token을 발행할 때는 Tenant와 User의 정보가 필요합니다.
  • 서비스가 있고, 각각의 서비스는 Endpoint URL을 가집니다.
  • User는 Endpoint URL을 통해 서비스에 접근합니다.

KeyStone 동작 절차

  1. 사용자가 KeyStone으로부터 범위 비지정(UnScoped)토큰 획득
    1) 사용자가 Nova 서비스가 제공하는 가상머신을 사용하기 위해 KeyStone에 접속한다.
    2) KeyStone은 사용자에게 신분증명을 요구한다.
    3) 사용자는 아이디와 패스워드를 제출하여 신분을 증명한다.
    4) KeyStone은 인증에 성공한 사용자에게 UnScoped 토큰을 발급한다. 이때 토큰에는 사용자가 사용가능한 서비스들에 대한 범위가 포함되어있지 않다.

  2. KeyStone이 사용자가 접속 가능한 프로젝트 찾기
    1) 신분증명을 완료하여 UnScoped 토큰을 받은 사용자는 이 토큰을 통해 자신이 접속 가능한 프로젝트를 요청한다.
    2)KeyStone은 이 사용자에게 할당된 역할에 따라 프로젝트의 종류와 수행 가능한 EndPoint목록을 작성한다.

  3. 사용자가 KeyStone으로부터 범위 지정(Scoped) 토큰 획득
    1) KeyStone은 사용자가 접속가능한 프로젝트 목록과 사용자가 사용을 원하는 프로젝트를 결정한다.
    2) 위의 정보(프로젝트와 역할)가 포함된 토큰을 사용자에게 보낸다.

  4. 사용자가 서비스에게 서비스 요청하기
    1) 범위가 지정된 토큰을 받은 사용자는 토큰 내부의 EndPoint를 확인하고, 서비스에게 서비스를 요청한다.

  5. 요청을 받은 서비스가 KeyStone에게 토큰 검증 의뢰하기
    1) 서비스는 사용자가 요청과 함께 제출한 토큰의 메타데이터 정보가 유효한지 검증하기 위해 KeyStone에게 의뢰
    2)KeyStone은 서비스로부터 받은 메타데이터와 Policy Backend에 저장된 메타데이터와 비교

  6. 검증이 완료된 토큰을 서비스에게 제공
    1) 사용자가 요청한 서비스에 접근이 가능한지 토큰의 메타데이터의 검증을 마친 KeyStone은 그 결과를 서비스에게 제공

  7. 서비스가 사용자의 요청 실행하기
    1) 서비스는 KeyStone으로부터 토큰 검증을 완료한 후 인스턴스를 실행하라 또는 볼륨을 생성하라 등의 요청을 수행하낟.

  8. 결과 보고하기
    1) 서비스는 사용자의 요청에 대해서 실행에 대한 결과를 사용자에게 보고한다.


네트워크를 관리하는 Neutron

많은 사람들이 "Neutron이 직접 OpneStack의 네트워크를 구현하는것"이라고 오해를 하고 있습니다.
하지만 Neutron은 실제로 어떻게 네트워크를 구현해야 하는지 모릅니다. 즉, Neutron네트워크의 생성/변경/삭제에 대한 API만 제공할 뿐 실제로는 Plug-in을 통해서 네트워크가 구성되는 것입니다.

Neutron의 Logical Architecture

  1. 사용자는 Neutron API를 이용하여 Neutron 서버로 IP 할당을 요청합니다.
  2. Neutron 서버는 들어온 요청을 Queue로 다시 요청합니다.
  3. Queue는 Neutron 에이전트와 플러그인으로 IP 할당 지시를 내립니다.
  4. Neutron 에이전트와 플러그인은 지시 받은 작업을 데이터베이스에 저장합니다.
  5. Neutron 에이전트는 네트워크 프로바이더에게 작업을 지시합니다.
  6. 그리고, 수시로 작업상태를 데이터베이스에 업데이트합니다.
  7. 할당된 IP를 인스턴스에서 사용할 수 있습니다.

하이퍼바이저별 지원하는 플러그인


대부분의 플러그인들은 오픈스택의 기본 하이퍼바이저인 KVM과 QEMU에 의해 제공되어 있습니다.
그렇기 때문에 오픈스택으로 클라우드 컴퓨팅 시스템을 구축할 때는 하이퍼바이저를 대부분 KVM으로 사용합니다.

노드별로 설치되는 Neutron

노드 별로 설치되는 Neutron 프로세스들은 아래와 같습니다.

컨트롤러 노드
-Neutron Server
-Neutron Plugin Agent
-이더넷 네트워크 인터페이스 2개 필요(관리용 네트워크, API 네트워크)

네트워크 노드
-Neutron Plugin Agent
-L3 에이전트
-DHCP 에이전트
-OpenvSwitch
-이더넷 네트워크 인터페이스 3개 필요(관리용 네트워크, 데이터 네트워크, 외부 네트워크)

컴퓨트 노드
-Neutron Plugin Agent
-L2 Layer Agent OpenvSwitch
-네트워크 노드와 컴퓨트 노드 간의 데이터 통신을 위한 데이터 네트워크 필요


블록 스토리지를 관리하는 Cinder

블록 스토리지인 CinderNova에서 생성된 인스턴스에 확장하여 사용할 수 있는 저장 공간을 생성 및 삭제하고 인스턴스에 연결할 수 있는 기능을 제공합니다.

Cinder의 Logical Architecture

  • Cinder API를 통해 볼륨을 추가 및 삭제할 수 있다.
  • Cinder-volume은 volume을 실제로 생성하고 데이터베이스에 volume정보를 업데이트합니다.
  • Cinder는 물리 하드 디스크를 LVM(Logical Volume Manager)으로 설정합니다.
  • 설정한 LVM은 cinder.conf와 nova.conf의 환경설정을 통하여 volume을 할당할 수 있습니다.
  • cinder API를 통해 생성된 volume은 단일 인스턴스 또는 여러 인스턴스에 할당할 수 있습니다.

Cinder가 지원하는 Block Storage 드라이버

Cinder의 기본 Block Storage 드라이버는 ISCSI기반의 LVM입니다. 그러나 이 외에도 많은 드라이버가 Block Storage로 사용이 되는데, 아래의 그림이 Cinder의 Block Storage 드라이버의 종류입니다.

LVM(Logical Volume Manager)

LVM은 Logical Volume Manager의 약자로 하드 디스크를 파티션 대신 논리 볼륨으로 할당하고, 다시 여러 개의 디스크를 좀 더 효율적이고 유연하게 관리할 수 있는 방식을 뜻합니다.
생성된 볼륨을 인스턴스에 할당하여 디스크처럼 사용할 수 있습니다.


대시보드 Horizon

오픈스택 대시보드 서비스인 Horizon사용자가 웹 UI를 통하여 인스턴스 생성, 삭제 및 관리 등을 쉽고 빠르게 처리할 수 있도록 해주는 웹 서비스입니다. Horizon은 아파치 웹 서버를 사용하며, 대시보드는 파이썬 장고 프레임워크로 구현되어 있습니다.

Horizon의 Logical Architecture

  • 논리 아키텍처에서 보이는 Horizon은 단순히 Horizon 자체 모듈만 가지고 있습니다.
  • 그러나, 모든 서비스의 API와 연동하여 사용자에게 Web 서비스를 제공하는 구조로 되어 있습니다.
profile
Better late than never

0개의 댓글