[배포] 1.무중단 배포

무중단 배포

서비스가 중단되지 않으면서 새로운 버전으로 업데이트를 진행한다.

무중단 배포는 로드밸런싱을 응용하는 것으로, v1으로 라우팅 되던 트래픽을 v2로 옮겨가는 것이다.

무중단 배포 종료

  1. Rolling deployment

    추가적인 서버 증설이 필요 없지만 롤백이 어렵다.

  2. Blue/Green deployment

    배포가 빠르고 롤백이 간편하지만 추가적인 서버 증설이 필요하다.

  3. Canary deployment

    안해봤음

무중단 배포 실습

무중단 배포를 nginx와 kubernetes를 이용하여 실습해본다.

먼저 공통적으로 사용할 프로젝트를 작업한다.

0. 공통 작업

  1. 배포에 사용 할 공통적으로 사용할 spring boot 앱을 Docker 이미지로 만든다.

     # Dockerfile
     FROM openjdk:11-jre-slim
     COPY ./build/libs/*.jar ./app.jar
     ENTRYPOINT ["java", "-jar", "/app.jar"]
    

    빌드 된 jar파일을 이용해 도커 이미지를 생성하는 방법이다.

    다른 방법으로 프로젝트 빌드도 도커파일에서 하는 방법이 있다. 프로젝트 전체를 컨테이너에서 빌드하는 것이다.

     # Dockerfile
     FROM openjdk:11-jdk-slim as builder
     COPY . .
     WORKDIR /
     RUN chmod +x ./gradlew
     RUN ./gradlew bootjar
    
     FROM openjdk:11-jre-slim
     COPY --from=builder build/libs/*.jar app.jar
     ENTRYPOINT ["java", "-jar", "/app.jar"]
    

    굉장히 무겁고 오래걸리는 방법이기 때문에 되도록이면 첫번째 방법을 사용한다.

  2. Dockerfile을 빌드 후 Docker hub에 도커이미지를 업로드 한다.

    Docker Hub에 이미지를 업로드하기 위해서는 /<이미지 명="">:<태그> 형식을 지켜서 빌드한다.

    $ docker build --tag zkdlu/myapp:v1 .
    

    Push

    $ docker push zkdlu/myapp:v1
    
  3. 마지막에 테스트를 위해 필요한 새로운 버전의 spring boot 앱을 빌드 한 뒤 미리 Docker Hub에 업로드 해도록 하자.

    # build
    $ docker build --tag zkdlu/myapp:v2 .
    # push
    $ docker push zkdlu/myapp:v2
    

    업데이트가 된 것을 확인하기 위해 spring boot 앱을 새로운 버전으로 만들어줘야 한다.