Cloud Native 기술의 기초가 되는 지식들? 헷갈릴 수 있어서 정리해보려고 한다.
VM과 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)?
컨테이너와 관련된 다양한 기술적인 문제들을 오픈소스를 통해 해결하려는 재단
'Cloud Native' 카테고리의 다른 글
[Jenkins] Kubernetes에 Jenkins 분산 빌드 환경 설정 (Master-Slave) (0) | 2021.03.23 |
---|---|
[Kubernetes] 쿠버네티스 API 확장하기 - custom resource, crd (0) | 2020.12.06 |
[Kubernetes] 쿠버네티스 플러그인 추천 (kubectx, kubens, ...) (0) | 2020.12.05 |
[Kubernetes] 쿠버네티스 입문하기 (0) | 2020.09.16 |