Kubernetes의 ReplicaSet 및 Deployment

개요

Kubernetes에서 애플리케이션을 운영할 때, 단순히 Pod를 실행하는 것만으로는 부족해.
Pod는 휘발성이 강하고, 노드 장애나 업데이트 시 자동으로 복구되지 않아.
이를 해결하기 위해 ReplicaSetDeployment를 사용해 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 차이점

비교 항목ReplicaSetDeployment
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를 사용하는 것이 권장됨

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다