좀 더 근본적인 얘기
컴퓨터 계층을 분리하면,
H/W + S/W(system area[kernel] + app area[user agent])
VMWare는 어떻게 동작할까?
컴퓨터 내부에 Host OS와 별개의 Guest OS를 동작시키는 가상(virtual) 머신을 구현한다.
중요한 점은, 머신과 실제 컴퓨터의 구조는 비슷할 수 있어도 host상에 구현 되는 계층은 같지 않다.
e.g.
host의 H/W : CPU, memory, NIC 등
geust는 H/W를 생성하기 위해,
host의 H/W영역에 존재하는 physical 장치들을 가상화 하여 S/W로 구현한다.
다시 말하면,
guest의 H/W 계층은 physical 역할을 수행하는 S/W이다. 별도의 H/W는 없다.
다시 말하면,
guest의 H/W 계층은 host의 S/W system area[kernel] 계층에 위치하고,
host의 H/W를 분할 및 에뮬레이션하여 사용하는 것이다.
사용자가 관심있는 것은?
결국 app이다.
window를 쓰고있으니까 excel을 쓰는 것이지, excel을 쓰기 위해 window를 설치하는 경우는 드물다.
그렇다면?
같은 os에서 다수의 app을 구동시킨다면, VMWare처럼 머신마다 별도의 H/W, os 계층을 가질 필요는 없지 않을까?
=> Docker의 배경
근데, 현재도 window에서 여러 app 쓰잖아?
그럼 같은 os를 쓰더라도, A 컴퓨터에서 동작하는 app이 B 컴퓨터에서도 똑같이 동작할까? - 보장 못함
해결법은?
단일(혹은 단일 목표의) app과 구성 요소만 격리 한다.
즉, app과 연관된 lib, binary 파일 등만 가상의 컨테이너화 하고, 이를 처리하는 컨테이너 엔진을 구성한다.
컨테이너 엔진이 host os의 커널을 공유받으며, 컨테이너화된 app을 동작 시킨다.
add
k8s의 배경 : 모든 요소(was, app, storage 등)를
무작정 컨테이너화 해서 넣어도 정상 동작할까?
정상 동작 한다면, 최적의 성능은 보장될까?
아니므로, 오케스트레이션을 위해 사용
이점은?
1. app 수준의 격리를 통해 다른 pysical 장치에서도 같은 실행환경 보장
(단, 장치간의 os 커널 종류가 같을 경우만 => 컨테이너 엔진이 host os의 커널을 공유받으므로)
2. 가상 머신 기반의 격리보다 빠른 성능 (app만 격리, 별도의 os, h/w 필요x)