- Deployment 는 쿠버네티스에서 가장 널리 사용되는 오브젝트이다.
- ReplicaSet을 이용하여 Pod를 업데이트하고 이력을 관리하여 롤백하거나 특정 버전으로 돌아갈 수 있다. → 버전 관리
- Replicaset은 파드 수를 관리하는데만 중점을 두고, Deployment는 Replicaset를 사용하여 애플리케이션의 배포 및 업데이트를 관리하는 높은 수준의 추상화를 제공한다.
Deployment 만들기
이전에 만든 ReplicaSet을 Deployment로 만들어 보자
apiVersion: apps/v1
kind: Deployment
metadata:
name: echo-deploy
spec:
replicas: 4
selector:
matchLabels:
app: echo
tier: app
template:
metadata:
labels:
app: echo
tier: app
spec:
containers:
- name: echo
image: ghcr.io/subicura/echo:v1
→ type을 제외하고는 ReplicaSet과 완전히 동일하다.
- deployment는 Pod을 새로운 이미지로 업데이트 하면 기존의 Pod를 제거하고 새로운 버전의 Pod를 생성한다.
- 새로운 이미지로 업데이트하기 위해 사용, 버전을 업데이트하기 위해 ReplicaSet을 이용한다. 버전을 업데이트하면 새로운 ReplicaSet을 생성하고, 해당 ReplicaSet이 새로운 Pod을 생성한다.
Deployment 작동 방식

Deployment Controller
는 Deployment조건을 감시하면서 현재 상태와 원하는 상태가 다른 것을 체크
Deployment Controller
가 원하는 상태가 되도록ReplicaSet
설정
ReplicaSet Controller
는 ReplicaSet조건을 감시하면서 현재 상태와 원하는 상태가 다른 것을 체크
ReplicaSet Controller
가 원하는 상태가 되도록Pod
을 생성하거나 제거
Scheduler
는 API서버를 감시하면서 할당되지 않은Pod
이 있는지 체크
Scheduler
는 할당되지 않은 새로운Pod
을 감지하고 적절한노드
에 배치
- 이후 노드는 기존대로 동작
- Deployment는 Deployment Controller가 관리하고 ReplicaSet과 Pod은 기존 Controller와 Scheduler가 관리
버전관리
// Deployment는 변경된 상태를 기록한다.
# 히스토리 확인
kubectl rollout history deploy/echo-deploy
# revision 1 히스토리 상세 확인
kubectl rollout history deploy/echo-deploy --revision=1
# 바로 전으로 롤백
kubectl rollout undo deploy/echo-deploy
# 특정 버전으로 롤백
kubectl rollout undo deploy/echo-deploy --to-revision=2
Share article