관리 메뉴

피터의 개발이야기

오픈스택이란? 본문

개발이야기

오픈스택이란?

기록하는 백앤드개발자 2023. 4. 20. 22:19
반응형

 

ㅁ 오픈스택이란?

  OpenStack은 풀링된 가상 리소스를 사용하여 프라이빗 및 퍼블릭 클라우드를 구축하고 관리하는 오픈소스 플랫폼이다. OpenStack은 데이터 센터 전체에서 컴퓨팅, 스토리지 및 네트워킹 리소스의 대규모 풀을 제어하는 ​​클라우드 운영 체제로, 모두 공통 인증 메커니즘이 있는 API를 통해 관리 및 프로비저닝된다. 클라우드 컴퓨팅 서비스를 제공하는 물리 서버들을 묶은 하나의 풀 위에서 돌아가면서 클라우드 환경을 쉽게 관리 및 이용하도록 도와준다. OpenStack 플랫폼을 포함하는 툴, 일명 “프로젝트”는 컴퓨팅, 네트워킹, 스토리지, Identity 및 이미지 서비스의 핵심 클라우드 컴퓨팅 서비스를 처리한다. 또한 수십 개 이상의 옵션 프로젝트를 번들로 묶어 배포 가능한 고유의 클라우드를 생성할 수도 있다.


  가상화 관리 플랫폼으로써 가상 리소스를 기반으로 하며 벤더별 환경에서 프로세스를 검색, 리포트, 자동화할 수 있으며 OpenStack에서는 툴 조합을 실행하기 위해 실제로 가상 리소스를 사용한다. 이러한 툴은 미국 국립표준기술원(NIST)이 제시한 클라우드 컴퓨팅의 5가지 기준인 네트워크, 풀링된 리소스, 사용자 인터페이스, 프로비저닝 기능, 자동 리소스 제어/할당을 충족하는 클라우드 환경을 구축합니다.

 

  대시보드도 사용할 수 있어 관리자가 제어할 수 있는 동시에 사용자가 웹 인터페이스를 통해 리소스를 프로비저닝할 수 있다. 표준 IaaS(infrastructure-as-a-service) 기능 외에도 추가 구성 요소는 다른 서비스 간에 오케스트레이션, 장애 관리 및 서비스 관리를 제공하여 사용자 애플리케이션의 고가용성을 보장합니다.

 

OpenStack 클라우드에 대한 비전에 대해 자세히 읽어보십시오.

이미지출처: https://www.openstack.org/

 

 

ㅁ 오픈스택 제공 서비스 (Component)

OpenStack은 필요에 따라 구성 요소를 플러그 앤 플레이할 수 있도록 서비스로 나뉩니다. openstack 맵은 openstack 환경을 "한눈에" 볼 수 있게 하여 해당 서비스가 적합한 위치와 함께 작동하는 방법을 보여준다.

코어 컴포넌트로는 nova, neutron, glance, Cinder, swift, Keystone이 있다

 

지도 다운로드

