Docker만 있어도 컨테이너를 실행하는 데에는 아무 문제가 없지만, 서비스가 커지면 문제가 생긴다. 예를 들어, 웹 서버 10개, API 서버 20개, DB 서버 3개로 이루어진 규모의 서비스가 있다고 할 때, 메인 서버가 죽었을 때 재시작할 서버는 어떤 것으로 할지, 트래픽이 늘어나면 컨테이너를 어떻게 늘릴지 등의 문제가 생긴다. Docker는 단순히 컨테이너를 실행하는 기술이고, 수많은 컨테이너를 자동으로 관리하는 시스템이 Kubernetes이다.
Kubernetes란 컨테이너 오케스트레이션 플랫폼으로, 컨테이너 생성, 서버 배치, 장애 복구, 스케일링을 자동으로 수행한다. Kubernetes의 주요 개념으로는 Pod(=Container), Deployment, Service, Namespace가 있다.
먼저 Pod란 쿠버네티스가 관리하는 최소 단위로, Pod 1개 = Container 1개 라고 생각할 수 있다. Depolyment란 몇 개의 Pod를 유지할지 정의하며, Pod의 IP는 계속 바뀌기 때문에 고정 주소 역할을 하는 Service를 사용한다. 마지막으로 Namespace는 프로젝트를 구분하는 논리적 공간이다.
| 항목 | Docker Compose | Kubernetes |
|---|---|---|
| 목적 | 로컬 개발 | 대규모 운영 |
| 서버 수 | 보통 1대 | 여러 대 |
| 장애 복구 | 제한적 | 자동 |
| 자동 스케일링 | 없음 | 있음 |
| 무중단 배포 | 제한적 | 지원 |
| 난이도 | 쉬움 | 어려움 |
정리하면, Docker는 컨테이너를 만드는 기술이고, Kubernetes는 수많은 컨테이너를 자동으로 배치, 확장, 복구, 운영하는 플랫폼이다.