ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 다양한 배포전략을 이해해보자
    MSA & 쿠버네티스(Kubernetes) - k8s 2023. 8. 16. 00:01
    728x90

    무중단 배포란?

    서비스가 중단되지 않은 상태로 새로운 버전을 사용하에게 배포하는 것을 말합니다.

    무중단 배포를 하기 위해서는 최소 2대 이상의 서버가 확보되어야합니다.

    무중단 배포에는 롤링, 블루/그린, 카나리 등의 배포전략이 존재합니다.

     

    무중단 배포가 필요한 이유는?

    만약 유저가 서비스를 이용할 수 없는 시간인 다운타임이 존재한다면, 유저는 불편함을 느끼고 그로 인해 유저가 이탈하는 경우 회사 입장에서는 그 사이에 금전적인 손실이 발생할 수 있습니다.

     

    Rolling 배포

    롤링의 사전적 정의 중 하나로는 "규칙적인 단계로 이뤄진"이라는 뜻이 있습니다.

    트래픽을 점진적으로 구버전에서 새로운 버전으로 옮기는 방식입니다.

     

    인스턴스를 하나 추가하고, 새로운 버전(V2)을 실행합니다.

    로드밸런서를 해당 인스턴스(V2)를 추가하고, 기존의 V1은 줄여나가는 방식을 반복합니다.

     

    단점으로는 구버전과 신버전의 애플리케이션이 동시에 서비스되기 때문에 호환성 문제가 발생할 수 있습니다.

     

     

    Blue/Green 배포

    트래픽을 한 번에 옮기는 방식입니다.

    현재 운영 중인 V1을 Blue라고 부릅니다.

    새로 배포될 V2를 Green이라고 부릅니다.

    롤링배포와 다르게 트래픽을 모두 새로운 버전으로 옮겨갑니다.

     

    카나리 배포

     

    점진적으로 구버전에 대한 트래픽을 신버전으로 옮겨나갑니다.

    이때 새로운 버전에 대한 오류가 정의된 이상으로 나타나는 경우 배포에 실패하고 기존 버전으로 돌아갑니다.

    반대로 새로운 버전에 이상이 없는 경우 트래픽을 신규버전으로 옮깁니다.

     

     

     

     

    쿠버네티스에서 Graceful Termination

    무중단 배포를 수행하는데 만약 V1에서 통신하고 있는데 갑자기 V1 서버를 꺼버리고, V2서버만 통신이 되면 어떻게 될까요?

    두꺼비집을 내리는 것처럼 한순간 모든 프로세스를 종료한다면 중요한 데이터나 네트워크 연결이 그대로 유실될 수 있습니다.

    예를 들어 WebSocket Connection을 최대 5분 동안 지원해야 하는 서버에서 배포가 발생하면 기존 Connection들은 어떻게 될까요?

    이런 영향도를 최소화하기 위해 Graceful Termination 방법이 있습니다.

     

    terminationGracePeriodSeconds란 속성을 통해 정상 종료 동작이 수행되는 기간을 설정할 수 있습니다.

    예를 들어 서버가 로직을 처리하는데 걸리는 최대시간이 5분이라면 해당시간이상으로 기간을 설정해 주면 됩니다.

    pod를 종료할 때 SIGTERM 시그널을 보내고 위의 속성이 설정된 시간 이후에 SIGKILL 시그널을 보내 프로세스를 종료합니다.

    https://merrily-code.tistory.com/275

     

     

    참고자료

    https://hudi.blog/zero-downtime-deployment/

    https://reference-m1.tistory.com/211

    https://ooeunz.tistory.com/124

    https://merrily-code.tistory.com/275

    https://tech.kakao.com/2018/12/24/kubernetes-deploy/

     

    댓글

Designed by Tistory.