컨테이너 하나 정도는 수동으로 관리할 수 있지만, 서비스가 성장하면서 수십, 수백 개의 컨테이너를 운영해야 하는 상황이 옵니다. 이때 필요한 것이 바로 컨테이너 오케스트레이션 도구인 Kubernetes(쿠버네티스)입니다.
Kubernetes가 해결하는 문제
Kubernetes는 컨테이너의 배포, 확장, 장애 복구를 자동화합니다. 특정 컨테이너가 다운되면 자동으로 새 컨테이너를 띄우고, 트래픽이 몰리면 컨테이너 수를 자동으로 늘리는 오토스케일링 기능도 제공합니다.
핵심 구성 요소
- Pod: 하나 이상의 컨테이너를 묶은 최소 배포 단위입니다.
- Node: Pod가 실제로 실행되는 서버(가상 머신)입니다.
- Deployment: Pod의 원하는 상태를 정의하고 유지 관리합니다.
- Service: Pod에 접근할 수 있는 안정적인 네트워크 엔드포인트를 제공합니다.
- Control Plane: 클러스터 전체의 상태를 관리하는 두뇌 역할을 합니다.
간단한 예시
apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app image: my-app:latest ports: - containerPort: 3000 위 YAML 파일은 my-app이라는 컨테이너를 3개의 복제본(replica)으로 실행하도록 정의합니다.
언제 Kubernetes가 필요한가
모든 프로젝트에 Kubernetes가 필요한 것은 아닙니다. 트래픽이 적고 컨테이너 수가 적다면 Docker Compose만으로도 충분합니다. 하지만 서비스 규모가 커지고 무중단 배포, 자동 확장, 장애 복구가 중요해진다면 Kubernetes 도입을 검토할 시점입니다.