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

YL. Gho·2022년 12월 1일
0

Kubernetes

목록 보기
4/5
post-thumbnail

intro

지난 포스트에 이어서 이번 포스트에서는 무중단 배포가 실패하는 두 가지 경우 중 두 번째인 "배포 과정에서 아직 처리 중인 기존 요청에 대해 응답 실패가 발생하는 경우" 에 대해 알아본다. TerminationGracePeriodSeconds 과 어플리케이션 내의 graceful shutdown 구현을 적용하고 이를 확인하기 위한 테스트를 진행한다.

테스트 환경은 지난 포스트와 동일하다.

TL,DR

  • TerminationGracePeriodSeconds 을 적용하면 무조건 좋다
  • 어플리케이션을 개발할 때는 graceful shutdown 을 염두하자

Disclaimer

  • 이번에도 테스트 과정 전체가 다 포함되서 글이 길어요...

테스트 시나리오

테스트를 위해 먼저 TerminationGracePeriodSeconds 를 120초로 설정한다. 그리고 테스트 용 어플리케이션에는 sync.waitgroup 활용한 graceful shutdown 기능을 구현해 놓는다.
이 후 동일하게 배포 상황을 강제로 만들고 배포 과정 내부를 모니터링한다.

테스트 과정은 이전과 동일하나 아래의 액션을 추가로 실행한다.

  • 오랫동안 실행되는 요청을 만들기 위해 아래 요청을 배포 전에 미리 보낸다.
    • $ curl -m 600 test-ingress.yldot.service:8080/sleep?period=110
    • sleep 110초 실행 후 응답하는 요청을 보낸다.
      • 해당 요청은 배포 과정에서 아직 남아있는 기존 요청을 표현하기 위해서 이다.
    • 아래와 같이 sleep 요청을 5개 정도 생성해 놓는다.
$ curl -m 600 test-ingress.yldot.service:8080/sleep?period=110 &
[1] 6469
$ curl -m 600 test-ingress.yldot.service:8080/sleep?period=110 &
[2] 6491
$ curl -m 600 test-ingress.yldot.service:8080/sleep?period=110 &
[3] 6499
$ curl -m 600 test-ingress.yldot.service:8080/sleep?period=110 &
[4] 6506
$ curl -m 600 test-ingress.yldot.service:8080/sleep?period=110 &
[5] 6511
$ jobs
[1]   Running                 curl -m 600 test-ingress.yldot.service:8080/sleep?period=110 &
[2]   Running                 curl -m 600 test-ingress.yldot.service:8080/sleep?period=110 &
[3]   Running                 curl -m 600 test-ingress.yldot.service:8080/sleep?period=110 &
[4]-  Running                 curl -m 600 test-ingress.yldot.service:8080/sleep?period=110 &
[5]+  Running                 curl -m 600 test-ingress.yldot.service:8080/sleep?period=110 &



테스트 진행

테스트 과정은 이전 테스트와 크게 다르지 않기에 간략하게 정리한 전체 과정을 통해 살펴보자.

전체 배포 과정

  • Pod 상태 확인
    • 대부분의 상태는 이전 테스트와 동일하게 진행된다
    • 다른 점은 old pod 1,2 가 제거되는 과정인데, 바로 제거되지 않고 대략 110초 좀 넘게 유지되다가 제거된다.
      • sleep 110초 요청들로 인해 old pods 에는 처리 중인 기존 요청이 남아있는 상태이고 graceful shutdown 구현된 어플리케이션이기 때문에 SIGTERM 을 받아도 바로 종료하지 않고 모든 요청이 처리되기까지 대기한다.
      • TerminationGracePeriodSeconds 가 설정되어 있기 때문에 pod 는 120초 동안 어플리케이션의 종료을 기다려 준다.
Thu 01 Dec 2022 02:24:05 PM KST
NAME                       READY   STATUS    RESTARTS   AGE     IP               NODE                                                NOMINATED NODE   READINESS GATES
testapp-7b6b896b5b-q6vb2   1/1     Running   0          8m21s   10.171.179.106   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-xv9mc   1/1     Running   0          7m42s   10.171.233.254   ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1

Thu 01 Dec 2022 02:24:06 PM KST		## 배포 시작, new pod 1 생성 시작
NAME                       READY   STATUS              RESTARTS   AGE     IP               NODE                                                NOMINATED NODE   READINESS GATES
testapp-5b958f57fd-slzpp   0/1     ContainerCreating   0          1s      <none>           ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           0/1
testapp-7b6b896b5b-q6vb2   1/1     Running             0          8m23s   10.171.179.106   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-xv9mc   1/1     Running             0          7m44s   10.171.233.254   ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1

