본문 바로가기

⭐ Kubernetes & EKS/롤링 업데이트 와 롤백 (Rolling update and Rollb)

롤링 업데이트와 롤백

# 롤링 업데이트와 롤백

- 디플로이 먼트 롤링 업데이트와 롤백

- 다운타임없이 업데이트 제공

- 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를 통해 업데이트와 롤백이 손쉽게 가능하고 자동으로 이루어 진다는 것을 볼 수있다.