이미지출처: https://www.openstack.org/software
  • horizon : 대시보드 서비스
    관리자 및 사용자가 관리 및 사용할 수 있는 웹서비스를 통해 GUI 환경을 제공(웹페이지 제공)
    추가적인 서비스를 구성할 경우에는 필요에 따라 별도의 패키지 설치 , 기본적인 핵심서비스들은 설치 되어있다. 컨트롤러 노드에만 설치 /etc/httpd/conf.d/15-horizon_vhost.conf
  • Nova : 컴퓨팅 서비스
    우리가 사용할 인스턴스를 관리해주는 서비스 , 인스턴스의 생성/삭제/동작제어 등을 위한 서비스 , 컨트롤러 노드와 컴퓨트 노드에 설치
    libvirt 서비스에 이런 동작을 해야한다고 알려주는 역할
  • Glance : 이미지 관리 서비스
    ova 파일 같은 개념, 이미지를 생성/ 삭제 등의 관리 및 요청에 따라 전달/ 보관 서비스
    이미지 → 인스턴스를 실행 할 때 사용하는 부팅이 가능한 운영체제가 설치된 디스크 파일
    웹에서 다운로드, 수정(disk-image-builder, guest-fish, virt-customize 등의 도구), 사용하던 가상머신의 디스크 파일 등
  • Neutron : 네트워크 관리 서비스
    SDN과 NFV 등을 이용해서 네트워크를 동적 구성/ 관리 서비스 (NetworkManager와 충동 가능성 있음)
  • Cinder : 블록 스토리지 서비스
    iscsi 처럼 볼륨이라는 형식을 이용해서 저장공간을 인스턴스에 직접 연결해서 사용
  • Swift : 오브젝트 스토리지 서비스
    필요할때 어디서나 접근할 수 있도록 API/URL을 이용해서 어느 환경에서건 네트워크 연결이 되어있다면 접근해서 사용, 관리자나 사용자 입장에서 메모해둔 문서, 데이터 베이스 이미지 여러가지 파일 종류를 필요할때 가져가서 쓸 수 있도록 한다. 따로 파티셔닝하고 마운트하고 연결 할 필요가 없다.
  • Manila : 공유 파일 시스템 서비스
    영구 저장, 인스턴스에 연결해서 사용 (다중 연결 방식), 써도되고 안써도됨
  • Keystone : 인증서비스
    사용자에 대한 인증 및 접근 권한을 확인하고 제어해주는 역할 , 엔드포인트 관리, 중요한 역할
  • Heat : 오케스트레이션 서비스
    쿠버네티스와 같이 오픈스택의 각 리소스들을 세트로 정적/ 동적 스케일링 작업을 지원 ( 만들고 지우고 늘리고하는 오케스트레이션 작업 ) heat라는 서비스를 연동하여 모니터링 하며 늘리거나 줄임 , 파드 단위를 사용하지 않고 각종 리소스들을 여러개를 동시에 관리
  • Ceilometer : 텔레메트리 사용량 측정 서비스
    사용자가 사용하는 리소스의 사용량을 모니터링 /기록 작업 -> 알람, 과금 측정
    Aodh 알람 기능 / Gnocchi 시계열 데이터 베이스
  • Ironic : 베어메탈 배포 서비스
    운영체제도 설치 되어있지 않은 환경에 네트워크로 설치할수 있는 서비스를 이용해서 직접 설치할 수 있게 해줌, 컨트롤러 컴퓨트,네트워크, 스토리지 노드를 직접 설치
    => Triple O : director 시스템에서 Ironic 서비스를 이용해서 노드들을 배포
  • Zaqar : 메세지큐 구성 서비스
    메세지 큐의 백엔드 구성을 도와줌 , 개발자들이 쓰기 편하게 해줌
  • Magnum : 컨테이너 관리 서비스
    컨테이너를 오픈스택 환경에서 사용할 수 있게 해준다 . 오픈스택 위에 쿠버네티스를 구성 할 수 있다.
  • Trove : 데이터베이스 서비스
  • Sahara : 빅테이터 처리 서비스

 

ㅁ 유사 개념과의 차이

ㅇ Container
  소프트웨어 서비스를 실행하는 데 필요한 특정 버전의 프로그래밍 언어 런타임 및 라이브러리와 같은 종속 항목과 애플리케이션 코드를 함께 포함하는 경량 패키지이다.  호스트 OS상에 논리적인 구획(컨테이너)을 만들고, 어플리케이션을 작동시키기 위해 필요한 라이브러리나 어플리케이션 등을 하나로 모아, 마치 별도의 서버인 것처럼 사용할 수 있게 만든 것이다. 호스트 OS의 리소스를 논리적으로 분리시키고, 여러 개의 컨테이너가 공유하여 사용한다. 컨테이너의 경우 하나의 Host OS위에서 마치 각각의 독립적인 프로그램처럼 관리되고 실행된다. 불필요한 OS만드는작업 및 Infra를 독립적으로 나눌 필요가 없어서 확장성이 좋고 빠르다.

 

ㅇ VM(Virtual Machine)
  실행 중인 애플리케이션과 운영체제를 포함하여 물리적 컴퓨터와 거의 동일한 모든 기능을 수행할 수 있는 컴퓨터의 가상화된 인스턴스 이다. 기본 하드웨어에 대한 액세스 권한을 갖는 호스트 운영체제 위에서 Linux 또는 Windows 같은 게스트 운영 체제를 실행 하이퍼바이저를 이용해 독립적인 GuestOS를 만들어낸다.

 

ㅇ Docker

