K8S Deployment - Recreate
Deployment는 Software의 자동 Update를 위해 사용한다. ReplicaSet과 동일하게 replicas, selector, template 정의가 필요하며, 추가로 strategy type (Recreate, RollingUpdate 등) 정의가 필요하다.
Deployment가 spec에 정의된 ReplicaSet을 자동 생성하는 방식으로 작동한다.
기존버전을 중단하고, 신규버전을 생성한다. 서비스 downtime이 발생한다
1. spec
ReplicaSet의 replicas, selector, template를 의미한다
2. stratey의 type: Recreate
- spec을 기반으로 신규 ReplicaSet을 만든다
- 기존 ReplicaSet의 pod를 삭제한다.
- 신규 ReplicaSet의 pod를 생성한다.
3. 생성 Example
- revisionHistoryLimits : Backup을 위해 과거버전의 ReplicaSet을 삭제하지 않고 보관하는 갯수 (default 10)
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-1
spec:
selector:
matchLabels:
type: app
replicas: 2
strategy:
type: Recreate
revisionHistoryLimit: 1
template:
metadata:
labels:
type: app
spec:
containers:
- name: container
image: kubetm/app:v1
terminationGracePeriodSeconds: 10
---
apiVersion: v1
kind: Service
metadata:
name: svc-1
spec:
selector:
type: app
ports:
- port: 8080
protocol: TCP
targetPort: 8080
4. Software Update
Deployment에 정의된 container image의 version을 update하면 바로 시작된다.
5. Test Code
$ while true; do curl [svc-1 의 Cluster IP]:8080/version; sleep 1; done
6. Software Rollback
이전 Version으로 되돌아 간다.
# 기 존재하는 Revision 확인하기
$ kubectl rollout history deployment deployment-1
# Rollback
$ kubectl rollout undo deployment deployment-1 --to-revision=2