개요
Kubernetes에서 애플리케이션을 운영할 때, 단순히 Pod를 실행하는 것만으로는 부족해.
Pod는 휘발성이 강하고, 노드 장애나 업데이트 시 자동으로 복구되지 않아.
이를 해결하기 위해 ReplicaSet과 Deployment를 사용해 Pod를 자동으로 관리할 수 있어.
ReplicaSet
ReplicaSet이란?
- 특정 개수의 동일한 Pod를 유지하는 Kubernetes 리소스야.
- Pod가 예상치 못하게 종료되거나 삭제되었을 때, 자동으로 다시 생성해.
kubectl scale
또는replicas
설정을 통해 수평 확장(Scaling) 가능.
ReplicaSet의 주요 특징
특징 | 설명 |
---|---|
Pod 개수 보장 | 지정된 개수(replica 수)만큼 Pod 유지 |
자동 복구 | Pod가 삭제되면 자동 생성 |
수평 확장 가능 | kubectl scale 또는 replicas 값 변경으로 확장 가능 |
Deployment에서 사용 | 보통 단독으로 사용하기보다는 Deployment에서 관리 |
ReplicaSet 예제
📌 replicaset.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: my-replicaset
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx
ports:
- containerPort: 80
💡 설명
replicas: 3
→ 동일한 Pod 3개를 유지selector.matchLabels.app: my-app
→ 이 레이블을 가진 Pod만 관리template
→ 생성할 Pod의 정의
ReplicaSet 동작 방식
1️⃣ 초기 실행 시 Pod 3개 생성
2️⃣ Pod 중 하나가 종료되면 자동으로 새로운 Pod 생성
3️⃣ kubectl scale replicaset my-replicaset --replicas=5
실행 시 5개로 확장
Deployment
Deployment란?
- ReplicaSet을 포함하며, 롤링 업데이트, 롤백 등의 기능을 제공하는 컨트롤러야.
- 단순한 Pod 개수 관리뿐만 아니라, 애플리케이션 배포 전략을 지원해.
Deployment의 주요 기능
기능 | 설명 |
---|---|
자동 롤링 업데이트 | 애플리케이션을 중단 없이 새로운 버전으로 변경 가능 |
버전 롤백 지원 | 문제가 발생하면 이전 버전으로 되돌릴 수 있음 |
자동 복구 | Pod 장애 발생 시 자동 복구 |
수평 확장 가능 | kubectl scale 또는 HPA 를 이용한 오토스케일링 지원 |
Deployment 예제
📌 deployment.yaml
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: my-container
image: nginx
ports:
- containerPort: 80
💡 설명
replicas: 3
→ 동일한 Pod 3개 유지- ReplicaSet을 직접 생성하지 않아도 Deployment가 자동으로 관리
- 애플리케이션을 업그레이드할 때 중단 없이 롤링 업데이트 가능
Deployment vs ReplicaSet 차이점
비교 항목 | ReplicaSet | Deployment |
---|---|---|
Pod 개수 관리 | ✅ 가능 | ✅ 가능 |
롤링 업데이트 | ❌ 불가능 | ✅ 가능 |
롤백 기능 | ❌ 불가능 | ✅ 가능 |
직접 사용 여부 | 단독으로 사용 가능하지만 보통 Deployment에서 관리 | 일반적으로 ReplicaSet을 내부적으로 포함하여 사용 |
💡 결론:
✅ ReplicaSet은 단순히 Pod 개수를 유지하는 역할
✅ Deployment는 애플리케이션 배포 및 업데이트까지 포함
Deployment 롤링 업데이트 및 롤백
롤링 업데이트 (Rolling Update)
Deployment를 사용하면 Pod를 하나씩 새로운 버전으로 교체할 수 있어.
kubectl set image deployment/my-deployment my-container=nginx:1.21
💡 이 명령어를 실행하면 기존 Pod를 하나씩 종료하고 새로운 버전(nginx:1.21)으로 교체돼.
롤백 (Rollback)
업데이트 후 문제가 발생하면 이전 버전으로 되돌릴 수 있어.
kubectl rollout undo deployment my-deployment
💡 이 명령어를 실행하면 바로 이전 버전의 애플리케이션으로 복원돼.
정리
✅ ReplicaSet: Pod 개수를 유지하고 자동 복구 기능을 제공
✅ Deployment: ReplicaSet을 관리하며 롤링 업데이트 및 롤백 기능 지원
✅ 일반적으로 ReplicaSet을 직접 사용하지 않고 Deployment를 사용하는 것이 권장됨