DevOps/쿠버네티스

쿠버네티스를 통한 지속적 배포 전략(rolling, blue green) 실습

AndersonChoi 2018. 5. 3. 14:48

쿠버네티스 배포

## pod들이 배포되어있을때 어떻게 배포할까?


## green blue전략 : 똑같은 수의 pod을 추가로 만들어서 service가 바라보는 쪽을 변경하는 전략. 그러나 리소스가 제한적일 때는 적용 힘듦.


## Rolling update전략 : scale out하면서 기존의 version1 pod들을 제거하는 전략. zero down time, 리소스가 적더라도 적용 가능. 그러나 일정시간에는 고객에게 version1, version2가 혼재함.


※ update version마다 rc가 만들어져야함 중요!! 그러므로 name에 version명을 적어주는게 좋음.


apiVersion: v1
kind: ReplicationController
metadata:
  name: kubia-v1
spec:
  replicas: 3
  selector:
    app: kubia
  template:
    metadata:
      labels:
        app: kubia
    spec:
      containers:
      - name: kubia
        image: reg.cloud.com/kubia:v1
        ports:
        - containerPort: 8080


$ k create -f test-rc-v1.yml

$ k create -f test-service.yml




쿠버네티스 롤링 업데이트 하기(구식)

$ k rolling-update kubia-v1 kubia-v2 --image=reg.cloud.com/kubia:v2

## reg.cloud.com/kubia:v2로 부터 이미지를 들고와서 kubia-v1를 스케일다운, kubia-v2를 신규로 스케일 아웃한다.


## 기존 rs를 지우기 때문에 롤백하기 어렵다!!



Deployments를 통한 자동 배포하기

apiVersion: apps/v1beta1
kind: Deployment ## kubernetes deployment사용하기
metadata:
  name: kubia
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: kubia
    spec:
      containers:
      - name: kubia
        image: reg.cloud.com/kubia:v1
        ports:
        - containerPort: 8080


$ k create -f test-deploy.yml

## deployment는 k create -f 로 배포하면안됨. 업데이트 관리를 따로 해야하기 때문임.


$ k create -f test-deploy.yml --record

## 모든 기록을 남기기 위해 record옵션을 넣어준다.


$ k rollout status deployment kubia

## kubia의 status 확인


$ k rollout history deployment kubia

## kubia의 작업내용 histroy를 추적가능 순서대로 볼 수 있음


$ k set image deploy kubia kubia=reg.cloud.com/kubia:v2

## code container image를 가져와서 update하기




$ k get rs

## rs를 확인하게 되면 v2가 올라가고 v1은 내려감을 알 수 있다.

## 기존 v1 rs가 그대로 살아있고 history가 남아있기 때문에 매우 유용함.(롤백 등에 사용가능)


$ k rollout status deployment kubia

## kubia의 deploy 정상적인지 확인


minReadySeconds 적용하기

$ k patch deployment kubia -p '{"spec":{"minReadySeconds":10}}'
## 본래는 deployment에 해당하는 값을 yml을 통해 넣어야하지만, patch명령어를 통해 직접 셋팅도 가능하다.



그림출처 : https://livebook.manning.com/#!/book/kubernetes-in-action/chapter-9/22