# 롤링 업데이트와 롤백
- 디플로이 먼트 롤링 업데이트와 롤백
- 다운타임없이 업데이트 제공
- pod v1을 지원하면서 v2를 실행, 하위호환 가능해야함
- 롤링업데이트 개념도
- 이전에는 kubectl을 통해 수동으로 업데이트 진행
- 현재는 deployment가 자동으로 업데이트 진행
# 롤링 업데이트 실습
# 이전 시간에 사용한 jenkins 파일을 활용
cp jenkins-deploy.yaml http-go-deploy.yaml
vim http-go-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: http-go
labels:
app: http-go
spec:
replicas: 3
selector:
matchLabels:
app: http-go
template:
metadata:
labels:
app: http-go
spec:
containers:
- name: http-go
image: gasbugs/http-go:v1
ports:
- containerPort: 8080
mv http-go-deploy.yaml http-go-deploy-v1.yaml
kubectl create -f http-go-deploy-v1.yaml
kubectl get all
# 디플로이 내용 자세히 보기
kubectl describe deploy http-go
- yaml 파일로 보는게 간단하다.
kubectl get deploy http-go -o yaml
# 업데이트 수행하기
kubectl delete all --all
kubectl create -f http-go-deploy-v1.yaml --record=true
--record=true 옵션을 줘야 히스토리에 백업이 된다.
# 히스토리 확인(최대 10개까지 확인가능)
kubectl rollout history deploy http-go
# 업데이트 시 준비시간 10초를 주는 옵션 부여
kubectl patch deploy http-go -p '{"spec":{"minReadySeconds":10}}'
# 로드밸런싱 해주는 역할 실행하기
kubectl expose deploy http-go
kubectl get svc
# curl을 통한 서비스 확인하기
- 도커 실행명령어와 비슷
kubectl run -it --rm --image busybox -- bash
- 새로운 환경? 으로 이동
wget -O- -q [클러스터ip]:8080
wget -O- -q 10.98.37.0:8080
# 1초에 한번씩 실행하는 프로그램 구현
while true; do wget -O- -q 10.98.37.0:8080; sleep 1; done
- 켜놓으면 지속적으로 실행되고 있는지 체크 가능하다.
- 업데이트 하면서 프로그램이 지속적으로 실행 되고 있는지 체크 해보자.
# 새로운탭을 열고 추가작업을 실행
# 업데이트를 수행
kubectl set image deploy http-go http-go=gasbugs/http-go:v2
# 업데이트 진행내역 확인
kubectl get pod -w
# history 확인
kubectl rollout history deploy http-go
--record=true 정보를 주지않아 히스토리를 보면 이전버전을 그대로 쓴것을 확인 가능하다.
kubectl set image deploy http-go http-go=gasbugs/http-go:v2 --record=true
kubectl rollout history deploy http-go
- 확인하면 버전이 변경된것을 확인할 수있다.
kubectl get all
- 레플리카셋을 확인
# edit를 통한 업데이트
kubectl edit deploy http-go --record=true
image 항목을 찾고, v3옵션을 설정 후 저장을 한다.
kubectl get all
- 레플리카셋을 확인해보면 업데이트가 시작된것을 확인 할 수 있다.
# histoty 확인
kubectl rollout history deploy http-go
- 3개의 버전이 있는것을 볼 수 있다.
# undo를 통해 롤백을 수행해보자.
kubectl rollout undo deploy http-go
kubectl rollout history deploy http-go
- v3에서 v2로 순차적으로 내려가는 모습을 볼 수 있다.
- 업데이트가 완료되면 v2만 남게된다.
# 만약 v2버전이 아닌 v1버전으로 롤백하고 싶다면? 특정 버전으로 롤백 하기
kubectl rollout undo deploy http-go --to-revision=1
- v1 버전으로 돌아가고 있는 모습
- 이로써 deplotment를 통해 업데이트와 롤백이 손쉽게 가능하고 자동으로 이루어 진다는 것을 볼 수있다.
'⭐ Kubernetes & EKS > 롤링 업데이트 와 롤백 (Rolling update and Rollb)' 카테고리의 다른 글
연습문제 애플리케이션 롤링 업데이트와 롤백 (0) | 2021.09.09 |
---|