Thu 01 Dec 2022 02:24:08 PM KST
NAME                       READY   STATUS              RESTARTS   AGE     IP               NODE                                                NOMINATED NODE   READINESS GATES
testapp-5b958f57fd-slzpp   0/1     ContainerCreating   0          2s      <none>           ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           0/1
testapp-7b6b896b5b-q6vb2   1/1     Running             0          8m24s   10.171.179.106   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-xv9mc   1/1     Running             0          7m45s   10.171.233.254   ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1

...

Thu 01 Dec 2022 02:24:29 PM KST
NAME                       READY   STATUS    RESTARTS   AGE     IP               NODE                                                NOMINATED NODE   READINESS GATES
testapp-5b958f57fd-slzpp   1/1     Running   0          23s     10.171.176.164   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           0/1
testapp-7b6b896b5b-q6vb2   1/1     Running   0          8m45s   10.171.179.106   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-xv9mc   1/1     Running   0          8m6s    10.171.233.254   ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1

Thu 01 Dec 2022 02:24:31 PM KST		## new pod 1 타겟 등록 시작
NAME                       READY   STATUS    RESTARTS   AGE     IP               NODE                                                NOMINATED NODE   READINESS GATES
testapp-5b958f57fd-slzpp   1/1     Running   0          25s     10.171.176.164   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           0/1
testapp-7b6b896b5b-q6vb2   1/1     Running   0          8m47s   10.171.179.106   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-xv9mc   1/1     Running   0          8m8s    10.171.233.254   ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1

Thu 01 Dec 2022 02:24:32 PM KST
NAME                       READY   STATUS    RESTARTS   AGE     IP               NODE                                                NOMINATED NODE   READINESS GATES
testapp-5b958f57fd-slzpp   1/1     Running   0          26s     10.171.176.164   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           0/1
testapp-7b6b896b5b-q6vb2   1/1     Running   0          8m48s   10.171.179.106   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-xv9mc   1/1     Running   0          8m9s    10.171.233.254   ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1

...

Thu 01 Dec 2022 02:24:42 PM KST
NAME                       READY   STATUS    RESTARTS   AGE     IP               NODE                                                NOMINATED NODE   READINESS GATES
testapp-5b958f57fd-slzpp   1/1     Running   0          36s     10.171.176.164   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           0/1
testapp-7b6b896b5b-q6vb2   1/1     Running   0          8m58s   10.171.179.106   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-xv9mc   1/1     Running   0          8m19s   10.171.233.254   ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1

Thu 01 Dec 2022 02:24:43 PM KST		## new pod 1 타겟 등록 완료
NAME                       READY   STATUS    RESTARTS   AGE     IP               NODE                                                NOMINATED NODE   READINESS GATES
testapp-5b958f57fd-slzpp   1/1     Running   0          38s     10.171.176.164   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           0/1
testapp-7b6b896b5b-q6vb2   1/1     Running   0          9m      10.171.179.106   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-xv9mc   1/1     Running   0          8m21s   10.171.233.254   ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1

Thu 01 Dec 2022 02:24:45 PM KST		## new pod 1 생성 완료
NAME                       READY   STATUS    RESTARTS   AGE     IP               NODE                                                NOMINATED NODE   READINESS GATES
testapp-5b958f57fd-slzpp   1/1     Running   0          39s     10.171.176.164   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-q6vb2   1/1     Running   0          9m1s    10.171.179.106   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-xv9mc   1/1     Running   0          8m22s   10.171.233.254   ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1

Thu 01 Dec 2022 02:24:46 PM KST		## old pod 1 제거 시작, new pod 1 생성 시작
NAME                       READY   STATUS              RESTARTS   AGE     IP               NODE                                                NOMINATED NODE   READINESS GATES
testapp-5b958f57fd-kbwb2   0/1     ContainerCreating   0          2s      <none>           ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           0/1
testapp-5b958f57fd-slzpp   1/1     Running             0          41s     10.171.176.164   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-q6vb2   1/1     Terminating         0          9m3s    10.171.179.106   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-xv9mc   1/1     Running             0          8m24s   10.171.233.254   ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1

