GitHub

https://github.com/Choidongjun0830

클라우드

Container 기초 개념, VM과 Container

gogi masidda 2024. 10. 1. 11:33

출처: https://dodghek.tistory.com/8

 

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하다. 
  • 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