
Pod을 새롭게 업데이트 하고 Rollback 하거나 특정 버전으로 돌아갈 수 있다
apiVersion: v1
kind: Deployment
metadata:
name: deployName
spec:
replicas: 4
selector:
matchLabels:
app: appName
tier: tierName
template:
metadata:
labels:
app: appName
tier: tierName
spec:
containers:
- name: containerName
image: imagePath
Deployment는 새로운 이미지로 업데이트 하기 위해 ReplicaSet을 활용한다.

버전 업데이트시, 새로운 ReplicaSet을 생성하고 해당 ReplicaSet에서 새로운 버전의 Pod을 생성한다.

새로운 버전의 Pod이 생길때마다 기존의 버전의 Pod은 줄인다.

결국 원하는 버전의 Pod이 Replicas의 갯수만큼 생성되고, 기존 버전의 Pod은 0개가 되는 것이다.

Deployment Controller
ReplicaSet Controller
Scheduler
Deployment는 변경된 상태를 기록한다.
명령어를 통해 이러한 기록을 확인할 수 있다.
# 히스토리 확인하기
kubectl rollout history deploy/${deploy_name}
# 특정 조건의 히스토리 상세 확인하기
# (revision 1의 히스토리 상세 확인)
kubectl rollout history deploy/${deploy_name} --revision=1
# 바로 전으로 롤백
kubectl rollout undo deploy/${deploy_name}
# 특정 버전으로 롤백
# (revision 2로 롤백)
kubectl rollout undo deploy/${deploy_name} --to-revision=2
업데이트 되는 Pod의 갯수도 조정이 가능하다
(아까는 새 버전이 하나 생기고, 구 버전이 하나 사라지고 하는 형식)
apiVersion: v1
kind: Deployment
metadata:
name: deployName
spec:
replicas: 4
selector:
matchLabels:
app: appName
tier: tierName
minReadySeconds: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 3
maxUnavailable: 3
template:
metadata:
labels:
app: echo
tier: app
spec:
containers:
- name: echo
image: ghcr.io/subicura/echo:v1
livenessProbe:
httpGet:
path: /
port: 3000
minReadySeconds: 5)maxSurge: 3)maxUnavailable: 3)