인프라 · Kubernetes

Kubernetes

컨테이너가 수십, 수백 개로 늘어나면 "어디에 띄우고, 죽으면 살리고, 트래픽 늘면 늘릴지"를 사람이 일일이 챙길 수 없습니다. Kubernetes(쿠버네티스, k8s)는 이 일을 자동으로 해주는 컨테이너 오케스트레이션 도구입니다.

한 줄로

Kubernetes?Docker? 로 만든 이미지를 받아 여러 서버에 자동으로 배치하고, 죽으면 다시 살리고, 부하가 늘면 개수를 늘려 줍니다. 내가 "이 앱을 3개 띄워줘"라고 원하는 상태만 적어두면, 쿠버네티스가 알아서 그 상태를 맞춰 유지해요.

컨테이너가 "택배 상자"라면, 쿠버네티스는 "물류센터 자동화 시스템". 어느 트럭에 실을지, 사고 나면 어떻게 다시 보낼지, 주문이 몰리면 트럭을 몇 대 더 부를지를 사람 없이 알아서 처리합니다.
왜 / 어디에 쓰나
  • 자동 복구 — 컨테이너나 서버가 죽어도 자동으로 다시 띄워 서비스 중단을 막음
  • 확장(스케일) — 트래픽이 늘면 같은 앱의 복제본 개수를 늘리고, 줄면 줄임
  • 무중단 배포 — 새 버전을 조금씩 교체(rolling update), 문제 생기면 되돌리기
  • 서비스 디스커버리/로드밸런싱 — 여러 복제본 앞에 하나의 안정적인 주소를 제공

핵심 개념

개념설명
Pod(파드)쿠버네티스가 배치하는 가장 작은 단위. 보통 컨테이너 1개(때로 여러 개)를 담음.
Deployment"이 Pod를 몇 개 유지해줘"를 선언. 복제본 수 관리·롤링 업데이트·롤백 담당.
Service여러 Pod 앞에 두는 고정 접점(주소). Pod가 바뀌어도 같은 이름으로 접근·부하 분산.
Node / ClusterPod가 실제로 도는 서버 한 대가 Node, 그 Node들의 모음이 Cluster.

기본 명령 (kubectl)

클러스터를 다루는 명령줄 도구는 kubectl 입니다.

kubectl get pods               # 실행 중인 Pod 목록
kubectl get deployments        # Deployment 목록
kubectl get services           # Service 목록

kubectl logs <pod-name>        # Pod 로그 보기
kubectl describe pod <pod-name>  # Pod 상세 상태/이벤트
kubectl exec -it <pod-name> -- bash  # Pod 안으로 들어가기

# 복제본 개수 늘리기 (수동 스케일)
kubectl scale deployment myapp --replicas=3

# 매니페스트(yaml) 적용
kubectl apply -f deployment.yaml

Deployment 예시 (yaml)

Docker로 빌드한 myapp:1.0 이미지를 3개 띄우는 선언입니다.

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3            # Pod 3개 유지
  selector:
    matchLabels: { app: myapp }
  template:
    metadata:
      labels: { app: myapp }
    spec:
      containers:
        - name: myapp
          image: myapp:1.0   # Docker로 빌드한 이미지
          ports:
            - containerPort: 8080
Docker와의 관계

Docker가 앱을 이미지로 굽고 컨테이너 하나를 띄우는 도구라면, 쿠버네티스는 그 이미지를 여러 서버에 걸쳐 많이, 자동으로 굴리는 도구입니다. 그래서 보통 Docker를 먼저 익히고 그 다음 단계로 쿠버네티스를 배웁니다.

다음 단계

  • 이미지를 만드는 앞 단계 → Docker
  • Pod·Node가 도는 바탕 OS와 명령 → Linux