Thu 01 Dec 2022 02:24:48 PM KST
NAME                       READY   STATUS        RESTARTS   AGE     IP               NODE                                                NOMINATED NODE   READINESS GATES
testapp-5b958f57fd-kbwb2   0/1     Running       0          3s      10.171.232.42    ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           0/1
testapp-5b958f57fd-slzpp   1/1     Running       0          42s     10.171.176.164   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-q6vb2   1/1     Terminating   0          9m4s    10.171.179.106   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-xv9mc   1/1     Running       0          8m25s   10.171.233.254   ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1

...

Thu 01 Dec 2022 02:25:08 PM KST
NAME                       READY   STATUS        RESTARTS   AGE     IP               NODE                                                NOMINATED NODE   READINESS GATES
testapp-5b958f57fd-kbwb2   1/1     Running       0          23s     10.171.232.42    ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           0/1
testapp-5b958f57fd-slzpp   1/1     Running       0          62s     10.171.176.164   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-q6vb2   1/1     Terminating   0          9m24s   10.171.179.106   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-xv9mc   1/1     Running       0          8m45s   10.171.233.254   ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1

Thu 01 Dec 2022 02:25:09 PM KST		## new pod 2 타겟 등록 시작
NAME                       READY   STATUS        RESTARTS   AGE     IP               NODE                                                NOMINATED NODE   READINESS GATES
testapp-5b958f57fd-kbwb2   1/1     Running       0          25s     10.171.232.42    ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           0/1
testapp-5b958f57fd-slzpp   1/1     Running       0          64s     10.171.176.164   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-q6vb2   1/1     Terminating   0          9m26s   10.171.179.106   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-xv9mc   1/1     Running       0          8m47s   10.171.233.254   ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1

Thu 01 Dec 2022 02:25:11 PM KST
NAME                       READY   STATUS        RESTARTS   AGE     IP               NODE                                                NOMINATED NODE   READINESS GATES
testapp-5b958f57fd-kbwb2   1/1     Running       0          26s     10.171.232.42    ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           0/1
testapp-5b958f57fd-slzpp   1/1     Running       0          65s     10.171.176.164   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-q6vb2   1/1     Terminating   0          9m27s   10.171.179.106   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-xv9mc   1/1     Running       0          8m48s   10.171.233.254   ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1

...

Thu 01 Dec 2022 02:25:21 PM KST
NAME                       READY   STATUS        RESTARTS   AGE     IP               NODE                                                NOMINATED NODE   READINESS GATES
testapp-5b958f57fd-kbwb2   1/1     Running       0          36s     10.171.232.42    ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           0/1
testapp-5b958f57fd-slzpp   1/1     Running       0          75s     10.171.176.164   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-q6vb2   1/1     Terminating   0          9m37s   10.171.179.106   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-xv9mc   1/1     Running       0          8m58s   10.171.233.254   ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1

Thu 01 Dec 2022 02:25:22 PM KST		## new pod 2 타겟 등록 완료
NAME                       READY   STATUS        RESTARTS   AGE     IP               NODE                                                NOMINATED NODE   READINESS GATES
testapp-5b958f57fd-kbwb2   1/1     Running       0          38s     10.171.232.42    ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           0/1
testapp-5b958f57fd-slzpp   1/1     Running       0          77s     10.171.176.164   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-q6vb2   1/1     Terminating   0          9m39s   10.171.179.106   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-xv9mc   1/1     Running       0          9m      10.171.233.254   ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1

Thu 01 Dec 2022 02:25:24 PM KST
NAME                       READY   STATUS        RESTARTS   AGE     IP               NODE                                                NOMINATED NODE   READINESS GATES
testapp-5b958f57fd-kbwb2   1/1     Running       0          39s     10.171.232.42    ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           0/1
testapp-5b958f57fd-slzpp   1/1     Running       0          78s     10.171.176.164   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-q6vb2   1/1     Terminating   0          9m40s   10.171.179.106   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-xv9mc   1/1     Running       0          9m1s    10.171.233.254   ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1

Thu 01 Dec 2022 02:25:25 PM KST		## new pod 2 생성 완료, old pod 2 제거 시작
NAME                       READY   STATUS        RESTARTS   AGE     IP               NODE                                                NOMINATED NODE   READINESS GATES
testapp-5b958f57fd-kbwb2   1/1     Running       0          41s     10.171.232.42    ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1
testapp-5b958f57fd-slzpp   1/1     Running       0          80s     10.171.176.164   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-q6vb2   1/1     Terminating   0          9m42s   10.171.179.106   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-xv9mc   1/1     Terminating   0          9m3s    10.171.233.254   ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1

