쿠버네티스를 처음 공부할 때 가장 먼저 마주치는 개념들이다.
이 네 가지의 관계를 이해하면 쿠버네티스의 전체 구조가 보이기 시작한다.
Container → Pod → Deployment (Stateless 앱)
→ StatefulSet (Stateful 앱)
상위 개념이 하위 개념을 관리하는 계층 구조다.
컨테이너는 앱 코드 + 라이브러리 + 런타임을 하나로 묶은 실행 단위다. Docker가 대표적인 컨테이너 런타임이다.
쿠버네티스는 컨테이너를 직접 다루지 않고, Pod라는 단위를 통해서 관리한다.
Pod는 쿠버네티스에서 배포 가능한 가장 작은 단위다. 1개 이상의 컨테이너를 묶은 그룹이다.
보통은 컨테이너 1개 = Pod 1개로 사용한다.
단, 로그 수집기처럼 메인 앱을 보조하는 사이드카 패턴에서는 여러 컨테이너를 하나의 Pod에 담기도 한다.
Pod를 단독으로 생성하면 Pod가 죽었을 때 자동으로 재시작되지 않는다.
실제 운영에서는 Pod를 직접 만들지 않고, 아래의 Deployment나 StatefulSet을 통해 관리한다.
Stateless 앱을 관리하는 가장 일반적인 방법이다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3 # Pod 3개를 항상 유지
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:latest
웹 서버, API 서버처럼 어떤 Pod가 요청을 받아도 상관없는 앱에 사용한다.
즉, 각 Pod가 동일한 역할을 하고 상태를 공유하지 않을 때 적합하다.
- Deployment의 ReplicaSet에 대해서는 이후에 다룰것.
Stateful 앱을 관리하기 위한 컨트롤러다.
항목 Deployment StatefulSet
| Pod 이름 | 랜덤 (app-7d4b-xxx) | 순서 고정 (app-0, app-1, app-2) |
| 배포 순서 | 동시에 | 순서대로 (0 → 1 → 2) |
| 볼륨 | 공유 가능 | Pod마다 개별 볼륨 |
| 네트워크 ID | 재시작 시 변경 | 고정 DNS 유지 |
MySQL, PostgreSQL, Redis, Kafka, Elasticsearch처럼
각 인스턴스가 고유한 역할과 상태를 가지는 앱에 사용한다.
예를 들어 MySQL Master-Replica 구성에서 mysql-0은 항상 Master,
mysql-1, mysql-2는 항상 Replica 역할을 유지해야 한다.
이런 경우 Pod 이름이 바뀌면 안 되기 때문에 StatefulSet을 사용한다.
Container Pod Deployment StatefulSet
| 역할 | 실행 단위 | 배포 최소 단위 | Stateless 관리 | Stateful 관리 |
| 재시작 | - | ❌ 자동 재시작 없음 | ✅ 자동 재시작 | ✅ 자동 재시작 |
| 대표 사용처 | - | 사이드카 패턴 | 웹서버, API | DB, 메시지 큐 |
| Kubernetes 핵심 개념 정리 - ClusterIP vs NodePort vs LoadBalancer 차이 (0) | 2026.02.23 |
|---|---|
| Kubernetes - Update and Rollback (1) | 2024.01.03 |
| Kubernetes - Deployments (1) | 2023.12.26 |
| Kubernetes - Replication Controllers and ReplicaSets (1) | 2023.12.26 |