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: 선언적 배포 관리
- 제어 플레인 + 워커 노드 아키텍처
다음 글에서는 네트워킹, 스토리지, 보안 등 고급 주제를 다룹니다.