컨테이너를 기반으로 하여 특정한 서비스를 패키징하고 배포하는 가상화 도구이다. 컨테이너 안에 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해준다. 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈소스 프로젝트이다.

 

 

ㅇ Kubernetes

쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼이다. Linux 컨테이너를 실행하는 호스트 그룹을 함께 클러스터링할 수 있으며 쿠버네티스를 통해 이러한 클러스터를 쉽고 효율적으로 관리할 수 있다.

 

 

용어
컨테이너 앱이 구동되는 환경까지 가상화하여 실행할 수 있도록 하는 격리 기술
컨테이너 런타임 컨테이너를 다루는 도구
도커 컨테이너를 다루는 도구 중 가장 유명한 것
쿠버네티스 컨테이너 런타임을 통해 컨테이너를 오케스트레이션 하는 도구
오케스트렌이션 여러 서버에 걸친 컨테이너 및 사용하는 환경 설정을 관리하는 행위



ㅁ 오픈스택의 구성 및 동작

 ㅇ 물리적 구성

  • 컨트롤러 노드
    오픈스택 환경의 구성을 관리
  • 컴퓨트 노드
    쿠버네티스워 워커 노드같은 하이퍼바이저 역할만 수행( 인스턴스 동작 ), 갯수가 많거나 성능이 좋으면 가상머신을 많이 또는 고성능으로 만들어 사용 할 수 있다.
  • 네트워크 노드
    네트워크 구성/관리 기능 제공 (외부 연결에 대한 구성) 내가 구성한 인스턴스 서비스를 외부의 누군가에게 연결해주어야함
  • 스토리지 노드
    오픈스택 환경에서 사용 할 스토리지를 제공

 

ㅇ 동작 방식

  • 동일 컴포넌트 내에서 동작하는 방식컴포넌트는 API 서버와 Agent 로 구성되어있다
    API 서버는 클라이언트의 요청 혹은 다른 컴포넌트의 요청을 받아들인다.
    Agent는 자원을 생성/삭제하는 역할을 한다 (예: nova-compute agent는 vm을 생성/삭제한다)

    API가 받은 요청을 Agent가 처리할 수 있도록 명령한다. 이를 rpc call라고 부른다.
    (nova-api가 인스턴스 생성 요청을 받으면, nova-compute(agent)가 vm을 만든다)
    API와 Agent간 통신은 AMQP를 지원하는 MQ를 이용한다. (대표적으로 RabbitMQ)



  • 다른 컴포넌트를 호출하는 방식: Agent가 요청 처리에 필요한 또 다른 자원을 다른 컴포넌트에게 요청하기도 한다.
    ( 예: nova-compute가 vm을 생성하다가, vm에 연결할 block storage 생성을 cinder에 요청 )
    서로 다른 컴포넌트끼리는 REST API 를 통해 요청한다.

  • 인스턴스 생성

ㅁ 자원 관리 방법

  Vm, network, storage와 같은 자원을 다루는 API는 모두 비동기로 처리된다. 자원 생성의 경우, API서버는 요청을 받고 자원의 UUID와 함께 202 Accepted를 반환한다. 자원을 요청한 쪽에서는 주기적으로 UUID값으로 상태를 조회하며 생성여부를 확인한다. (timeout 시간 만큼 시도하다가, 확인되지 않으면 전체 요청을 실패처리한다.)

  OpenStack이 storage, network, vm 자체를 직접 만들지 않는다. OpenStack은 자원의 상태만 관리하고 자원의 실체는 다른 서비스를 사용하며 실질적인 자원을 다루는 서비스와 연동하기 위해 다양한 Driver를 지원한다.

 

 

Devstack

오픈스택 환경을 손 쉽게 구성해주는 도구. 오픈스택 개발자의 개발 환경 / 테스트 환경으로 주로 쓰인다.
Virtualbox vm ( 4core, 8GB mem ) 1개에 오픈스택 코어 컴포넌트 모두를 구동시킬 수 있다. 더 자세한 것은 Devstack 

$ git clone https://opendev.org/openstack/devstack
$ cd devstack
$ ./stack.sh

 

 

ㅁ 참조

https://www.openstack.org/software/
https://cloud.google.com/?hl=ko

https://velog.io/@dlwpdlf147/OpenStack-OpenStack-오픈스택이란

반응형
Comments