핵심 한 줄
쿠버네티스는 파드(컨테이너 묶음)를 컨트롤러(디플로이먼트→레플리카셋)로 자동 관리하고, 서비스로 네트워크를 추상화한다. 키워드는 셀프힐링·오토스케일·무중단 배포.
1. 파드 (Pod)
쿠버네티스의 최소 배포 단위. 1개 이상의 컨테이너를 묶고, 네트워크(같은 IP)·볼륨을 공유한다.
사이드카 패턴 (Sidecar)
- 한 파드에 메인 컨테이너 + 보조 컨테이너(로그 수집기, 프록시 등)를 함께 배치
- 볼륨 공유로 메인이 쓴 로그를 사이드카가 읽어 수집·외부 전송
- 메인 컨테이너 코드를 건드리지 않고 부가 기능(로깅·모니터링·통신)을 분리하는 게 목적
대표 사례
메인 앱 + 로그 컨테이너(Fluentd 등) → 공유 볼륨의 로그를 사이드카가 외부로 전송. 서비스 메시(Envoy 프록시 주입)도 같은 패턴.
2. 워크로드 컨트롤러
디플로이먼트 (Deployment)
- 파드 셀프힐링 가능: 파드가 죽으면 자동 재생성
- 정확한 구조: 디플로이먼트 → 레플리카셋 → 파드
- 레플리카셋(ReplicaSet): 지정한 개수의 파드를 유지·관리 (실제로 파드를 직접 감시)
- 디플로이먼트: 레플리카셋을 관리하며 배포(rollout)·롤백 담당
- 즉, 셀프힐링은 레플리카셋이, 버전 관리는 디플로이먼트가 한다.
Deployment ──관리──▶ ReplicaSet ──관리──▶ Pod, Pod, Pod
(배포/롤백) (개수 유지/셀프힐링)
롤링 업데이트 (Rolling Update)
- 새 버전 파드를 하나씩 만들면서 기존 파드를 하나씩 제거하는 과정을 반복
- 서비스 중단 없이 점진 교체 → 무중단 배포
- 문제 발생 시 디플로이먼트로 롤백 가능
HPA (Horizontal Pod Autoscaling)
- 부하량(CPU·메모리·커스텀 지표)에 따라 파드 개수를 자동 조절
- 수평 확장(파드 수 늘리기) — 트래픽 급증 시 자동 스케일아웃, 한산하면 스케일인
- (cf. 수직 확장 VPA는 파드 자원 자체를 키움 — HPA와 구분)
3. 서비스 (Service)
파드는 죽고 살아나며 IP가 계속 바뀐다. 서비스는 고정 진입점(고정 IP/DNS) + 부하분산을 제공해 클라이언트가 파드에 쉽게 접근하게 한다.
| 타입 | 접근 범위 | 용도 |
|---|---|---|
| ClusterIP | 클러스터 내부 파드 간 통신만 | 내부 서비스 연결 (기본값) |
| NodePort | 내부 통신 + 외부에서 특정 포트로 접근 | 테스트·개발용 |
| LoadBalancer | 외부 로드밸런서 통해 노출 | 클라우드 환경 외부 노출 |
외부 노출 전략
NodePort는 테스트용, 프로덕션 외부 노출은 보통 **인그레스(Ingress)**를 활용한다. 인그레스는 L7(HTTP) 라우팅·도메인/경로 기반 분기·TLS 종료를 한곳에서 처리한다.
4. 한눈에 정리
- 파드: 컨테이너 묶음, 네트워크·볼륨 공유 → 사이드카로 부가기능 분리
- 레플리카셋: 파드 개수 유지(셀프힐링)
- 디플로이먼트: 레플리카셋 관리 + 롤링업데이트/롤백
- HPA: 부하 기반 파드 수 자동조절
- 서비스: 고정 IP + 부하분산 (ClusterIP=내부, NodePort=외부테스트, Ingress=프로덕션 외부)
5. 더 채울 거리 (다음 행동)
- ConfigMap / Secret (설정·민감정보 주입)
- 인그레스(Ingress) 컨트롤러 동작 상세
- 프로브(livenessProbe / readinessProbe)와 셀프힐링의 관계
- StatefulSet vs Deployment (상태 보존 워크로드)
- 결제 취소 MSA를 k8s에 올린다면 서비스 경계별 배포 구성