가상화는 "기술"
클라우드 컴퓨팅은 가상화 기술을 기반으로 한 "서비스"
1. 가상화
가상화가 등장하기 이전에 기업의 전통적인 방식은 하나의 서버에 하나의 운영체제, 하나의 프로그램을 운영하여 각 서버가 갖고 있는 시스템 자원 중 약 50~70% 정도만 사용할 수 있었다. 즉, 물리적 서버가 갖고 있는 성능을 100% 활용해서 사용할 수 없었다. 이 과정에서 기업은 갖고 있는 물리적 서버를 최대한 효율적으로 사용하길 원했고, 각 서버가 100%의 성능을 발휘할 수 있길 원했다.
즉, 한 대의 물리적인 장비를 마치 여러 대의 장비처럼 활용하거나, 여러 장비를 하나의 장비처럼 묶어서 사용하기를 원했고 이로 인해 등장한 기술이 "가상화"이다.
1.1. 가상화의 개념
- 가상화(Virtualization)는 물리적인 컴포넌트(Components, HW장치)를 논리적인 객체로 추상화 하는 것을 의미. 마치 하나의 장치를 여러 개처럼 동작시키거나, 반대로 여러 개의 장치를 묶어 하나의 장치인 것처럼 사용할 수 있는 기술
- 가상화의 대상이 되는 컴퓨팅 자원은 프로세서(CPU), 메모리(Memory), 스토리지(Storage), 네트워크(Network), 그래픽 처리 장치(GPU)가 있으며, 이들로 구성된 서버나 장치들을 가상화함으로써 높은 수준의 자원 사용률과 분산 처리 능력을 얻을 수 있음
1.2. 가상화 기술의 종류
1.2.1. 서버 가상화 ( Server Virtualization )
- 서버의 효율성을 높이기 위해 등장한 기술로 가상화 개념의 시초
- 가상화를 가능하게 하는 하이퍼바이저(Hypervisor), 하이퍼바이저에 의해 제어되며 각종 애플리케이션을 실행하기 위한 컴퓨팅 환경인 가상 머신(Virtual Machine, VM)으로 구성
- 하드웨어를 가상화하기 위해서는 하드웨어뿐만 아니라 각각의 가상머신들을 관리할 가상머신모니터(VMM: Virtual Machine Monitor)와 같은 중간 관리자가 필요. 이를 하이퍼바이저라고 하며 VM이 동작할 수 있는 환경을 제공
- 하이퍼바이저는 하드웨어의 물리적인 리소스를 VM들에게 제공하고, VM과 하드웨어간의 I/O(Input / Output) 명령을 처리. Virtualization Layer(가상 레이어)에 위치하며 하드웨어와 다수의 VM들 사이의 인터페이스라 볼 수 있음
1.2.2. 데스크탑 가상화 (Virtual Desktop Infrastructure, VDI)
- 데이터 센터의 서버에서 운영되는 가상의 PC 환경을 의미
- 물리적으로는 존재하지 않는 가상의 개별 컴퓨터로 사용자는 모니터, 키보드, 마우스, 스피커 등의 필수적인 입출력 장치만을 활용하거나 매우 단순화된 인터페이스만 가지고 컴퓨터를 활용할 수 있음
- 가상의 데스크탑을 마치 로컬 시스템처럼 활용할 수 있으며, 모든 작업의 프로세싱과 저장은 데이터 센터에 위치한 서버에서 처리됨
- VDI 환경에서는 언제 어디서든 네트워크만 연결이 된다면 서버에 접속하여 자신만의 PC환경을 구동시킬 수 있음. 사용자는 보통의 PC보다 5~10% 수준의 전력 소모만으로도 유사한 컴퓨팅 환경을 구현
- 또한 데이터가 로컬 장치가 아닌 서버에 위치하기 때문에 복원, 생성 등의 작업이 쉬워지며, 보안 측면에서도 데이터 센터급의 서비스를 보장받을 수 있음
1.2.3. 애플리케이션 가상화 (Application Virtualization)
- 해당 응용 프로그램이 실행되는 운영체제로부터 응용 소프트웨어를 캡슐화하는 기법
- 캡슐화된 응용프로그램은 실제 설치되지는 않으나, 마치 설치된 것처럼 실행됨. 예를 들어 마이크로소프트의 윈도우(Windows) 7 OS는 별다른 수정 사항 없이 구형 OS인 윈도우 XP를 가동할 수 있도록 함. 사용자가 윈도우 XP에서만 구동되는 구형 프로그램을 실행하고자 할 때 용이하게 쓰임
- 이러한 캡슐화는 한 응용 프로그램이 업데이트됨에 따라 관련된 다른 응용프로그램이 동작하지 않는 부작용을 방지. 따라서 애플리케이션 관리가 수천 개에 달하는 기업의 경우, 가상화된 애플리케이션은 관리자가 배포 및 업데이트를 할 때 상대적으로 유용
2. 하이퍼바이저
2.1. 하이퍼바이저의 개념
Virtual Machine Diagram. 출처 :
하드웨어를 가상화하기 위해서는 하드웨어들을 관장할 뿐만 아니라 각각의 가상머신들을 관리할 가상머신모니터(VMM: Virtual Machine Monitor)와 같은 중간관리자가 필요하다. 이 중간관리자를 하이퍼바이저(Hyperviser)라고 하며, VM이 동작할 수 있는 환경을 제공 한다
하이퍼바이저는 결국 아래와 같이 정의할 수 있다.
- 호스트 시스템에서 다수의 게스트 OS를 구동할 수 있게 하는 소프트웨어.
- 하드웨어를 가상화하면서 하드웨어와 각각의 VM을 모니터링하는 중간 관리자. VMM(Virtual Machine Monitor)이라고도 불림.
* VM은 기본적으로 컴퓨터의 에뮬레이션으로, 프로그램을 실제 컴퓨터처럼 실행한다. VM들은 “하이퍼바이저”를 통해 물리적 기계(machine) 위에서 돌아간다.
2.2. 하이퍼바이저 종류
2.2.1. Type1 하이퍼바이저 : 베어메탈(Bare-metal)기반
하이퍼바이저가 하드웨어 바로 위에서 실행되는 방식이다. 하이퍼바이저가 하드웨어를 직접 제어하기 때문에 자원을 효율적으로 사용할 수 있고, 별도의 호스트OS가 없으므로 오버헤드가 적지만 여러 하드웨어 드라이버를 세팅해야 하므로 설치가 어렵다.
ex) Xen, 마이크로소프트 Hyper-V, KVM
2.2.2. Type2 하이퍼바이저 : 호스트(Host) 기반
Type2는 하드웨어 위에 호스트 운영체제(Host OS)가 있고, 그 위에서 하이퍼바이저가 다른 응용프로그램과 유사한 형태로 동작한다. 이 타입의 하이퍼바이저에 의해서 관장되는 가상머신의 게스트OS는 하드웨어 위에서 3번째 수준으로 구동된다. 기존의 컴퓨터 환경에서 하이퍼바이저를 활용하는 것이기에 설치가 용이하고 구성이 편리한 장점이 있다. 반면, Type1 보다는 성능이 떨어질 수 있다
ex) VMware server, VMware Workstation, Virtual box
2.3. 하이퍼바이저의 특징
장점
하이퍼바이저에 의해 구동되는 VM은 각 VM마다 독립된 가상 하드웨어 자원을 할당받는다.
즉, 각 VM마다 논리적으로 분리되어 있어서 한 VM에 오류가 발생해도 다른 VM으로 퍼지지 않는다.
단점
1. 완전한 운영체제가 설치되기 때문에 대량의 메모리가 필요하다.
우분투 리눅스 서버를 올리려고 할 때, 메모리상에 로드되는 내용만해도 500MB 정도가 소모된다. 예를 들어, 가상머신 10개에 똑같이 우분투 리눅스 서버를 올리려고 할 때, 5GB 정도의 메모리가 사용될 수 있다. 물리적인 메모리의 양이 작은 경우 쓰레싱(Thrashing)을 초래해서 성능 저하가 발생할 수도 있다.
2. CPU 성능 확보에 대한 문제가 있다.
서로다른 애플리케이션이 CPU 자원에 대한 요청을 할 때 CPU 자원에 대한 경쟁이 발생하게 된다. 이 때, 우선순위 등을 주어서 운영체제 내에서는 효율적으로 관리를 할 수 있지만 가상화된 CPU가 실제 물리 CPU를 어떻게 얻을지는 정해지지 않았다. 예를 들어 1번 게스트 OS에 서 우선순위가 높다고 해도, 게스트 운영체제 자체가 우선순위가 낮다면 물리적인 CPU 자원을 확보하는게 쉽지 않을 수 있다.
이와 같은 원인으로 CPU 자원 경쟁에 따른 성능저하가 있을 수 있다. 가상화 서비스에서는 이런 문제를 해결하기위해 Dedicate 서비스를 제공한다. 즉, CPU 같은 물리적인 자원을 특정 게스트 운영체제에게 전담배치시키는 서비스이다.
3. 시스템 운영에 대한 통합적인 지식이 필요하다.
일반적인 시스템에서는 소프트웨어 개발과 시스템 운영이 분리가 되어 있었다. 하지만 가상머신체제에서는 이미 만들어진 시스템 위에 새로운 시스템을 구축하는 개념이기 때문에 통합적인 시스템 운영 지식과 소프트웨어 개발 지식이 통합 관리되어야하는 부담이 있다.
3. 컨테이너
3.1. 컨테이너란
클라우드 컴퓨팅에서 컨테이너는 어플리케이션(App)과 App을 구동하는 환경을 격리한 공간을 의미한다. 가상화의 범주 내에서 컨테이너는 기존 하이퍼바이저와 게스트OS를 필요로 했던 가상머신 방식과는 달리, 프로세스를 격리하여‘모듈화된 프로그램 패키지’로써 수행하는 것을 의미한다
SW를 하나의 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 이동하더라도 안정적으로 실행하는 방법을 모색하여 나온 방법이 바로 컨테이너이다.어플리케이션의 실행에 필요한 라이브러리(Library, Libs), 바이너리(Binary, Bins), 기타 구성파일 등을 패키지로 묶어서 배포하면, 구동환경이 바뀌어도 실행에 필요한 파일이 함께 따라다니기 때문에 오류를 최소화할 수 있다
컨테이너도 VM처럼 프로세싱을 위한 별도의 공간(private space), 루트 권한, 사설 네트워크, IP 주소, 커스텀 라우트, iptable 규칙, 파일 시스템 마운트 등의 기능을 갖추고 있지만 컨테이너는 호스트 시스템의 커널을 다른 컨테이너들과 공유한다는 점에서 크게 차이가 난다.
이 그림에서 볼 수 있듯이, 컨테이너는 유저 공간만을 포함하고, VM에는 포함되는 커널이나 버추얼 하드웨어가 포함되지 않는다. 여러개의 컨테이너가 하나의 호스트 머신에서 돌아갈 수 있도록 각 컨테이너는 자신만의 격리된 유저 공간을 가지고 있다. 즉, 운영체제 단계의 아키텍처를 모든 컨테이너가 공유하고 있는 것이다. 처음부터 새로 생성되는 부분은 bins와 libs 뿐이며, 이것이 컨테이너가 한결 가벼워질 수 있는 이유이다.
그렇다면 도커는 어떤 역할을 하는가?
2022.04.27 - [⛅ DevOps/Docker] - Docker 개념 정리(2) - Docker(도커)란?
참고 사이트
Docker 이론, 개념 정리
간단하게 소프트웨어를 패키징할 수 있고 전달 가능하다Docker를 이용하면 소비자는 프로그램을 간단하게 설치 가능하다.Docker가 무엇인지 알기 위해서는 컨테이너를 알아야 한다.화물 컨테이너
velog.io
Jiwon Yeom – Medium
Read writing from Jiwon Yeom on Medium. Data Analyst. Ex web developer. Multilingual translator. Every day, Jiwon Yeom and thousands of other voices read, write, and share important stories on Medium.
medium.com
https://hiaurea.tistory.com/53
[Docker] 클라우드, 가상화, 컨테이너 내용 총정리
들어본 용어는 많고 뭔가 정리가 될 듯 말듯 머릿속에 떠다니는 많은 개념들을 총정리 해봤다. 가상화는 "기술" 클라우드 컴퓨팅은 가상화 기술을 기반으로 한 "서비스" 1. 가상화 1-1 가상화의
hiaurea.tistory.com
https://m.blog.naver.com/shakey7/221599135601
클라우드 가상화 기술 정리 1 (서버 / 운영체제 OS / 전가상화 / 반가상화 / 하이퍼바이저 / VM웨어 /
1. 클라우드와 가상화 기술 배경 - 클라우드 컴퓨팅은 하드웨어와 이들을 연결하는 네트워크로 구성된 환경...
blog.naver.com