본문 바로가기

DevOps/쿠버네티스

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

쿠버네티스 배포

## 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