[배포] 1.무중단 배포
무중단 배포
서비스가 중단되지 않으면서 새로운 버전으로 업데이트를 진행한다.
무중단 배포는 로드밸런싱을 응용하는 것으로, v1으로 라우팅 되던 트래픽을 v2로 옮겨가는 것이다.
무중단 배포 종료
-
Rolling deployment
추가적인 서버 증설이 필요 없지만 롤백이 어렵다.
-
Blue/Green deployment
배포가 빠르고 롤백이 간편하지만 추가적인 서버 증설이 필요하다.
-
Canary deployment
안해봤음
무중단 배포 실습
무중단 배포를 nginx와 kubernetes를 이용하여 실습해본다.
먼저 공통적으로 사용할 프로젝트를 작업한다.
0. 공통 작업
-
배포에 사용 할 공통적으로 사용할 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"]
굉장히 무겁고 오래걸리는 방법이기 때문에 되도록이면 첫번째 방법을 사용한다.
-
Dockerfile을 빌드 후 Docker hub에 도커이미지를 업로드 한다.
Docker Hub에 이미지를 업로드하기 위해서는
/<이미지 명="">:<태그> 형식을 지켜서 빌드한다.태그>이미지> $ docker build --tag zkdlu/myapp:v1 .
Push
$ docker push zkdlu/myapp:v1
-
마지막에 테스트를 위해 필요한 새로운 버전의 spring boot 앱을 빌드 한 뒤 미리 Docker Hub에 업로드 해도록 하자.
# build $ docker build --tag zkdlu/myapp:v2 . # push $ docker push zkdlu/myapp:v2
업데이트가 된 것을 확인하기 위해 spring boot 앱을 새로운 버전으로 만들어줘야 한다.