EKS 와 어플리케이션 무중단 배포 #3

YL. Gho·2022년 12월 17일
0

Kubernetes

목록 보기
5/5
post-thumbnail

intro

지난 무중단 배포 테스트 1,2 를 통해서 우리는 EKS 의 구조적 문제(?)를 확인했다. 그러면 이것을 우회할 방법이 없을까? 두 테스트를 자세히 본 분들은 이미 발견했을것 같다.
preStop 을 사용하는 것이다

preStop

EKS 에서 무중단 배포의 구조적 문제는 타겟이 deregister 되고 상태가 draining 으로 변경되면 바로 요청 인입이 막혀야 하나 어떠한 이유에서 초기 약 10 ~ 15초 간 요청이 인입된다는 것이다.
그렇다면 이 초기 10 ~ 15초 간의 요청을 처리해주면 되지 않을까? 이를 위해 Pod LifeCycle 의 한 단계인 preStop 에서 sleep 을 설정하여 의도적으로 잠시 어플리케이션 중지를 막아서 초기 인입되는 요청을 처리하게끔 해주면 된다.

아래는 preStop 에 sleep 을 적용한 예시이다.

...
  spec:
    containers:
    - name: testapp
      image: nginx
      lifecycle:
        preStop:
          exec:
            command: ["/bin/sh", "-c", "sleep 15"]
    terminationGracePeriodSeconds: 120    
 ...

물론 TerminationGracePeriodSeconds 의 값은 무조건 sleep 보단 크게 주어야 한다.
위와 같이 설정 후 테스트하면 이전과 다르게 배포 간 신규 인입 요청에서 실패가 발생하지 않고 모두 잘 처리된다.

outro

여러 테스트를 통해 EKS 에서도 무중단 배포를 달성할 수 있음을 확인했다. 각 배포 환경과 어플리케이션의 성격에 맞춰 적절한 sleep 시간을 설정한다면 안정적인 배포와 적절한 배포 소요 시간을 모두 확보할 수 있을 것이다.

profile
YLdot Padomaic

0개의 댓글

관련 채용 정보