OpenStack은 폴링된 가상 리소스를 사용하여 프라이빗 및 퍼블릭 클라우드를 구축하고 관리하는 오픈소스 플랫폼입니다.
LaaS 형태의 클라우드 컴퓨팅 오픈소스 프로젝트이다. LaaS를 쉽게 구축할 수 있도록 플랫폼을 지원해주며 사용자는 오픈스택의 대시보드를 통해 프로세싱, 저장공간, 네트워킹 등의 가용자원들을 제어할 수 있다.
컴퓨터 하드웨어 위에 인프라를 서비스로 제공하여 IaaS (Infrastructure as a Service)를 구축하게 해주는 오픈 소스 플랫폼이다.
최근 클라우드는 비즈니스 인프라 기술 분야에서 많은 관심을 받고 있습니다.
이에 힘입어 오픈스택 역시 많은 기업에서 인프라 개선을 위해 활용되고 있으며, 심지어 이를 서비스화 하는 등, 활용방안에 관해서도 많이 연구되고 있습니다.
클라우드 시스템은 이미 AWS라고 불리는 아마존의 퍼블릭 클라우드를 필두로 인프라 산업에서 수년전부터 주목받아 왔습니다. 클라우드 플랫폼을 구축함으로써 기존 물리 장비 구매, 유지보수에 들어가는 비용을 효과적으로 절감할 수 있다는 이점은 물론, 인프라의 운영 안정성, 보안성 확보 등 얻을 수 있는 이점이 많기 때문입니다.
이 둘을 구분짓는 가장 큰 차이는 "클라우드 시스템이 어디에 위치해 있는가"입니다.
퍼블릭의 경우 서비스를 제공하는 벤더사의 데이터 센터에 위치해 있습니다.
반면, 프라이빗은 클라우드 시스템을 사용하는 사용 주체가 자신의 데이터 센터에 직접 구축하고 운영하는 형태입니다.
두 방식 모두 장단점이 있습니다.
퍼블릭은 사용 주체가 직접 클라우드 인프라를 구축하지 않고도 컴퓨팅에 필요한 리소스를 사용할 수 있다는 이점으로 인해, 클라우드 인프라 구축에 필요한 시간과 인력, 구축&유지보스 비용 등을 절감할 수 있다는 효과가 있습니다.
하지만, 서비스를 사용하는 입장에서 정기적으로 요금을 지불해야하는 단점이 있습니다.
반면, 프라이빗은 직접 구축하고 유지해야하기 때문에 서비스 사용에 따른 정기적 요금을 지불하지 않아도 됩니다. 특히 오픈스택 같은 오픈소스를 기반으로 구축되면 더욱 그러하죠.
오픈스택은 클라우드 인프라 설계에 필요한 서버, 스토리지, 네트워크, 가상화 등을 종합적으로 지원하는 대표적인 프라이빗 클라우스 시스템입니다.
오픈스택은 오픈소스 소프트웨어를 기반으로 구축되는 시스템이기 때문에 사용자가 직접 구축하여 사용할 수 있습니다.
오픈스택을 사용함으로써 발생하는 장단점이 여러가지 있습니다. 가장 큰 이점은 사용화된 클라우드 시스템을 사용하는 경우와 비교했을 때, 시스템 사용에 대한 비용이 들지 않는다는 점입니다. 앞서 언급한 바와 같이 오픈스택은 오픈 소스 소프트웨어를 기반으로 하기 때문입니다. 또한 전 세계 개발자들이 끊임없이 개발하고 유지보수하기에 최근에는 시스템이 많이 안정화되었습니다. 또 수많은 개발자들이 관여하는 만큼 버전 릴리즈도 빠른 편입니다.
단점도 치명적입니다... 구축이 어렵습니다.
실제로 현업에서 오픈스택 관련 종사자들이 흔히 "오픈스택은 메뉴얼에 있는 그대로 쓰는 것이 가장 안전하다"라고 할만큼 응용하여 구축하는 것이 어렵습니다.
시스템 내부의 수많은 소프트웨어가 서로 유기적으로 동작하기 때문에 기존 설계에서 벗어나 응용하는 것이 다소 쉽지 않습니다.
오픈소스 기반 시스템이기 때문에 기존 온프레미스 물리 장비 혹은 퍼블릭 클라우드 사용 대비 비용 절감의 효과, 그리고 기존 온프레미스 인프라 시스템과 연계하여 유연하게 구축할 수 있습니다.
또한 리눅스 시스템을 기반으로 동작하고 내부 소프트웨어가 대부분 공개된 것이기에 유지보수 측면에서도 많은 이점이 있습니다.
기존 퍼블릭 클라우드 시스템과 같이 자체 제작되어 내부 시스템에 직접 접근할 수 없는 경우 대부분 서비스 제공자에게 도움을 받아야하지만 오픈스택은 내부 일부 소프트웨어는 잘 알려진 오픈소스 소프트웨어이고 공개된 API를 활용하여 사용자가 직접 추가 기능을 개발할 수도 있습니다.
또한 장애가 발생하는 경우, 오픈스택 재단의 버그 리포트를 통해 수정 사항을 확인할 수 있고 경우에 따라 기존 엔지니어를 통한 대처가 가능하다는 점 등 오픈스택을 사용함으로써 얻을 수 있는 다양한 이점들이 있습니다.
사용자가 오픈스택의 구성요소들을 간편하게 사용할 수 있도록 지원해주는 UI 서비스이다.
AWS의 EC2, GCP의 Compute Engine와 비슷한 서비스이다.
Cloud compute service로서 사용자의 요청에 따라 컴퓨팅 자원을 제공하고 관리해준다. 오픈스택에서 가장 핵심적인 프로젝트로서 가상 머신을 관리할 수 있는 기능을 제공한다.
Nova는 dashboard나 커맨드 라인 명령어가 호출하는 nova-api로부터 시작한다.
nova-api는 Queue를 통해 nova-compute에 인스턴스를 생성하라는 명령어를 전달하고
인스턴스 생성 명령어를 전달받은 nova-compute는 하이퍼바이저 라이브러리를 통해
하이퍼바이저에게 인스턴스를 생성하라는 명령어를 다시 전달한다.
그때 하이퍼바이저는 인스턴스를 생성한다.
생성된 인스턴스는 nova-console을 통해 사용자가 접근할 수 있게 된다.
AWS의 AMI, GCP의 Boot disk와 비슷한 서비스이다.
다양한 하이퍼바이저에서 사용할 수 있는 가상 머신 이미지를 관리한다. Nova에서 생성되는 가상 머신은 Glance를 통해 가상 머신 이미지를 제공받고 관리한다.
쉽게 말해 가상 디스크 이미지들을 저장/등록/관리/전달할 수 있게 해주는 서비스이다.
Glance 사용자들은 glance-aip를 통해 이미지를 등록, 삭제 및 관리를 할 수 있다.
Glace- api는 glance-registry와 glance-database에서 이미지가 관리된다.
이미지를 등록할 때는 glance-registry를 통해 glance-database에 저장이 된다.
등록된 이미지를 바로 사용할 때는 glance-databas에 직접 요청하여 사용한다.
AWS의 S3, GCP의 Cloud Storage와 비슷한 서비스이다.
오픈스택의 object 저장소로 대용량 데이터를 저장할 수 있는 높은 확장성을 가진 서비스이다. 데이터에 unique ID를 부여하고 컨테이너(버킷)에 저장하여 필요할 때 데이터에 부여한 ID를 호출하여 데이터를 사용하는 스토리지이다.
swift-proxy는 account, container, object를 관리한다.
account, container는 DB를 담당하고 Object는 저장공간에 직접 저장되는 방식으로 설계되어 있다.
account(사용자 계정 관리), container(저장 공간의 단위, 버킷), object(데이터)
AWS의 vpc, GCP의 cloud virtual network와 비슷한 서비스이다.
소프트웨어 기반의 네트워킹 서비스를 제공한다.
Neutron은 실제로 어떻게 네트워크를 구현할까요? Neutron은 네트워크의 생성/변경/삭제에 대한 API를 제공하며 실제로는 Plug-in을 통해 controller를 작동시켜 네트워크에 접속합니다.
사용자는 Neutron API를 이용하여 Neutron 서버로 IP 할당을 요청합니다.
Neutron 서버는 들어온 요청을 Queue로 다시 요청합니다.
Queue는 Neutron 에이전트와 플러그인으로 IP 할당 지시를 내립니다.
Neutron 에이전트와 플러그인은 지시받은 작업을 데이터베이스에 저장합니다.
Neutron 에이전트는 네트워크 프로바이더에게 작업을 지시합니다.
그리고, 수시로 작업 상태를 데이터베이스에 업데이트합니다.
할당된 IP를 인스턴스에서 사용할 수 있습니다.
AWS의 EBS(Elastic Block Storage) GCP의 Persistent Disk와 비슷한 서비스이다.
블록 스토리지인 Cinder는 Nova에서 생성된 인스턴스에 확장하여 사용할 수 있는 저장 공간을 생성 및 삭제하고 인스턴스에 연결할 수 있는 기능을 제공합니다.
Cinder API를 통해 볼륨을 추가 및 삭제할 수 있다.
Cinder-volume은 volume을 실제로 생성하고 데이터베이스에 volume정보를 업데이트합니다.
Cinder는 물리 하드 디스크를 LVM(Logical Volume Manager)으로 설정합니다.
설정한 LVM은 cinder.conf와 nova.conf의 환경설정을 통하여 volume을 할당할 수 있습니다.
cinder API를 통해 생성된 volume은 단일 인스턴스 또는 여러 인스턴스에 할당할 수 있습니다.
AWS의 ECS(Elastic Container Service)와 GCP의 GKE(Google Kubernetes Engine)과 비슷한 서비스이다.
OpenStack 오케스트레이션 Heat 서비스는 heat orchestration template(hot)을 사용하여 클라우드 자원을 생성하고 관리합니다.
오케스트레이션 서비스는 실행 중인 애플리케이션을 생성하기 위해 OpenStack API를 호출하여 템플릿 기반의 오케스트레이션을 제공합니다.
사용자는 API를 직접 호출하여 오케스트레이션 서비스를 요청하거나 CLI(Command Line Interface)를 통해 동일한 작업을 수행할 수 있습니다.
이때 CLI 역시 사용자 명령을 API로 변환하여 처리하게 됩니다.
수신된 API 서버는 AMQP(Advanced Message Queueing Protocol) 규격 기반의 메시지 통신을 통해 Heat Engine으로 이를 전달합니다.
Heat Engine은 수신한 템플릿과 API의 파라미터에 포함된 사용자 요청 데이터를 기반으로 인프라 및 클라우드 애플리케이션을 생성하기 위하여 Nova API, Neutron API 등과 같은 오픈스택 프로젝트들의 API를 호출합니다.
AWS, GCP의 IAM(Identity and Access Management) 서비스와 비슷한 서비스입니다.
키스톤은 인증 토큰 시스템으로 오픈스택 클라이언트는 다양한 API를 호출하기 때문에 이를 토큰을 부여하여 관리한다. 아래 그림을 보면 이해하기 쉽다.
Keystone은 사용자 인증 부분과 서비스 인증 부분을 관리합니다. 사용자일 경우에는 사용자 그룹인 Tenant, 사용자 계정 정보인 User ID와 PW, 사용자 권한인 Role을 가집니다. 서비스일 경우에는 서비스를 등록하고 해당 서비스의 Endpoint URL을 등록합니다. 그럼, 아래 그림을 보면서 다시 한번 더 정리해 보도록 하겠습니다.
AWS의 cloudwatch, GCP의 Stack Driver와 비슷한 서비스입니다.
오픈스택 서비스와 관련된 측정 데이터를 효과적으로 수집하고 서비스로부터 전송되는 알림을 모니터링합니다.
참조
https://itguava.tistory.com/111
https://codemonkyu.tistory.com/entry/Openstack-%EC%98%A4%ED%94%88%EC%8A%A4%ED%83%9D%EC%9D%B4%EB%9E%80