Kubernetes/Udemy - CKAD with Tests

Deployment Strategy - Blue Green

비번변경 2022. 1. 24. 22:52

2021.08.07 - Rolling Updates & Rollbacks in Deployments

위의 이전 글에서 Deployment의 update 전략 중 recreate 전략과 rolling update 전략을 정리했었다. 그 내용을 간단하게 요약하면 아래와 같다.

 

Deployment Strategy - Recreate

기존 버전의 Pod를 모두 삭제한 후, 새 버전의 Pod를 한꺼번에 생성하는 방법

기존 버전을 중지하고 새 버전이 정상적으로 동작할 때까지 서비스 중단이 발생한다.

 

Deployment Strategy - Rolling Update

기존 버전의 Pod 하나를 삭제한 후, 새 버전의 Pod 생성을 반복하는 방법

서비스 중단이 발생하지 않으며 Deployment Upgrade Startegy 기본값이다.

 

이 글에서는 이 두 방법처럼 옵션에서 지정할 수 있는 전략은 아니지만 구현할 수 있는 Deployment 업그레이드 전략을 정리한다.

 

Deployment Strategy - Blue/Green

기존 버전의 Deployment이 동작하고 있는 환경에 새 버전의 Deployment을 배포한다. 이때 기존 버전의 Deployment를 Blue, 새 버전의 Deployment를 Green이라고 한다.

이후 Green에 대한 테스트가 완료되면 Blue로 라우팅 되던 트래픽을 한 번에 Green으로 변경한다.

 

Deployment Strategy - Blue/Green

쿠버네티스의 Deployments와 Services를 이용해 구현할 수 있다.

 

구현 방법

1. 애플리케이션을 배포한다. 이를 blue라고 하자.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-blue
  labels:
    app: myapp
    type: front-end
spec:
  templete:
    metadata:
      name: myapp-pod
      labels:
        version: v1 # 서비스 연결용 Label
    spec: containers
    - name: app-container
      image: myapp-image:1.0
  replicas: 5
  selector:
    matchLabels:
      type: front-end

 

2. blue로 트래픽을 라우팅 하는 서비스를 생성한다. 서비스를 포드와 연결하기 위해 version=v1 Label과 Selector를 이용한다.

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    version: v1 # 포드 연결용 Selector

 

3. 새 버전의 애플리케이션을 배포한다. 이를 green이라고 하자. Label은 version=v2로 설정한다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-green
  labels:
    app: myapp
    type: front-end
spec:
  templete:
    metadata:
      name: myapp-pod
      labels:
        version: v2
    spec: containers
    - name: app-container
      image: myapp-image:2.0
  replicas: 5
  selector:
    matchLabels:
      type: front-end

그리고 배포한 애플리케이션 테스트를 수행한다.

 

3. 테스트가 완료되면 서비스의 Selector를 version=v2로 변경한다.

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    version: v2

 


참고 문서

https://faun.pub/rest-and-grpc-load-generation-in-flagger-for-blue-green-deployments-7459b0a8014d