Thu 01 Dec 2022 02:25:27 PM KST
NAME                       READY   STATUS        RESTARTS   AGE     IP               NODE                                                NOMINATED NODE   READINESS GATES
testapp-5b958f57fd-kbwb2   1/1     Running       0          42s     10.171.232.42    ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1
testapp-5b958f57fd-slzpp   1/1     Running       0          81s     10.171.176.164   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-q6vb2   1/1     Terminating   0          9m43s   10.171.179.106   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-xv9mc   1/1     Terminating   0          9m4s    10.171.233.254   ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1

...

Thu 01 Dec 2022 02:25:54 PM KST
NAME                       READY   STATUS        RESTARTS   AGE     IP               NODE                                                NOMINATED NODE   READINESS GATES
testapp-5b958f57fd-kbwb2   1/1     Running       0          70s     10.171.232.42    ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1
testapp-5b958f57fd-slzpp   1/1     Running       0          109s    10.171.176.164   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-q6vb2   0/1     Terminating   0          10m     10.171.179.106   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-xv9mc   0/1     Terminating   0          9m32s   10.171.233.254   ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1

Thu 01 Dec 2022 02:25:56 PM KST		## TerminationGracePeriodSeconds 가 만료되어서 강제로 old pod 1 제거 완료
NAME                       READY   STATUS        RESTARTS   AGE     IP               NODE                                                NOMINATED NODE   READINESS GATES
testapp-5b958f57fd-kbwb2   1/1     Running       0          71s     10.171.232.42    ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1
testapp-5b958f57fd-slzpp   1/1     Running       0          110s    10.171.176.164   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-xv9mc   0/1     Terminating   0          9m33s   10.171.233.254   ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1

Thu 01 Dec 2022 02:25:57 PM KST
NAME                       READY   STATUS        RESTARTS   AGE     IP               NODE                                                NOMINATED NODE   READINESS GATES
testapp-5b958f57fd-kbwb2   1/1     Running       0          73s     10.171.232.42    ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1
testapp-5b958f57fd-slzpp   1/1     Running       0          112s    10.171.176.164   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
testapp-7b6b896b5b-xv9mc   0/1     Terminating   0          9m35s   10.171.233.254   ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1

Thu 01 Dec 2022 02:25:59 PM KST		## TerminationGracePeriodSeconds 가 만료되어서 강제로 old pod 2 제거 완료
NAME                       READY   STATUS    RESTARTS   AGE    IP               NODE                                                NOMINATED NODE   READINESS GATES
testapp-5b958f57fd-kbwb2   1/1     Running   0          74s    10.171.232.42    ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1
testapp-5b958f57fd-slzpp   1/1     Running   0          113s   10.171.176.164   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1

Thu 01 Dec 2022 02:26:00 PM KST
NAME                       READY   STATUS    RESTARTS   AGE    IP               NODE                                                NOMINATED NODE   READINESS GATES
testapp-5b958f57fd-kbwb2   1/1     Running   0          75s    10.171.232.42    ip-10-171-227-94.ap-northeast-2.compute.internal    <none>           1/1
testapp-5b958f57fd-slzpp   1/1     Running   0          114s   10.171.176.164   ip-10-171-184-203.ap-northeast-2.compute.internal   <none>           1/1
  • 타겟 그룹 상태 확인

    • 이전 테스트와 다른 점이 없이 동일한 과정으로 진행된다.
    • 테스트 결과 화면은 생략한다.
  • 신규 요청 상태 확인

    • 이전 테스트와 거의 동일하게 진행되나 다른 점은 요청 실패가 발생하지 않는 점이다
      • old pods 타켓에 대한 deregister 가 시작되고 draining 상태가 된다. 그 후 동일하게 대략 10초 정도의 신규 요청은 draining 타켓으로 인입된다.
      • 하지만 요청 실패가 나지 않는 이유는 graceful shutdown 구현으로 인해 어플리케이션이 아직 실행 중인기 때문이다.
        • 기존 요청을 처리 중인 어플리케이션은 유입된 신규 요청도 함께 정상 처리하여 응답한다.
Thu 01 Dec 2022 02:24:05 PM KST
 - testapp-7b6b896b5b-q6vb2

Thu 01 Dec 2022 02:24:06 PM KST		## 배포 시작, new pod 1 생성 시작
 - testapp-7b6b896b5b-xv9mc

Thu 01 Dec 2022 02:24:07 PM KST
 - testapp-7b6b896b5b-xv9mc

...

Thu 01 Dec 2022 02:24:30 PM KST
 - testapp-7b6b896b5b-xv9mc

