k8s에서 deployment가 이전 deploy을 제거하고 수정된(버전 업그레이드 혹은 일부 코드 수정 등) deploy로 교체해야 할 순간들이 생길 수 있다.(ex 이미지 파일 변경 등)
일반적으로 deployment을 새로 배포하면, pod을 삭제하고 새로운 pod를 올리지만, 이 외에, 삭제와 생성을 동시에 한다거나, 일단 교체할 pod을 생성하고 이전 pod을 제거한거나 이런 배포 전략을 설정 하는 실습을 해보겠다.
일단 배포 전략은 크게 recreate, rollingupdate, 블루/그린이 있다.
Deployment 배포 전략
recreate
- 이전 버전이 즉시종료되면서 새로운 버전 배포
- 배포 도중 유휴상태가 발생하므로 운영에는 적합하지 않다.
rollingupdate
- 유휴상태 없이 pod을 하나씩 바꿔 가면서 배포 하는 방식 즉 새로 배포하면서 이전 버전을 하나씩 종료한다.
- 서비스 다운 타임 최소화되나 노드갯수가 많아져 리소스가 많이들어갈 수 있다.
(1) max-unavailable:
- rolling-update을 수행하는 동안 유지할 수 있는 최소의 파드비율의 수
- (2) maxSurge
- 롤링업데이트 동안 허용할 수 있는 최대 파드의 비율
블루/그린(Blue/Green)
이전버전과 새버전을 동시에 나란히 구성 후 트래픽을 일제히 전환한다.
롤링에서 존재하는 버전차이에 대한 문제를 해결할 수 있다.
실습
환경 세팅
우선 , 시작 deploy가 하나 있어야한다.
이때, nginx을 1.14로 만들어보자
apiVersion: apps/v1
kind: Deployment
metadata:
name: dep-nginx
spec:
replicas: 5
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14
ports:
- containerPort: 80
Strategy : Recreate
아래와 같이 yml 파일을 작성하고 어떻게 변화되는지 확인 해보자
apiVersion: apps/v1
kind: Deployment
metadata:
name: dep-nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 5
strategy:
type: Recreate # recreate 전략
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: Never
ports:
- containerPort: 80
이렇게 처음에 있던 pod와 그 다음 파드의 이름이 달라진것을 볼 수 있는데, 이 때 이전 파드를 완전히 삭제하고 생성하는것을 볼 수 있다.
Strategy : Rollingupdate
apiVersion: apps/v1
kind: Deployment
metadata:
name: dep-nginx
spec:
replicas: 5
selector:
matchLabels:
app: nginx
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 2
maxUnavailable: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
~
rollingupdate yml 파일을 적용하기 전의 모습이다.
파일을 적용하면 처음에 새로은 dep 이름이 나오면서 2개가 준비된다. 그러면서 기존에 있던 deploy는 2개가 줄어든다.
'Docker, k8s' 카테고리의 다른 글
k8s_Volume (2) Persistent Volume (0) | 2023.10.02 |
---|---|
k8s_ Service Account 개념 (1) | 2023.09.30 |
k8s_로드밸런스 Metallb (0) | 2023.09.20 |
k8s_ Autoscaling Metric Server(HPA) (0) | 2023.09.18 |
k8s_NodePort , Port, TargetPort (0) | 2023.09.17 |