CS/Docker

[Docker] 컨테이너 오케스트레이션의 개념과 필요

leejunkim 2025. 8. 20. 21:58

WeeklyPaper: 컨테이너 오케스트레이션의 개념과 필요성을 설명하고, Docker 단독 사용 환경과 비교하여 컨테이너 오케스트레이션이 해결하는 주요 문제점 3가지(자동 확장, 자가 복구, 선언적 인프라)를 설명하세요.


실제 서비스 환경에서는 수십, 수백 개의 컨테이너가 여러 서버에 걸쳐 동시에 실행되어야 한다 (Microservices에 많이 쓰임). 

유저 트래픽이 몰리면 컨테이너를 늘리고 특정 컨테이너에 문제가 생기면 즉시 교체해야 하는데, 이 모든 것을 사람이 직접 24시간 수동으로 모니터링 하는 것은 불가능하다.

Docker 단독 사용의 한계

Docker만로도 컨테이너를 생성하고 실행하는 것은 잘 해낼 수 있지만, 여러 서버에 걸쳐 수많은 컨테이너를 운영하는 프로덕션 환경에서는 여러 문제점들이 발생할 수 있다:

  • 배포 어려움 - 100개의 컨테이너를 10대의 서버에 어떻게 효율적으로 분산 배치할 것인가?
  • 장애 대응 - 특정 서버가 다운되거나 컨테이너 하나가 갑자기 종료되면 어떻게 감지하고 복구할 것인가?
  • 확장성 - 갑자기 사용자가 몰릴 때 어떻게 컨테이너 수를 자동으로 늘릴 것인가? 반대로 사용자가 빠져나가면 어떻게 다시 줄일 것인가?
  • 네트워킹 - 수많은 컨테이너들이 서로 어떻게 통신하고 외부 사용자는 이 서비스에 어떻게 접근할 것인가?

이때 우리를 도와줄 수 있는 기술이 컨테이터 오케스트레이션이다.

 

컨테이너 오케스트레이션(Container Orchestration)

컨테이너 오케스트레이션이란, 수많은 컨테이너의 배포, 관리, 확장, 네트워킹을 자동화하는 기술이다. 오케스트라의 지휘자가 수많은 악기 연주자들을 조율하여 하모니를 만들어내듯이, 컨테이너 오케스트레이션 툴은 여러 서버에 흩어져 있는 컨테이너들을 조화롭게 관리하고 지휘하는 역할을 한다.

 

위의 언급했던 문제들을 해결하는 핵심 요소들은 이렇다:

 

1. 자동 확장 (Auto scaling)

  • 갑작스러운 트래픽 증가나 지원 사용량 변화에 따라 컨테이너 수를 자동으로 늘리거나 줄여주는 기능이다. 알아서 잘 결정해주고 실행을 해주어서 개발자가 손댈 필요가 없다.
  • 반대로 트래픽이 떨어지면 불필요한 컨테이너를 제거해서 자원을 효율적으로 사용해서 낭비를 줄일 수 있다는 점이 큰 장점이다.

2. 자가 복구 (Self healing)

  • 실행중인 컨테이너/서버에 문제가 발생했을 때, 사람의 개입 없이 시스템이 스스로 문제를 감지하고 해결하는 복구 기능이다.
  • 오케스트레이션 도구는 주기적으로 컨테이너의 상태를 확인한다(health check). 만약 컨테이너에게서 응답이 없거나 비정상적으로 종료되면 즉시 컨테이너는 제거되고 새 컨테이너를 자동으로 생성 -> 교체한다.
  • 이와 같이 높은 안정성을 보장한다.

3. 선언적 인프라 (Declarative Infrastructure)

  • 개발자가 일일히 뭘 해야할지 알려주는 방식이 아니라 어떤 상태여야하는지 정의하는 방식이다.
  • 개발자는 YAML/JSON 형식의 설정 파일에 원하는 최종 상태를 선언하고, 오케스트레이션 도구는 이 선언된 상태와 현재 시스템의 상태를 계속 비교한다. 만약 차이점이 생기면 차이점을 없애기 위해 자동으로 일해준다.

Kubernetes (k8s) 와 Docker compose

쿠버네티스는 유명하고 자주 쓰이는 컨테이너 오케스트레이션 도구이다. 도커 플랫폼에서도 도커 컴포즈라는 비슷한 툴이 존재한다.

간단히 둘의 차이점을 요약하자면:

  • 쿠버네티스 = 여러 서버에 걸쳐 있는 수많은 컨테이너들을 운영하기 위한 도구
    • 여러개의 서버(노드)를 묶어 하나의 거대한 클러스터를 구성한다
    • 수백, 수천개의 컨테이너를 여러 서버에 자동으로 분산 배치하고 관리하는 것을 목표로 한다
    • 주로 프로덕션 환경에서 사용
  • 도커 컴포즈 = 단일 서버에서 여러 컨테이너를 정의하고 실행하기 위한 도구
    • 단일 서버 (호스트)에서 여러 컨테이너들이 어떻게 서로 연결되고 동작할지를 docker-compose.yml 파일 하나에 정의하고 실행한다
    • 여러 서버에 걸쳐서 동작하는 기능은 없다 (한 서버에만 돌아간다)
    • 주로 개발환경에서 사용
특징 쿠버네티스 (Kubernetes) 도커 컴포즈 (Docker Compose)
대상 환경 프로덕션 (실제 서비스) 개발 및 테스트
관리 범위 클러스터 (여러 서버) 단일 서버
주요 기능 오케스트레이션, 자동 확장, 자가 복구, 로드 밸런싱 다중 컨테이너 정의 및 동시 실행
복잡성 높음 (학습 곡선 가파름) 낮음 (간단하고 배우기 쉬움)
설정 파일 YAML (매우 상세하고 다양한 오브젝트 정의) docker-compose.yml (상대적으로 단순함)

참고로 쿠버네티스 말고도 다른 툴들이 존재한다:

  • Amazon  Elastic Container Service (ECS)
  • Docker Swarm 등등

'CS > Docker' 카테고리의 다른 글

[Docker] db-data 볼륨과 데이터 저장  (3) 2025.08.25
[Docker] 컨테이너 기술 VS Docker  (1) 2025.08.19