Thu 01 Dec 2022 02:24:31 PM KST		## new pod 1 타겟 등록 시작
 - testapp-7b6b896b5b-xv9mc

Thu 01 Dec 2022 02:24:32 PM KST
 - testapp-7b6b896b5b-q6vb2

...

Thu 01 Dec 2022 02:24:43 PM KST
 - testapp-7b6b896b5b-q6vb2

Thu 01 Dec 2022 02:24:44 PM KST		## new pod 1 타겟 등록 완료
 - testapp-7b6b896b5b-xv9mc

Thu 01 Dec 2022 02:24:45 PM KST		## new pod 1 생성 완료
 - testapp-7b6b896b5b-q6vb2

Thu 01 Dec 2022 02:24:47 PM KST		## old pod 1 제거 시작, new pod 1 생성 시작
 - testapp-7b6b896b5b-xv9mc

Thu 01 Dec 2022 02:24:48 PM KST
 - testapp-5b958f57fd-slzpp

...

Thu 01 Dec 2022 02:25:08 PM KST
 - testapp-7b6b896b5b-xv9mc

Thu 01 Dec 2022 02:25:09 PM KST		## new pod 2 타겟 등록 시작
 - testapp-5b958f57fd-slzpp

Thu 01 Dec 2022 02:25:10 PM KST
 - testapp-7b6b896b5b-xv9mc

...

Thu 01 Dec 2022 02:25:21 PM KST
 - testapp-5b958f57fd-slzpp

Thu 01 Dec 2022 02:25:22 PM KST		## new pod 2 타겟 등록 완료
 - testapp-7b6b896b5b-xv9mc

Thu 01 Dec 2022 02:25:23 PM KST
 - testapp-5b958f57fd-slzpp

Thu 01 Dec 2022 02:25:24 PM KST		## new pod 2 생성 완료, old pod 2 제거 시작
 - testapp-5b958f57fd-kbwb2

Thu 01 Dec 2022 02:25:26 PM KST
 - testapp-5b958f57fd-kbwb2

...

Thu 01 Dec 2022 02:25:55 PM KST
 - testapp-5b958f57fd-kbwb2

Thu 01 Dec 2022 02:25:56 PM KST		## TerminationGracePeriodSeconds 가 만료되어서 강제로 old pod 1 제거 완료

 - testapp-5b958f57fd-slzpp

Thu 01 Dec 2022 02:25:58 PM KST
 - testapp-5b958f57fd-slzpp

Thu 01 Dec 2022 02:25:59 PM KST		## TerminationGracePeriodSeconds 가 만료되어서 강제로 old pod 2 제거 완료

 - testapp-5b958f57fd-kbwb2

Thu 01 Dec 2022 02:26:00 PM KST
 - testapp-5b958f57fd-slzpp 



테스트 결과

TerminationGracePeriodSeconds 와 어플리케이션 내의 graceful shutdown 구현을 적용한 배포 테스트의 결과는 아래와 같다.

  1. old pods 의 제거로 인해 SIGTERM 을 받아도 아직 실행 중인 요청들을 바로 종료하지 않고 모두 정상 처리 완료 후 종료할 수 있다.
  2. old pods 가 기존 요청들의 처리를 무한정 기다려 줄 순 없다. 이를 위한 데드라인 용도로 TerminationGracePeriodSeconds 을 사용하여 최대 처리 대기 시간을 지정할 수 있다.
  3. 이전 테스트에서 확인된 draining 상태의 타겟으로 초기 신규 요청이 인입되어 발생된 실패는 위의 설정으로 인해 어플리케이션이 아직 살아있어서 발생되지 않았다.
    이를 다른 방향으로 활용할 여지가 있을거 같다.


outro

무중단 배포가 실패하는 두가지 경우에 대해서 알아보고 이에 대한 보완책을 적용한 테스트도 함께 진행해보았다.
EKS 와 AWS Load Balancer Controller 의 조합을 사용하면 AWS 기능을 쉽게 활용하며 클러스터를 운영할 수 있다. 구조적인 빈공간이 있었지만 다행히 이를 보완해주는 대비책이 제공되고 있었고 완벽하진 않더라도 많은 부분을 보완해주는 것을 확인하였다.

pod readiness gate 와 TerminationGracePeriodSeconds, 사용하지 않을 이유가 없다 무조건 쓰자!
그리고 어플리케이션에는 graceful shutdown 을 구현해주도록 하자.

profile
YLdot Padomaic

0개의 댓글

관련 채용 정보