가상머신(Virtual Machine)이란 ?
- 물리적인 컴퓨터 상에 소프트웨어를 이용해 논리적으로 만든 컴퓨터이다.
- 하나의 물리 자원(컴퓨터)에 하나의 운영 환경(OS)만을 사용하는 방식에서 가상화 기술을 사용해 다양한 OS를 사용할 수 있도록 하는 기법이다.
→ 하나의 컴퓨터를 여러명의 사용자가 동시에 사용할 수 있도록 여려대의 작은 컴퓨터로 분할 사용하거나,
운영체제나 하드웨어 등의 구성을 달리해 운영하고자 할 때 주로 사용한다.
장점
1) 사용자는 온전한 시스템을 가지고 혼자 사용하고 있는 것처럼 느낀다.
2) 가상머신이라는 별도의 고유하고 안전한 환경으로 분할해 사용한다면 바이러스 문제로부터 자유롭다.
가상머신에서 컨테이너로
가상머신에서 컨테이너 개념이 등장한 이유는 무엇일까 ?
가상머신을 사용하면 애플리케이션 실행환경이 분리되어 CPU, 메모리, 디스크 등 물리적 자원의 쿼터를 분배할 수 있다는 장점이 있지만, 다음과 같은 단점도 있다.
대량의 메모리 필요
완전한 운영체제가 설치되어야 한다는 것은 그만큼 큰 메모리가 소모된다는 의미이기도 하다.
우분투 리눅스 서버를 올리려고 할 때, 메모리 상에 로드되는 내용만 해도 500MB 정도가 소모된다.
그렇게 되면 가상머신 10개에 똑같은 우분투 리눅스 서버를 올린다면 5GB 정도의 메모리가 사용된다는 것이다.
물리적인 메모리의 양이 부족하게 되면 쓰레싱(Threashing)이 발생하여, 결국 심각한 성능 저하를 초래할 수 있다.
CPU 성능 확보 문제
VM은 자체적으로 게스트 OS를 가지고 있다. 이것은 VM들의 자체 커널, 드라이버, 어플리케이션 바이너리들을 포함한다.
또한, VM은 호스트 OS에서 돌아가는 한 하이퍼바이저를 운영한다.
그 결과, 한 어플리케이션이 CPU와 상호작용 하기 위해서는 운영체제와 하이퍼바이저를 거쳐야 한다.
서로 다른 애플리케이션이 CPU 자원에 대한 요청을 할 때 경쟁이 발생하게 된다.
이 때 우선순위를 주어서 운영체제 내에서는 효율적으로 순위를 관리할 수 있는데, 가상화된 게스트 OS 자체가 우선순위가 낮다면 물리적인 CPU 자원을 확보하기 어려워진다. CPU 자원 경쟁에 따라서도 성능 저하가 발생할 수 있다.
시스템 운영에 대한 통합적인 지식 필요
일반적인 시스템에서는, 소프트웨어 개발과 시스템 운영이 분리되어 있었다. 하지만 가상머신 체제에서는 이미 만들어진 시스템 위에 시로운 시스템을 구축하는 개념이기 때문에 통합적인 시스템 운영 지식과 소프트웨어 개발 지식이 모두 갖추어져야 관리할 수 있다는 부담이 있다.
이러한 단점을 극복하기 위해 등장한 개념이 컨테이너다. 리소스와 기능이 제한적인 상황에서 가장 효율적으로 실행되고 운영될 수 있는 경량화된 애플리케이션이 바로 컨테이너다.
시나리오
만약, 우리가 2개의 VM을 한 Windows OS에서 공개하고 싶어한다고 하자
이와 함께 우리는 우리의 서버 코드를 한 VM에서 호스팅하고 다른 VM에선 클라이언트 코드(UI)를 호스팅하고 싶어 한다고 하자.
우리는 Windows OS로 VM을 준비하기로 하고 그것을 복제할 수 있다.
우리가 지금 한 VM을 복제했다는 사실은 OS과 라이브러리 중복을 가져온다.
이것은 또한 드라이버들이 두 OS에서 모두 존재할 필요가 있다는 것을 의미한다.
따라서 두 VM은 많은 메모리 공간을 잡아먹을 것이다. 결과적으로 우리는 물리적 서버에서 소수의 VM만 선보일 수 있다.
VM은, 무거운 컴퓨터 프로그램이다.
버추얼 머신은 서버 메모리를 필요로한다. 이와 함께 컴퓨터 시스템에서 소수의 VM만 동시에 실행할 수 있다.
이러한 VM 부팅 시간 설치, 성능, 유지, 복제 저하 문제는 컨테이너화로 알려진 새로운 기술의 탄생을 가져왔다.
그래서, 컨테이너는 ?
VM은 운영체제를 복제하는 반면, 컨테이너는 한 운영체제를 "공유"한다.
컨테이너들은 게스트 OS를 필요로 하지 않는다. 컨테이너는 소프트웨어 프로그램이다.
컨테이너 내의 모든 응용 프로그램은 OS의 사용자 공간에서 실행되며 호스트 OS의 디자인과 일치하며 커널에만 전용 공간이 제공된다.
→ 이것은 애플리케이션들이 게스트 OS와 하이퍼바이저를 거치지 않고 CPU와 상호작용 할 수 있도록 한다.
단일 호스트 OS와 그것의 어플리케이션 바이너리들을 포함하는 드라이버들은 공유되기 된다.
이 말은 관련 바이너리와 자원들이 컨테이너에서 제공된다는 것을 의미한다.
컨테이너들은 파일 시스템을 복제하고, 우리가 애플리케이션을 안전한 환경에서 돌리도록 해준다.
모든 리소스와 파일들은 컨테이너 파일 시스템 내에서 돌아간다.
라이브러리와 함께 환경 변수들은 컨테이너들 내에서 저장된다. 이것은 컨테이너에서 인스턴스 기반 하이퍼바이저와 비교해 빠른 명령 실행을 촉진한다.
정리
첫 번째, 빠르고 쉬운 배포가 가능합니다.
Layered 구조를 갖는 Container 이미지의 구조 덕분에,
새로 업데이트 된 이미지를 빠르게 다운 받을 수 있습니다. (변경된 layer 부분만 다운로드 하기 때문입니다.)
이와 더불어 guest OS를 포함하지 않아 Container의 up-time은 굉장히 빠릅니다.
VM이 수 분에 걸쳐 up이 되는데 반해 Container는 수 초 만에 up 됩니다.
따라서 업데이트된 버전의 이미지를 빠르게 받아오고, 빠르게 실행할 수 있습니다.
뿐만 아니라 Kubernetes나 OpenShift와 같은 Container Orchestration 도구들과 함께 사용한다면, 이러한 배포과정을 자동화할 수 있습니다.
두 번째, 훌륭한 이식성을 제공합니다.
Container는 OS 수준에서의 가상화 이기 때문에,
OS 수준을 가상화하는 Container 런타임만 있으면 Container 사용이 가능합니다.
따라서 host 환경이 VM이던, baremetal이던, 또는 Window던 Linux던, Container 런타임만 설치된 환경이라면 어디에나 Container를 구동할 수 있습니다.
세 번째, 운영 비용을 절감할 수 있습니다.
VM에 비하여 Container는 하나의 host에 더 많은 격리 환경을 제공할 수 있습니다.
따라서 하나의 host를 더 많은 사용자들에게 제공할 수 있으므로,
운영자의 관점에서 인프라 비용을 절약 할 수 있습니다.
또한, Container의 경우는 guest OS가 올라가지 않기 때문에
보통 OS 라이센스 구입 비용 또한 절약 할 수 있습니다.
위에서 Orchestrator를 사용하면 배포 자동화를 구성할 수 있다고 말씀드렸습니다.
Orchestrator는 배포 자동화 뿐만 아니라 관리 자동화까지도 지원합니다.
Orchestrator의 관리 자동화 기능을 사용하면 운영에 드는 시간적 비용을 절감할 수 있습니다.
📌 참고
https://techit.kr/view/?no=20200624061153
https://5equal0.tistory.com/entry/Container-Container-%EA%B8%B0%EC%88%A0-%EA%B0%9C%EC%9A%94
'CS > 인프라' 카테고리의 다른 글
Active Directory란 ? (0) | 2023.10.30 |
---|---|
LDAP이란 ? (1) | 2023.10.30 |
하이퍼바이저(Hypervisor) 개념 및 종류 (0) | 2022.07.20 |
가상화란 무엇인가 ? Virtualization 개념 및 종류 정리 (0) | 2022.07.20 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!