Kubernetes(이하 K8s) 를 이해하기 위해선 Container와 Orchestration 을 명확히 이해해야 한다.
-. Containers (Docker)
0. Container란
컨테이너는 완전히 격리된 환경이다. 고유의 프로세스나 서비스를 가질 수 있고 고유의 네트워킹 인터페이스 마운트도 가질 수 있다. 다만 커널이라는 운영체제는 공유
1. Docker 가 필요한 이유
End to End Stack 을 설정하기 위한 요구사항이 있다고 가정 (NodeJS 를 이용한 웹 서버나 MongoDB같은 데이터베이스)할 때 골머리를 썩는 부분이 한두개가 아니다.
첫째. 기본 운영 체제와의 호환성
- 다양한 서비스가 운영 체제 버전과 호환이 되는지 확인
둘째. 서비스와 라이브러리 간의 호환성 OS 종속성
위와 같은 이유로 어플리케이션을 업그레이드 할 땐 항상 구성요소와 기본 인프라간에 호환성을 확인하는 프로세스를 거쳐야 했다.
즉, 구성 요소에 영향을 주지 않고 구성 요소를 수정하거나 변경할 수 있는 호환성 문제를 해결할 Docker 가 각광받는건 당연지사
2. Docker 의 장점
Docker 를 각각의 구성 요소로 별도의 컨테이너에 실행할 수 있다. 고유의 라이브러리와 종속성을 갖고(모두 같은 VM과 OS에 있지만 별도의 환경이나 컨테이너 안에서 동작)
또한 Image 로 배포할 수 있고 업그레이드 과정에서도 실 서비스에 영향을 주지 않고 테스트 해볼 수 있음
-. Orchestration
Container에서 서버를 운영할 때 서버의 사용자가 감소 혹은 증가할 때, 특정 조건에 맞춰 컨테이너를 자동으로 배포하고 관리하는 이 전체 프로세스를 Orchestration 이라고 일컫는다.
이와 같이 서비스를 지원하는 플랫폼은 K8s 를 포함해 여러가지가 있다.
> Docker Swarm(Docker) - 셋업과 시작이 간편하지만 고급 설정 부분에서 결핍
> Kubernetes(Google) - Good
> MESOS(Apache) - 셋업과 시작이 꽤 어렵지만 고급 기능을 지원
Docker 와 가상 머신의 차이