Virtual Machine
- Hypervisor가 각각의 App이 독립된 하드웨어에서 돌아가는 것처럼 만들어준다.
- 물리적 하드웨어 자원을 가상화하여 여러 운영체제를 동시에 실행할 수 있도록 하는 소프트웨어이다.
- 물리적 자원을 가상 머신에게 분배하고, 각각의 가상 머신이 독립적으로 실행되도록 한다.
- Guest OS를 설치하고 동작시키므로 무겁다.
- Hypervisor 위의 Guest OS는 Host OS와 달라도 된다.
- AWS에서는 VM을 Instance라고 한다.
- 코어를 나눠서 서비를 내준다. / 메모리를 잘라서 내준다. <= Hypervisor의 역할
- Infrastructure as Service => IaaS
- IaaS는 서버, 스토리지 및 네트워크 등과 같은 사용자가 필요한 컴퓨팅 자원을 가상화된 형태로 제공하는 서비스이다.
- 이 서비스 이용시 사용자는 서버, 스토리지, 네트워크 등의 IT 인프라를 구축할 필요없이 클라우드 업체가 제공하는 가상 인프라를 활용할 수 있다.
- 장점
- 필요한 만큼의 자원을 동적 할당 가능
- 인프라 확장에 용이
Container
- HostOS에서 GuestOS 없이 바로 실행 가능하다. 컨테이너라는 독립된 공간에서 프로세스들이 동작한다.
- 운영체제는 공유
- Container는 VM위의 운영체제 위에서도 실행될 수 있고, 운영체제 바로 위에서도 실행될 수 있다.
- OS 위에서 쪼개준다. OS를 따로 설치할 필요가 없다. 표준화된 패키징 방법이다.
- OS 위에 독립되게 보여준다. 분리를 더 잘해준다.
- Container Runtime을 통해 논리적으로 분리해준다.
- Container Runtime은 컨테이너를 생성하고 실행하는데 필요한 기능을 제공하지만, 논리적 분리는 namespace와 cgroup을 통해 이루어진다.
- Container Runtime은 분리를 해주면서도 패키지화된 SW를 주면, 하나하나 꺼내서 프로세스로 돌아가게 해준다.
- Container Runtime은 주로 Host OS와 컨테이너 중간에 위치한다.
- 예시
- Docker Engine이 컨테이너를 만들면, Docker Engine의 핵심 요소인 Container Runtime이 컨테이너를 관리해준다.
- Container Runtime은 이러한 기능을 활용하여 컨테이너가 격리되고 자원을 할당할 수 있게 한다.
- 특징
- Portable
- 컨테이너는 모든 dependency, 라이브러리가 포함되어 있어서 다른데서 돌려도 잘 돌아간다.
- Separation of Concerns
- 카타 컨테이너: 경량 VM으로 조금 더 분리되게 해줌
- 하나의 컨테이너에 다른 회사 것이랑 같이 올라가면 보안 문제
- => 하나의 컨테이너에 하나의 회사만
- VM 위에 컨테이너를 돌려도 Portable하다.
- Portable
- namespace와 cgroup을 이용해 별도의 Guest OS 없이도 분리 가능하다.
- namespace
- 사용되는 다양한 변수 등의 name들을 분리 기술을 사용해서 각 그룹이 독자적으로 사용하게 한다.
- 네임 스페이스는 PID, 네트워크 등을 포함한 여러 시스템 자원을 격리할 수 있다.
- 프로세스간 자원 공유를 제한하고, 독립된 실행 환경을 보장한다.
- cgroup
- 자원의 사용량을 제한하고 관리한다.
- CPU, 메모리 등 자원 사용량을 제한, 할당한다.
- namespace와 cgroup은 함께 사용되어 각 컨테이너에 대해 자원을 독립적으로 관리하고 격리할 수 있게 해준다.
- namespace가 자원을 격리하고, cgroup은 자원의 사용량을 제한하고 관리한다.
VM vs Container
- VM
- Host OS 위에 Guest OS가 동작하는 구조
- Host OS 위에서 Hypervisor를 통해 자원을 가상화하여 VM을 동작시킨다.
- Container
- Host OS에서 프로세스를 위한 공간을 별도로 분리
- 기본적인 Binary, Library만을 Guest OS 대신 사용한다.
namespace가 다르면 PID가 같아도 상관없다.
cgroup은 namespace에 리소스를 제한하고 할당한다.
728x90
'클라우드' 카테고리의 다른 글
Kubernetes Basic - 1 (0) | 2024.10.06 |
---|---|
OpenStack 기초, VLAN과 VXLAN (0) | 2024.10.05 |
Jenkins로 커밋 후 자동 빌드 ~ yaml 수정 후 push까지 pipeline script (윈도우 환경) (0) | 2024.08.17 |
이미지로 만든 Spring 프로젝트 쿠버네티스에 배포하기 (우분투 환경) (0) | 2024.08.12 |
Spring 프로젝트 이미지로 만들고 docker hub에 업로드하기 (Ubuntu 환경) (1) | 2024.08.11 |