본문 바로가기

CKA

[k8s] Deployment 정리(ReplicaSet, RollingUpdate, Rollback)

728x90
반응형

Deployment란?

Deployment는 Pod를 직접 띄우는 리소스가 아니라, "원하는 상태(desired state)의 Pod를 안정적으로 유지/업데이트"하도록 ReplicaSet을 관리하는 상위 컨트롤러.

  • "항상 nginx Pod 2개를 유지해줘"
  • "이미지를 nginx:1.27 → 1.28로 무중단(rolling)으로 바꿔줘"
  • "업데이트가 문제 생기면 이전 버전으로 롤백해줘"

이런 걸 담당.

Deployment가 관리하는 흐름

Deployment → ReplicaSet → Pod

  • Deployment: 업데이트 전략/버전 히스토리/롤백/스케일 등 "운영 레벨"을 관리
  • ReplicaSet: 특정 Pod 템플릿으로 "몇 개 유지할지" 관리
  • Pod: 실제 컨테이너 실행 단위

즉, Deployment를 만들면 보통 내부적으로 ReplicaSet이 자동으로 생기고, 그 ReplicaSet이 Pod를 만든다.

Deployment 기본 구조

1. replicas: 원하는 Pod 개수

2. selector.machLabels: 어떤 Pod를 "내 Pod"로 볼지

3. template.metadata.labels: 실제 생성될 Pod 라벨 (selector와 반드시 맞아야 함)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:					# 라벨이 app=web인 Pod를 내가 관리하는 Pod로 보겠다.
  replicas: 2
  selector:
    matchLabels:
      app: web
  template:				# 내가 새로 만들 Pod는 이렇게 만들겠다.
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: app
        image: nginx:1.27

업데이트(배포) 전략: RollingUpdate가 기본

RollingUpdate 개념

기본적으로 Deployment는 새 버전 Pod를 조금씩 늘리고, 기존 버전 Pod를 조금씩 줄이면서 교체한다.

  • maxSurge: 업데이트 중 추가로 더 띄워도 되는 Pod 수
  • maxUnavailable: 업데이트 중 일시적으로 Unavailable(중단) 되어도 되는 Pod 수
strategy:
  type: RollingUpdate
  rollingUpdate:
    maxSurge: 1
    maxUnavailable: 0

 

→ 2개 유지 중이면, 업데이트 중에서 최대 3가까지 잠깐 늘릴 수 있고, 다운타임 없이(0 unavailable) 바꿈.

롤백

배포가 문제 생기면 이전 revision으로 되돌릴 수 있다.

 

명령어

kubectl rollout status deploy/web
kubectl rollout history deploy/web
kubectl rollout undo deploy/web
# 특정 revision으로
kubectl rollout undo deploy/web --to-revision=2

 

스케일링

kubectl scale deploy/web --replicas=5

 

실습

1) Deployment 생성

kubectl create deploy web --image=nginx:1.27 --replicas=2
kubectl get deploy,rs,po -l app=web

 

2) 이미지 업데이트(롤링)

kubectl set image deploy/web nginx=nginx:1.28
kubectl rollout status deploy/web
kubectl get rs -l app=web
  • 새 ReplicaSet이 생기고, 이전 ReplicaSet은 줄어드는 걸 볼 수 있음.

3) 문제가 생겼다고 가정하고 롤백

kubectl rollout undo deploy/web
kubectl rollout status deploy/web
728x90
반응형