가상 머신과 컨테이너
컨테이너
가상 머신과 컨테이너
1. 컨테이너
1) 컨테이너란?
무겁고 느린 가상화방식을 해결하기 위해 프로세스를 격리하는 방안이 등장했다.
컨테이너화는 커널 하나에 격리된 여러 개의 사용자 공간 인스턴스가 포함 될 수 있도록 애플리케이션 수준에서 이루어지는 가상화의 일종이다. 이런 인스턴스를 컨테이너라고 부른다.
컨테이너는 애플리케이션 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 구성을 하나의 인스턴스에 패키징하는 기본적인 방법을 제공한다. 컨테이너는 하드웨어에 설치된 커널(운영 체제) 하나를 공유한다.
2) 장점과 단점
•
장점
◦
가벼움
서버에서 가상 머신보다 공간을 더 적게 차지하며, 시작하는데 일반적으로 몇 초 밖에 걸리지 않는다.
◦
탄력성
탄력적이여서 리소스를 별도로 할당할 필요가 없다. 따라서 컨테이너는 서버의 리소스를 더 효율적이고 동적으로 사용한다. 컨테이너 하나에 대한 수요가 감소하면 여분의 리소스를 다른 컨테이너에서 사용할 수 있다.
◦
밀도
밀도란 물리적 서버 한 대에서 동시에 실행할 수 있는 개체 수를 의미한다. 컨테이너화를 사용하면 호스트 서버의 리소스를 완전히 이용하지만 과다하게 이용하지 않는 밀집된 환경을 조성할 수 있다. 컨테이너는 전용 운영 체제를 호스트할 필요가 없으므로 가상화와 비교하여 보다 밀집한 환경이 가능하다.
◦
성능
리소스 압박이 큰 경우 애플리케이션 성능은 하이퍼바이저를 사용하는 것보다 컨테이너가 훨씬 우수하다.
가상머신에서는 게스트 OS도 자체 메모리 요구 사항을 충족해야 하기에 RAM을 호스트에서 가져와야한다.
◦
유지관리 효율
운영 체제 커널이 하나밖에 없기 때문에 운영 체제 수준에서 업데이트 또는 패치 작업을 한 번만 수행하면 변경사항이 모든 컨테이너에 적용된다. 이를 통해 서버를 더 효율적으로 운영하고 관리한다.
•
단점
보안 이슈가 있다. 컨테이너는 커널을 공유한다. 즉, 논리적으로 격리한 개념인데 당연히 물리적으로 격리한 가상머신에 비해서는 보안이 취약 할 수 밖에 없다. 그리고 컨테이너는 MSA( Microservice Architecture ) 와 최적화 되었을때 빛을 본다.
2. 가상 머신과 컨테이너
1) 차이
컨테이너 형 가상화 | 하이퍼바이저 형 가상화 | |
시작 시간 | 짧다(초) | 길다(분) |
무게 | MB, 애플리케이션 + 런타임 소프트웨어 | GB, OS + 애플리케이션 + 런타임 소프트웨어 |
Guest OS | 호스트 OS와 동일한 OS | Windows/Linux 등 다양한 선택 가능 |
이식성 | 컨테이너 이미지 그대로 사용 가능 | 대부분 가상 이미지에 대한 변환이 필요 |
데이터 관리 | 컨테이너 내부에 있는 데이터는 종료시 소멸되며, 필요에 따라 스토리지를 이용하여 저장 | VM 내부 또는 연결된 스토리지에 저장 |
Guest OS와 관계 | Host OS를 커널 수준으로 분리하여 OS를 가상화 형태로 사용, 필요에 따라 호스트와 리소스 공유 가능 | Guest OS는 하드웨어(가상)로 인식 |
성능 | 컨테이너화된 애플리케이션은 완전한 가상 머신보다 리소스를 더 적게 사용하고 호스트 메모리에 가해지는 부담을 줄일 수 있도록 운영 체제 환경(커널)을 공유한다. | 각 가상 머신마다 전용 운영 체제가 있기 때문에 가상 머신에 구축된 애플리케이션을 실행할 때 메모리 사용량이 필요 이상으로 많아져 가상 머신이 호스트에 필요한 리소스를 모두 사용할 수 있다. |
유지관리와 업데이트 | 컨테이너 호스트(컨테이너를 호스트하는 컴퓨터)의 운영 체제만 업데이트하면 됩니다. 따라서 유지관리가 매우 간소화된다. | 운영 체제를 업데이트하거나 패치할 경우 기존 컴퓨터를 하나씩 업데이트해야 하고 각 게스트 OS를 개별적으로 패치해야 한다. |
작동 방법 | 1. 컨테이너는 마이크로서비스 또는 애플리케이션과 이를 실행하는데 필요한 모든 것(이미지)이 포함되어있다. 2. 이미지라고 하는 모든 라이브러리와 종속성을 포함하는 코드 기반 파일에 저장된다. 3. 이 이미지는 RPM 패키지 및 구성 파일과 함께 제공되므로 이 파일은 Linux 배포 설치로 간주될 수 있다. 4. 컨테이너는 너무 작기 때문에 일반적으로 수백 개가 서로 느슨하게 결합되어 있으므로 컨테이너 오케스트레이션 플랫폼(ex: 쿠버네티드 , Red Hat OpenShift)을 사용하여 컨테이너를 프로비저닝하고 관리한다. | 1. 하이퍼바이저라는 소프트웨어는 리소스가 파티셔닝되어 가상머신(VM)전용으로 할당될 수 있도록 리소스를 물리 머신에서 분리한다. 2. 사용자가 물리 환경의 추가 리소스를 요구하는 VM 명령을 발행하면 하이퍼바이저는 이 요청을 물리 시스템으로 전달하고 변경 사항을 캐싱한다. 3. VM은 물리 서버처럼 작동하므로 애플리케이션 종속성 및 대규모 OS 설치 공간의 단점을 증대한다. |
2) 선택 기준
쉽게 이동하는 작은 인스턴스(컨테이너)가 필요한지, 사용자 정의 IT 리소의 반영구적 할당이 필요한지에 따라 달라진다.
•
가상머신
많은 작업을 실행 할 때, 가상머신(VM)은 모놀리식 워크로드 패키징에 사용되는 기존 방식인 단일 컨테이너보다 훨씬 더 많은 작업을 실행한다. 하지만 확장된 기능으로 인해 OS, 애플리케이션, 라이브러리에 의존하며 VM의 이식성이 크게 저하된다.
◦
컨테이너와 비교해 다음 용도에 적합하다.
1.
기존, 레거시 및 모놀리식 워크로드 수용
2.
위험한 개발 사이클 분리
3.
인프라 리소스(ex: 네트워크, 서버, 데이터) 프로비저닝
4.
다른 OS에서 또 다른 OS 실행 (ex : 리눅스에서 유닉스 실행)
•
컨테이너
빠르게 자주 변경하고 다시 배포해야 하는 거의 모든 애플리케이션이 컨테이너화에 적합합니다. 마이크로서비스 아키텍처를 사용하는 애플리케이션의 경우에도 좋습니다.
◦
이식성
컨테이너는 특성상 작고 가벼워 퍼블릭, 프라이빗, 하이브리드 및 멀티클라우드 환경뿐 아니라 베어메탈 시스템 간에도 쉽게 이동
◦
자동 관리 환경
퍼블릭, 프라이빗, 하이브리드 및 멀티클라우드 환경 전반에 걸쳐 일관된 개발 및 자동 관리 환경을 제공하기 위해 설계된 마이크로서비스 컬렉션(클라우드 네이티브 애플리케이션)을 배포하기에 이상적이다.
◦
빌드,최적화 가속화
클라우드 네이티브 애플리케이션을 사용하여 새 애플리케이션이 빌드 방법, 기존 애플리케이션이 최적화 방법, 이 모든 애플리케이션 연결 방법을 가속화한다. 주의할 점은 컨테이너가 기본 OS와 호환되어야 한다.
◦
VM과 비교하여 다음 용도에 적합하다.
1.
클라우드 네이티브 애플리케이션 빌드
2.
마이크로서비스 패키징
3.
DevOps 또는 CI/CD 프랙티스 촉진
4.
동일한 OS를 공유하는 다양한 IT 설치 공간에서 확장 가능한 IT프로젝트 전환