클라우드 서비스의 기초. Virtualization, 가상화에 대해서
IT infrastructure, 클라우드 서비스의 기초인 가상화에 대해서 알아보자!
1.가상화에 대해 알기 전에 IT Infrastructure.
가상화에 대해서 알기전에 IT infra는 어떤 종류가 있는지 알아볼 필요가 흔히 세미나를 돌다보면 흔하게 들리는 ‘온프레미스’라던가 ‘클라우드 서비스’라는 개념이 도대체 정확히 뭘 말하는 건지 알아야 실제로 사용하는 AWS가 어떻게 돌아가는지 이해해볼 수 있을 것이다.
1.1. IT Infrastructure
IT 인프라는 크게 4가지로 나눠볼 수 있을 것이다. 온프레미스, 퍼블릭 클라우드, 프라이빗 클라우드, 하이브리드 클라우드 가 그 종류이다.
- 온프레미스(On-premise) : 쉽게 말해서 물리서버를 구축한다는 이야기이다. 회사에서 서버실을 따로 두고 있다면, 온프레미스 방식의 구조를 사용하고 있다는 걸 말한다. 온프레미스 방식은 직접 서버를 놓고 사용하기 때문에 관리가 용이하고 기밀성이 굉장히 높다는 장점을 갖고 있지만 고가의 장비를 사용해야 하고 사용량 예측이 불가하며, 재해 등에 취약하다는 단점이 있다.
- 퍼블릭 클라우드(Public Cloud) : 클라우드 제공자가 물리서버(데이터 센터, 인프라 등)를 구축하고 가상화 기술을 이용해 불특정 다수에게 제공하는 시스템을 말한다. AWS, GCP, Azure등이 퍼블릭 클라우드 프로바이더이며, 서비스 이용자들이 퍼블릭 클라우드를 이용하는 것이라고 볼 수 있다.
- 프라이빗 클라우드(Private Cloud) : 회사에서 자체적으로 물리서버를 구축하고 가상화하여 클라우드 기술을 사용하는 것을 말한다. 높은 기밀성이 필요한 회사에서 주로 사용한다. 고객 정보에 대한 데이터 등의 기밀성이 높은 데이터를 AWS나 기타 퍼블릭 클라우드에 올릴 수 없을 때 자체적으로 프라이빗 클라우드를 구축하곤 한다.(금융회사 또는 삼성)
- 하이브리드 클라우드(Hybrid Cloud) : 온프레미스와 클라우드를 동시에 사용하는 방식이다.
위에서 소개한 것처럼 클라우드에 대해서 다룰 때 가상화란 개념이 등장한다. 클라우드 서비스 유형에 따라 Iaas, Paas, Saas 등이 나뉘지만 이 글에서는 설명을 생략한다.
2. 가상화
가상화는 간단하게 설명하자면 하나의 물리적인 하드웨어 위에 여러 대의 OS를 올려 운영하는 것이다. 물리적인 CPU/서버를 이용할 때 하나의 운영체제를 이용하여 구동하는 경우에는 CPU 자원을 최대한으로 활용하기가 어려울 것이다. 하지만 하나의 물리적 CPU에서 여러 대의 가상 OS를 운영한다면 CPU 자원을 최대한 활용하는 효과를 가져올 수 있다. 그리고 자원이 많이 남는다면 AWS나 GCP처럼 퍼블릭 클라우드 서비스를 제공하는 것도 가능할 것이다.
2.1 가상화의 구조 - Hypervisor
한 컴퓨터를 가상화해서 여러 개의 가상 머신을 만들었다고 가정해보자.
그림에서 보면 가상 머신은 Hypervisor위에서 돌아가고 Hypervisor는 OS 위에 위치하고 있는 것을 알 수 있다. 각 가상 머신은 각각의 OS(Linux, MacOS, WindowsOS…)를 갖고 돌아갈 것이며 Hypervisor 밑에 있는 OS는 물리서버의 OS이다. 이런 구조라면 Hypervisor의 기능은 여러 OS를 관리하는 것이 아닐까? 라고 눈치 빠르게 유추해 볼 수 있을 텐데, 정답이다. OS는 Kernel을 통해서 자원관리나 명령을 해석하고 컨트롤하는데 문제는 OS마다 Kernel의 규칙이 다르다는 점에 있다. 그러니까 가상머신에는 다양한 OS가 돌아가게 되고 이것들을 중재해 주는 것이 Hypervisor이다. Hypervisor 자체도 가상화 커널이기 때문에 Hypervisor는 운영체제를 스케줄 하는 가상화 커널이라고 볼 수 있겠다.
2.2 가상화 유형
가상화 유형은 크게 두 가지로 볼 수 있다. Type-1과 Type-2형이다. OS를 사용하는가 안하는가에 따라 나뉜다.
출처: Wikipedia - Virtualization
- Type-1(Bare-Metal) : 호스트 OS가 존재 하지 않는다. 베어메탈은 “운영체제가 없는 컴퓨터 하드웨어”를 의미한다. “깡통 컴퓨터”라고 표현하면 적당할 것 같다. 하이퍼바이저가 하드웨어를 제어하고 그 위에 게스트 운영체제(Guest OS)를 올리는 방식이다. 완전히 제어하는 방식을 베어 메탈 하이퍼바이저라고 부른다.
- Type-2 :호스트 OS가 존재한다. 전통적인 OS에 하이퍼바이저를 실행하고, 이 하이퍼바이저 위에서 게스트 운영체제를 실행하는 방식이다. 하이퍼바이저를 실행하는 운영체제를 HOST 운영체제라고 부른다. 기존에 사용하던 운영체제 위에, 애플리케이션을 실행 하듯이 새로운 운영체제를 올릴 수 있다. 기존 운영체제에 익숙한 일반 사용자들이 주로 접하는 하이퍼바이저다.
가상화는 다시 전가상화 반가상화로 나누어 볼 수 있다. 하드웨어를 완전히 가상화 하고 DOM0를 통해 모든 접근을 처리하는 것이 전가상화이고 완전 가상화 하지 않고 HyperCall이라는 Interface를 통해 접근을 처리하는 것이 반 가상화이다. 전가상화는 DOM0를 통해 모든 처리를 하므로 GuestOS를 수정할 필요가 없지만 Hypervisor가 모든 명령을 중재하므로 성능이 느린 편이다. 반면에 반가상화는 OS커널을 수정해 다른 OS에서 내리는 명령을 Hypercall에서 번역해서 처리하기 때문에 성능이 빠른 편이다. OS커널을 수정해야 하기 때문에 오픈소스 OS만 사용가능하다.
2,3 Hypervisor 기능
본격적으로 Hypervisor에서 사용가능한 기능들에 대해서 알아보자. AWS콘솔을 다루다 보면 자주나오는 용어들이 보일 것이다. 대표적으로 Migration, Snapshot, Templet이다.
그 전에 용어 정리
기능을 다루기 전에 용어 정리를 하고 넘어가야 이해가 쉬울 것 같다. 가상화의 구조에는 Host, Cluster, Datacenter가 있다.
Host
Host는 Storage 에 붙어있는 한 물리서버를 말한다. Host의 기준이 헷갈릴 수 있는데, Storage 기준이 아니라 물리서버라는 점을 명심하자.
Cluster
Cluster는 여러대의 Host머신을 한 Storage로 묶어 놓은 것을 말한다. 클러스터는 한 Storage로 묶일 수 있다.
Datacenter
Datacenter는 여러대의 Cluster를 하나로 묶어 놓은 것을 말한다.
정리하자면 데이터 센터 아래에 여러대의 클러스터가 있고 각 클러스터에는 여러대의 호스트 머신이 띄워져 있으며, 호스트 머신에는 가상머신들이 떠 있다.
Provisioning
쉽게 말해서 제공하는 것. 클라우드 서비스 업체에서 어떤 걸 제공받느냐에 따라서 Server Resource Provisioning : CPU, Memory, IO 등과 같은 실제 서버의 자원을 할당해주고 운영할 수 있게 제공해주는 것을 말한다.
출처 : 프로비저닝이란
- OS Provisioning : OS를 서버에 설치하고 구성작업을 해서 사용할 수 있도록 제공하는 것을 말한다.
- Software Provisioning : WAS, DBMS 등의 소프트웨어를 설치하고 세팅하여 실행할 수 있도록 제공하는 것을 말한다.
- Account Provisioning : 접근 권한을 가진 계정을 제공해주는 것을 말한다. 클라우드 인프라 쪽에서는 해당 업무를 담당하던 관리자가 변경된 경우 권한의 인계를 Account Provisioning 을 통해 하는 경우가 많다.
- Storage Provisioning : 데이터를 저장하고 관리할 수 있는 Storage 를 제공할 수 있다. 특히 클라우드에서는 제공하는 Storage 의 종류와 용도에 따라 다양한 방식의 제공이 이루어진다.
2.3.1 Migration
Migration은 한 클러스터 내에서 어떤 호스트에 붙어있는 가상머신을 다른 호스트로 옮기는 것을 말한다. Storage가 같기 때문에 가상머신을 다른 호스트로 옮기는 것이 가능하고 데이터도 그대로 사용가능하다.
2.3.2 Storage Migration
Storage Migration이란 Storage를 갈아타는 Migration이라고 생각하면 된다. 한 클러스터에 있는 가상머신을 다른 클러스터로 옮기는 것이다.
중요한 점
: 구조를 살펴보면 Storage가 가장 핵심인 것을 알 수 있다. Storage위의 가상머신 등은 얼마든지 죽어도 다시 살릴 수도 있고 다른 호스트로 옮길 수도 있지만 Storage는 죽으면 참…답이 없다. 이에 대해서 여러가지 처리를 해놓았지만 이 글에서는 다루지 않겠다.
2.3.2 Snapshot
스냅샷은 특정 시간대의 가상머신 데이터와 설정 정보를 백업하는 기술이다. Snapshot으로 저장된 백업 데이터를 이용하면 VM에 장애가 발생하더라도 빠르게 복구 가능하다.
2.3.3 Templet
서버 템플릿이란 서버 다수를 사용하는데 사용할 수 있도록 공통 요소들을 프로비저닝해 둔 서버 이미지를 말한다.
기능들에서 살펴보니 AWS에서 사용되는 여러가지 용어들이 익숙하게 보이는 것을 확인할 수 있다. 이런 지식들을 가지고 AWS나 기타 클라우드에서 활용할 수 있고 후에 Docker나 Kubernetes 등에도 활용할 수 있을 것이다.
클라우드 서비스의 기초. Virtualization, 가상화에 대해서