kubernetes 맛보기-5. 롤링업데이트 & 롤백

mhlee·2021년 6월 7일
0

1. yaml 파일작성

항상 그렇듯이 yaml 파일부터 작성한다.
gasbugs/http-go:v1은 http 요청시 v1 문자열을 리턴한다.
이후 v2, v3로 변경하면서 롤링업데이트 되는지 확인한다.

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

2. deploy 생성 및 확인

아래 명령을 통해 deploy를 생성하고 해당 내용을 확인한다.

kubectl create -f http-go-deploy-v1.yaml
kubectl get all

3. 상세내용 확인

describe 명령을 통해 상세 내용을 확인할수 있다.
StrategyType에 RollingUpdate라고 되어 있으며, max surge = 25%, max unavailable = 25%로 정의 되어 있다. (디폴트 값)

kubectl describe deploy http-go

4. rollout 히스토리 저장

create 할때 --record=true 옵션을 통해, rollout 히스토리를 저장할수 있다.

5. 롤링업데이트 관찰 준비-1

롤링 업데이트를 관찰하기 위해, 아래와 같이 설정한다.

kubectl patch deploy http-go -p '{"spec": {"minReadySeconds": 10}}'
kubectl expose deploy http-go

patch를 통해 10초의 지연시간(준비시간)을 설정한다.
그리고 expose를 통해 서비스를 외부에 노출한다.
해당 ip는 get svc 명령을 통해 확인가능하다.

6. 롤링업데이트 관찰 준비-2

busybox 이미지를 생성하고, http-go 클러스터 ip를 1초 주기로 조회하는 쉘을 실행한다.
참고로, http-go 클러스터 ip 확인은 5번에서 get svc를 통해 조회된 ip이다.

7. 이미지 버젼 변경

아래 명령을 통해 v2로 이미지를 변경한다.

kubectl set image deploy http-go http-go=gasbugs/http-go:v2

6번에서 실행한 출력이 시간이 지남에 따라 하나씩 v1 -> v2로 변경됨을 확인할수 있다.

8. edit를 통한 이미지 변경

edit 명령을 통해, yaml 파일의 내용을 변경할수 있다.
v2 -> v3로 변경해보자.
그리고, rollout history 명령을 통해 확인한다.

kubectl edit depoly http-go
kubectl rollout history deploy http-go

6번에서 실행한 출력이 시간이 지남에 따라 하나씩 v2 -> v3로 변경됨을 확인할수 있다.

9. rollback 방법

아래 처럼 rollout undo 명령을 통해 과거 버젼으로 변경가능하다.
rollout undo는 직전 버젼으로 변경이며, --to-revision 옵션을 통해 단계를 뛰어넘어 롤백도 가능하다.

kubectl rollout undo deploy http-go
kubectl rollout undo deploy http-go --to-revision=1

profile
삽질하는 개발자

0개의 댓글