1. Virtualization
- 컴퓨터 리소스(CPU, MEM, Storage, Network 등)의 추상화
- 단일 컴퓨터의 리소스를 가상 머신(VM)이라고 하는 다수의 가상 컴퓨터로 분할하는 것
- 장점
- 리소스 효율성: 새로운 서비스를 위해 서버를 구매하지 않아도 된다. → VM을 위한 컴퓨터는 필요
- 관리 편의성: Infrastructure as Code(Iac), 자동화
- 가동 중단 시간 최소화: VM을 여러개 두어, High Availability를 구성 → 망가지면 버린다.
- 프로비저닝 고속화: 더 많은 컴퓨팅 리소스가 필요하면, VM을 더 만든다.
2. VM vs Container
- VM은 각각의 OS가 존재(Type1, Type2)
- Container는 동일한 OS Kernel을 공유하며, 프로세스 수준에서 격리
3. Container
- 장점
- 어플리케이션과 구동 환경(파일 시스템, 환경 변수)만을 가상화 → 프로세스
- 부팅 시간이 따로 없고, fork()만으로 가상화 구현
- 이미지가 가볍고, 실행이 빠르다.
- 단점
- Kernel Panic 발생 시, 모든 컨테이너가 죽음
- 여러 대의 VM을 두어 극복
- VM 위에 Container 띄우기로 극복
- 앱이 구동되는 환경까지 감싸서 실행할 수 있도록 하는 격리 기술
- 컨테이너 == (마치 가상머신처럼 작동하는 틀별한) 프로세스
- 격리된 환경 / 제한된 리소스에서 실행되는 프로세스
- vm 생성 없이 동일한 호스트에 독립된 프로세스가 뜨는 것
4. Container Runtime(ex: Docker)
- 컨테이너를 만들고(Build) 실행(Run)하는 도구
5. Container orchestration
- Docker가 있는데 왜 Container orchestration가 필요한가?
- 대용량 서비스 관점에서 생각해야함
- 100대 이상의 VM, 10,000개 이상의 Container
- 배포
- docker stop && docker run
- 모니터링
- 별도의 Health Check Process - 서비스가 죽었을 시 이를 감지하고 다시 서비스를 제공
- docker rm - f && docker run