본문 바로가기

Cloud Native

Container 총정리

Cloud Native 기술의 기초가 되는 지식들? 헷갈릴 수 있어서 정리해보려고 한다.

 

 

VM과 Container 어떻게 다르지?

VM vs Container

VM

VM은 하이퍼바이저 위에서 구동되며 Guest OS를 포함하고 있다는 것이 특징이다.

 

하이퍼바이저란?

  • 다수의 OS를 구동할 수 있게 하는 소프트웨어
  • 하드웨어를 가상화하면서 VM들을 관리하는 관리자라고 할 수 있다
  • 네이티브형, 호스트형이 있다
  • VM은 독립적인 하드웨어 자원을 할당 받으므로 완전히 독립된 환경에서 구동된다. (자원 공유 X)

Container

컨테이너는 Guest OS를 필요로 하지 않고, 애플리케이션을 실행시킨다.

컨테이너들은 OS Kernel을 공유하며 유저 공간 만을 분리한다. (/bin/lib 부터 생김)

애플리케이션에 필요한 라이브러리와 바이너리, 기타 구성 파일을 '이미지' 단위로 빌드하여 배포!

 

컨테이너 기술은 사실 LXC(Linux Container)로 부터 발전한 것

  • 프로세스 간의 격리를 위해 사용하던 기술
  • chroot: 특정 디렉토리를 루트 디렉토리로 인식하게끔 하는 것
  • 네임 스페이스: 리눅스 시스템 자원을 묶어 프로세스에 할당하는 것
  • cgroup: CPU, 메모리 등 자원 사용량을 관찰하며 특정 애플리케이션이 자원을 과다하게 사용하는 것을 막는 것

 

VM과 Container의 장단점은?

컨테이너의 장점

  • Guest OS가 없기때문에 가볍다. 가볍기때문에 컨테이너의 복제, 배포가 빠르다.
  • 마이크로서비스 아키텍처 구성에 효율적이다. 어플리케이션이 실행되는데 필요한 만큼의 자원을 할당받을 수 있다.

컨테이너의 단점

  • 보안문제가 있다! 컨테이너를 보호하기 위해서는 많은 노력이 필요하다고 한다. 컨테이너 하나가 뚫리면 OS Kernel이 위험해지는 것. 모든 컨테이너가 위험해질 수도 있다.
  • 패키징이 까다로운 문제! 무엇에 의존하는가?

VM의 장점

  • 보안! 완벽히 격리되어있기 때문에 하나의 VM이 공격당해도 다른 VM들은 정상적으로 작동이 가능하다. 공유되는 것이 없기 때문이다.

VM의 단점

  • 컨테이너의 장점들에 대비되는 것 ⇒ 무겁다

 

Container는 어떻게 활용될까?

마이크로서비스

마이크로서비스를 구성할 때 컨테이너를 활용하면 기능별로 신속하게 배포할 수 있음!

 

마이크로서비스가 뭐지?

  • 어플리케이션을 기능(서비스)별로 나누어 변경과 조합이 가능하게 한 구조
  • 배포 및 수정이 간편하다

개발 환경 이전

어플리케이션과 어플리케이션의 구동 환경을 그대로 담은 후 개발 환경을 이전하면, 장애 걱정없이 안정적으로 이전할 수 있음!

 

 

CNCF (Cloud Native Computing Foundation)?

컨테이너와 관련된 다양한 기술적인 문제들을 오픈소스를 통해 해결하려는 재단