이종관
Back to Posts

Kubernetes 핵심 개념 정리

컨테이너 오케스트레이션, 아키텍처

2025년 2월 4일·5 min read·
infra
kubernetes
containerization
docker
orchestration
cluster-basics

컨테이너화 vs 컨테이너 오케스트레이션

컨테이너화 (Containerization)

애플리케이션과 의존성을 하나의 이미지로 패키징하여 어떤 환경에서도 일관되게 동작하도록 하는 기술입니다.

특성설명
이식성개발/테스트/프로덕션 환경 차이 최소화
격리성독립적 실행 환경, 다른 서비스와 간섭 없음
경량성VM 대비 자원 소모 적고, 빠른 시작/종료

컨테이너 오케스트레이션

여러 컨테이너를 자동으로 배포, 관리, 확장, 업데이트 및 모니터링하는 기술입니다.

  • 자동화: 수백 개의 컨테이너 반복 작업 자동화
  • 자동 스케일링: 트래픽 변화에 따라 컨테이너 수 자동 조절
  • 롤링 업데이트: 단계별 업데이트 후 문제 시 롤백
  • 셀프-힐링: 비정상 컨테이너 자동 재시작

오케스트레이션의 필요성

수동 관리의 문제점:

  • 수십~수백 개 컨테이너 모니터링 불가능
  • 트래픽 변화에 실시간 대응 어려움
  • 장애 복구 시간 증가
  • 운영 비용 및 오류 가능성 증가

쿠버네티스의 역할

핵심 기능

기능설명
자동 배포/확장YAML로 정의한 상태 자동 유지
서비스 디스커버리동적 IP에도 고정 엔드포인트 제공
로드 밸런싱트래픽 균등 분산
자원 관리CPU/메모리 효율적 분배
이식성온프레미스/클라우드 동일 운영

쿠버네티스 아키텍처

제어 플레인 (Master)

┌─────────────────────────────────────┐
│           Control Plane             │
├─────────────┬───────────────────────┤
│ API Server  │ 클러스터 유일 접점     │
├─────────────┼───────────────────────┤
│ Controller  │ 현재/원하는 상태 동기화│
├─────────────┼───────────────────────┤
│ Scheduler   │ Pod 배치 노드 선택     │
├─────────────┼───────────────────────┤
│ etcd        │ 분산 키-값 저장소      │
└─────────────┴───────────────────────┘

워커 노드

┌─────────────────────────────────────┐
│           Worker Node               │
├─────────────┬───────────────────────┤
│ kubelet     │ 마스터와 통신, Pod 관리│
├─────────────┼───────────────────────┤
│ kube-proxy  │ 네트워크 프록시, LB    │
├─────────────┼───────────────────────┤
│ Runtime     │ Docker, containerd 등 │
└─────────────┴───────────────────────┘

핵심 오브젝트

Pod

쿠버네티스의 최소 배포 단위입니다.

  • 하나 이상의 컨테이너 포함
  • 동일 네트워크 네임스페이스 공유
  • 같은 스토리지 볼륨 공유 가능
  • 일시적(Ephemeral) 특성
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: app
    image: nginx:latest
    ports:
    - containerPort: 80

Service

Pod 집합에 대한 고정된 네트워크 엔드포인트를 제공합니다.

타입설명
ClusterIP클러스터 내부 전용 (기본값)
NodePort노드 포트로 외부 접근
LoadBalancer클라우드 LB 연동
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
  - port: 80
    targetPort: 8080
  type: ClusterIP

Deployment

Pod의 선언적 업데이트를 관리합니다.

  • 롤링 업데이트 지원
  • 롤백 기능
  • 스케일링
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: app
        image: my-app:v1

kubectl 기본 명령어

# 클러스터 정보
kubectl cluster-info

# 리소스 조회
kubectl get pods
kubectl get services
kubectl get deployments

# 리소스 상세 정보
kubectl describe pod <pod-name>

# 로그 확인
kubectl logs <pod-name>

# 배포
kubectl apply -f deployment.yaml

# 스케일링
kubectl scale deployment my-deployment --replicas=5

# 롤백
kubectl rollout undo deployment my-deployment

정리

쿠버네티스는 컨테이너 오케스트레이션의 사실상 표준(de facto standard)입니다.

핵심 개념:

  • Pod: 최소 배포 단위
  • Service: 네트워크 추상화
  • Deployment: 선언적 배포 관리
  • 제어 플레인 + 워커 노드 아키텍처

다음 글에서는 네트워킹, 스토리지, 보안 등 고급 주제를 다룹니다.