쿠버네티스란? 컨테이너 오케스트레이션

쿠버네티스란

쿠버네티스(Kubernetes, 줄여서 K8s)는 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화해주는 오픈소스 플랫폼입니다.

원래 Google이 내부에서 사용하던 Borg 시스템에서 출발했고, 2014년에 오픈소스로 공개되었습니다. 현재는 CNCF(Cloud Native Computing Foundation)에서 관리하고 있습니다.

왜 필요한가

Docker로 컨테이너를 만드는 건 어렵지 않습니다. 하지만 컨테이너가 수십, 수백 개로 늘어나면 이런 문제가 생깁니다:

  • 컨테이너가 죽으면 누가 다시 띄워주지?
  • 트래픽이 몰리면 자동으로 늘릴 수 없을까?
  • 여러 서버에 컨테이너를 어떻게 분배하지?
  • 무중단 배포는 어떻게 하지?

쿠버네티스는 이 모든 걸 자동으로 처리해줍니다. 한마디로, 컨테이너들의 지휘자(오케스트레이터) 역할입니다.

핵심 개념

Pod

컨테이너를 감싸는 가장 작은 배포 단위입니다. 보통 하나의 Pod에 하나의 컨테이너가 들어갑니다. 아파트로 비유하면 한 세대에 해당합니다.

Node

Pod가 실행되는 물리/가상 서버입니다. 아파트 한 동이라고 생각하면 됩니다.

Cluster

여러 Node를 묶은 전체 시스템입니다. 아파트 단지 전체에 해당합니다.

Deployment

“이 앱을 몇 개 띄울지, 어떤 이미지를 쓸지” 같은 선언을 담은 설정입니다. 쿠버네티스가 이 선언을 보고 알아서 상태를 맞춰줍니다.

Service

Pod들에 접근할 수 있는 안정적인 네트워크 주소를 제공합니다. Pod는 수시로 생성/삭제되지만, Service는 고정된 진입점 역할을 합니다.

간단한 배포 흐름

# 1. Deployment 생성 (nginx 3개 띄우기)
kubectl create deployment my-app --image=nginx --replicas=3

# 2. 외부에서 접근 가능하도록 Service 노출
kubectl expose deployment my-app --port=80 --type=LoadBalancer

# 3. 상태 확인
kubectl get pods
kubectl get services

이 세 줄이면 로드밸런서 뒤에 nginx 3대가 떠 있는 환경이 만들어집니다.

언제 쓰면 좋고, 언제 과한가

쿠버네티스가 적합한 경우:

  • 마이크로서비스 아키텍처를 운영할 때
  • 트래픽 변동이 크고 자동 스케일링이 필요할 때
  • 여러 팀이 독립적으로 배포해야 할 때

굳이 안 써도 되는 경우:

  • 서비스가 1~2개이고 트래픽이 적을 때
  • 팀 규모가 작고 단순한 배포로 충분할 때
  • 서버리스(Lambda, Cloud Functions)로 해결 가능한 경우

학습 곡선이 꽤 가파르기 때문에, 규모가 작다면 Docker Compose나 단일 서버 배포가 더 현실적일 수 있습니다.

마무리

쿠버네티스는 컨테이너 운영의 사실상 표준이 되었습니다. 당장 프로덕션에 도입하지 않더라도, 개념을 알아두면 인프라 관련 대화에서 길을 잃지 않습니다.

다음에 공부하면 좋을 것들:

  • ArgoCD — GitOps 기반 배포 자동화
  • Ingress — 외부 트래픽 라우팅 규칙 관리

하나씩 천천히 파보면 됩니다. 화이팅!