쿠버네티스에서 Deployment는 파드를 관리할 때 가장 많이 사용하는 리소스이다. 그리고 디플로이먼트는 라벨을 기준으로 자신이 관리해야 할 파드를 식별한다. 결국 파드 ➝ 레플리카셋 ➝ 디플로이먼트로 이어지는 관계를 가지고 있다. 디플로이먼트는 스케일링을 통해 파드 개수를 늘리거나 줄일 수 있고, 파드의 정의를 변경하면 새로운 레플리카셋이 생성되면서 재배포가 이루어진다. 이때 레플리카셋은 다르게 동작한다.
Deployment 생성하기
아래와 같이 Deployment를 생성하고 replicas를 3으로 설정하여 3개의 파드를 실행한다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 3
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: web
image: nginx:1.25
ports:
- containerPort: 80
Deployment를 생성하면 ReplicaSet도 같이 생성되고, ReplicaSet이 파드를 만들어준다.

Deployment 스케일링
scale 명령어를 통해 3개의 파드를 5개로 늘릴 수 있다. 기존 3개의 파드는 그대로 유지되고, 부족한 수만큼 새로운 파드가 추가로 생성된다. 모든 파드가 새로 만들어지는 것이 아니라 기존 파드는 그대로 유지된다.
# replicas를 5로 scale
kubectl scale deployment web-app --replicas=5

# 원래대로 replicas를 3으로 scale
kubectl scale deployment web-app --replicas=3

파드의 이미지를 변경
만약 파드의 이미지를 변경하면 어떻게 될까? scale과는 다르게 파드의 정의 자체를 변경하면 기존 레플리카셋이 점점 줄어들고, 새로운 레플리카셋이 생성되면서 파드가 교체된다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 3
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: web
image: nginx:1.26 # nginx 이미지 변경
ports:
- containerPort: 80
파드의 spec 자체를 변경하면 새로운 replicaset이 생성되고 새로운 pod가 생성된다. 그리고 기존 pod들은 점진적으로 종료된다. 새로운 replicaset을 생성하고 새 pod가 준비됨에 따라 기존 파드를 삭제하게된다.

기존 replicaset의 pod의 수는 0이 되고 새로 생성된 replicaset의 pod의 수는 3이 된다.

Deployment 롤백
새로운 ReplicaSet이 생성된 이후, 기존 ReplicaSet은 Pod 수가 0이 되었지만 삭제되지 않고 유지되는 것을 확인할 수 있다. 만약 이전에 사용했던 nginx 이미지로 되돌아가고 싶다면, 기존 Replicaset을 통해 롤백을 수행할 수 있다.

롤백을 실행하면 기존 ReplicaSet이 다시 Pod를 생성하고, 현재 ReplicaSet의 Pod는 점진적으로 종료된다. 또한 revision을 따로 지정하지 않으면 바로 이전 버전으로 롤백이 진행된다.
# 이전 버전으로 롤백
kubectl rollout undo deployment web-app

기존 ReplicaSet(revision 1)의 파드는 점점 줄어들고, 새로운 ReplicaSet(revision 2)이 생성되면서 파드가 교체된다.

아래 명령어를 통해 Deployment의 변경 이력을 확인할 수 있다. 이전 상태로 되돌아가기 때문에 과거 버전으로 돌아간다고 생각할 수 있지만, 이 또한 새로운 배포로 간주되어 revision 번호는 증가하게 된다.

- revision 1: 처음 Deployment 생성
- revision 2: 이미지 변경
- revision 3: 롤백 실행(이전 상태로 되돌림)
'Kubernetes' 카테고리의 다른 글
| VMware Fusion에 k3s 멀티 노드 클러스터 구축하기 (0) | 2026.05.02 |
|---|---|
| 쿠버네티스의 Pod와 Deployment에 관하여 (0) | 2026.04.03 |
| Kubernetes Service는 왜 필요할까? (0) | 2026.01.06 |
| Ansible을 이용해 Kubernetes Cluster 구축해보기 (0) | 2025.12.25 |
| EKS를 안전하게 운영하는 방법(feat. IAM 계정 분리와 Bastion 연동) (3) | 2025.12.21 |