EKS 에서 AWS Load Balancer Controller 를 Ingress 의 백엔드로 사용하는 환경의 경우, deployment 의 rolling update 를 이용하는 배포는 완전한 무중단 배포를 보장하지 않는다.
하지만 아래 설정을 통해 무중단 배포에 좀 더 다가갈 수 있다.
TL,DR
- AWS Load Balancer Controller 를 사용한다면, pod readiness gate 꼭 사용하자!
Disclaimer
- 테스트 과정 전체가 다 결과가 되다보니 글이 길어질 수 밖에 없었다...
배포 과정에서 신규 또는 기존 요청 처리를 실패하면 무중단 배포라 할 수 없다.
아래의 시나리오를 통해 케이스를 알아보자.
1. 배포 과정에서 인입되는 신규 요청에 대해 응답 실패가 발생하는 경우
2. 배포 과정에서 아직 처리 중인 기존 요청에 대해 응답 실패가 발생하는 경우
이번 포스트는 위 두 가지 경우 중 첫 번째인 "배포 과정에서 인입되는 신규 요청에 대해 응답 실패가 발생하는 경우" 에 대한 보완책으로 pod readiness gate 를 적용하고 이를 확인하기 위한 테스트를 진행한다.
아래와 같은 환경 아래에서 테스트 진행했다.
func RunHTTPServer(wg *sync.WaitGroup) *http.Server {
mux := http.NewServeMux()
// pod 의 호스트네임을 응답한다.
mux.HandleFunc("/hostname", func(w http.ResponseWriter, r *http.Request) {
wg.Add(1)
defer wg.Done()
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
hostname, _ := os.Hostname()
io.WriteString(w, hostname)
})
// query string 으로 받은 시간 만큼 sleep 을 한 후 응답한다.
mux.HandleFunc("/sleep", func(w http.ResponseWriter, r *http.Request) {
wg.Add(1)
defer wg.Done()
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
period, err := strconv.Atoi(r.URL.Query().Get("period"))
if err != nil {
io.WriteString(w, err.Error())
io.WriteString(w, "\nwrong parameter\n")
return
}
log.Printf("sleep for %v secs then respond to %v\n", period, r.Host)
time.Sleep(time.Duration(period) * time.Second)
io.WriteString(w, fmt.Sprintf("awoke after %v secs\n", period))
})
...
go server.ListenAndServe()
return &server
}
$ k create ns testns
namespace/testns created
$ k label namespace testns elbv2.k8s.aws/pod-readiness-gate-inject=enabled
namespace/testns labeled
$ k describe namespace testns
Name: testns
Labels: elbv2.k8s.aws/pod-readiness-gate-inject=enabled
kubernetes.io/metadata.name=testns
Annotations: <none>
Status: Active
No resource quota.
No LimitRange resource.
$ k get all,ing -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-fc9974c74-qc6v9 1/1 Running 0 3m42s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-w4kwj 1/1 Running 0 3m42s 10.171.187.36 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/test-service ClusterIP 10.107.223.76 <none> 8080/TCP 14h app.kubernetes.io/name=testapp
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
deployment.apps/testapp 2/2 2 2 14h testapp public.ecr.aws/g4h1q6d9/srepractice:v0.4 app.kubernetes.io/name=testapp
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
replicaset.apps/testapp-57d4d54f4 0 0 0 13h testapp public.ecr.aws/g4h1q6d9/srepractice:v0.4 app.kubernetes.io/name=testapp,pod-template-hash=57d4d54f4
NAME CLASS HOSTS ADDRESS
PORTS AGE
ingress.networking.k8s.io/test-ingress aws-load-balancer-controller test-ingress.yldot.service internal-test-ingress-313265382.ap-northeast-2.elb.amazonaws.com 80 14h
테스트를 위해 먼저 pod readiness gate 기능을 적용시킨다. 이 후 배포 상황을 강제로 만들고 배포 과정 내부를 모니터링한다.
$ k rollout restart deploy testapp
$ curl -s test-ingress.yldot.service/hostname
$ k get pod -o wide
$ aws elbv2 describe-target-health --target-group-arn TG_ARN | jq .TargetHealthDescriptions[].TargetHealth.State
old pod 과 new pod 은 아래 pod 을 지칭한다.
- old pod 1:
testapp-fc9974c74-w4kwj
- old pod 2:
testapp-fc9974c74-qc6v9
- new pod 1:
testapp-5f6c5545cd-lprdh
- new pod 2:
testapp-5f6c5545cd-7gkq7
READINESS GATES
값이 0/1
로 남아있다Wed 30 Nov 2022 09:49:37 PM KST
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-fc9974c74-qc6v9 1/1 Running 0 3m42s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-w4kwj 1/1 Running 0 3m42s 10.171.187.36 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
Wed 30 Nov 2022 09:49:39 PM KST ## 배포 시작
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-fc9974c74-qc6v9 1/1 Running 0 3m43s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-w4kwj 1/1 Running 0 3m43s 10.171.187.36 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
Wed 30 Nov 2022 09:49:40 PM KST ## new pod 1 생성 시작
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-lprdh 0/1 ContainerCreating 0 1s <none> ip-10-171-184-203.ap-northeast-2.compute.internal <none> 0/1
testapp-fc9974c74-qc6v9 1/1 Running 0 3m45s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-w4kwj 1/1 Running 0 3m45s 10.171.187.36 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
Wed 30 Nov 2022 09:49:42 PM KST
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-lprdh 0/1 ContainerCreating 0 2s <none> ip-10-171-184-203.ap-northeast-2.compute.internal <none> 0/1
testapp-fc9974c74-qc6v9 1/1 Running 0 3m46s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-w4kwj 1/1 Running 0 3m46s 10.171.187.36 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
Wed 30 Nov 2022 09:49:43 PM KST
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-lprdh 0/1 Running 0 4s 10.171.179.106 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 0/1
testapp-fc9974c74-qc6v9 1/1 Running 0 3m48s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-w4kwj 1/1 Running 0 3m48s 10.171.187.36 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
Wed 30 Nov 2022 09:49:44 PM KST
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-lprdh 0/1 Running 0 5s 10.171.179.106 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 0/1
testapp-fc9974c74-qc6v9 1/1 Running 0 3m49s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-w4kwj 1/1 Running 0 3m49s 10.171.187.36 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
...
Wed 30 Nov 2022 09:50:03 PM KST
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-lprdh 1/1 Running 0 24s 10.171.179.106 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 0/1
testapp-fc9974c74-qc6v9 1/1 Running 0 4m8s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-w4kwj 1/1 Running 0 4m8s 10.171.187.36 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
Wed 30 Nov 2022 09:50:05 PM KST ## new pod 1 타겟 등록 시작
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-lprdh 1/1 Running 0 25s 10.171.179.106 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 0/1
testapp-fc9974c74-qc6v9 1/1 Running 0 4m9s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-w4kwj 1/1 Running 0 4m9s 10.171.187.36 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
Wed 30 Nov 2022 09:50:06 PM KST
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-lprdh 1/1 Running 0 27s 10.171.179.106 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 0/1
testapp-fc9974c74-qc6v9 1/1 Running 0 4m11s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-w4kwj 1/1 Running 0 4m11s 10.171.187.36 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
Wed 30 Nov 2022 09:49:38 PM KST
"healthy"
"healthy"
Wed 30 Nov 2022 09:49:39 PM KST ## 배포 시작
"healthy"
"healthy"
Wed 30 Nov 2022 09:49:41 PM KST ## new pod 1 생성 시작
"healthy"
"healthy"
Wed 30 Nov 2022 09:49:42 PM KST
"healthy"
"healthy"
Wed 30 Nov 2022 09:49:44 PM KST
"healthy"
"healthy"
Wed 30 Nov 2022 09:49:45 PM KST
"healthy"
"healthy"
...
Wed 30 Nov 2022 09:50:03 PM KST
"healthy"
"healthy"
Wed 30 Nov 2022 09:50:04 PM KST ## new pod 1 타겟 등록 시작
"healthy"
"initial"
"healthy"
Wed 30 Nov 2022 09:50:06 PM KST
"healthy"
"initial"
"healthy"
$ curl -s test-ingress.stg.kurly.services/hostname
Wed 30 Nov 2022 09:49:38 PM KST
- testapp-fc9974c74-w4kwj
Wed 30 Nov 2022 09:49:39 PM KST ## 배포 시작
- testapp-fc9974c74-qc6v9
Wed 30 Nov 2022 09:49:40 PM KST ## new pod 1 생성 시작
- testapp-fc9974c74-qc6v9
Wed 30 Nov 2022 09:49:41 PM KST
- testapp-fc9974c74-w4kwj
Wed 30 Nov 2022 09:49:43 PM KST
- testapp-fc9974c74-w4kwj
Wed 30 Nov 2022 09:49:44 PM KST
- testapp-fc9974c74-qc6v9
...
Wed 30 Nov 2022 09:50:03 PM KST
- testapp-fc9974c74-w4kwj
Wed 30 Nov 2022 09:50:05 PM KST ## new pod 1 타겟 등록 시작
- testapp-fc9974c74-qc6v9
Wed 30 Nov 2022 09:50:06 PM KST
- testapp-fc9974c74-w4kwj
READINESS GATES
값이 1/1
로 변경되고 Running 상태가 된다Wed 30 Nov 2022 09:50:15 PM KST
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-lprdh 1/1 Running 0 35s 10.171.179.106 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 0/1
testapp-fc9974c74-qc6v9 1/1 Running 0 4m19s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-w4kwj 1/1 Running 0 4m19s 10.171.187.36 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
Wed 30 Nov 2022 09:50:16 PM KST ## new pod 1 타겟 등록 완료
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-lprdh 1/1 Running 0 37s 10.171.179.106 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 0/1
testapp-fc9974c74-qc6v9 1/1 Running 0 4m21s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-w4kwj 1/1 Running 0 4m21s 10.171.187.36 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
Wed 30 Nov 2022 09:50:18 PM KST
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-lprdh 1/1 Running 0 38s 10.171.179.106 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 0/1
testapp-fc9974c74-qc6v9 1/1 Running 0 4m22s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-w4kwj 1/1 Running 0 4m22s 10.171.187.36 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
Wed 30 Nov 2022 09:50:19 PM KST ## new pod 1 생성 완료, old pod 1 제거 시작, new pod 2 생성 시작
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-7gkq7 0/1 ContainerCreating 0 1s <none> ip-10-171-227-94.ap-northeast-2.compute.internal <none> 0/1
testapp-5f6c5545cd-lprdh 1/1 Running 0 40s 10.171.179.106 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-qc6v9 1/1 Running 0 4m24s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-w4kwj 0/1 Terminating 0 4m24s 10.171.187.36 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
Wed 30 Nov 2022 09:50:21 PM KST
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-7gkq7 0/1 ContainerCreating 0 2s <none> ip-10-171-227-94.ap-northeast-2.compute.internal <none> 0/1
testapp-5f6c5545cd-lprdh 1/1 Running 0 41s 10.171.179.106 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-qc6v9 1/1 Running 0 4m25s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-w4kwj 0/1 Terminating 0 4m25s 10.171.187.36 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
...
Wed 30 Nov 2022 09:50:25 PM KST
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-7gkq7 0/1 Running 0 7s 10.171.230.156 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 0/1
testapp-5f6c5545cd-lprdh 1/1 Running 0 46s 10.171.179.106 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-qc6v9 1/1 Running 0 4m30s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-w4kwj 0/1 Terminating 0 4m30s 10.171.187.36 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
Wed 30 Nov 2022 09:50:27 PM KST ## old pod 1 제거 완료
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-7gkq7 0/1 Running 0 8s 10.171.230.156 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 0/1
testapp-5f6c5545cd-lprdh 1/1 Running 0 47s 10.171.179.106 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-qc6v9 1/1 Running 0 4m31s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
Wed 30 Nov 2022 09:50:28 PM KST
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-7gkq7 0/1 Running 0 10s 10.171.230.156 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 0/1
testapp-5f6c5545cd-lprdh 1/1 Running 0 49s 10.171.179.106 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-qc6v9 1/1 Running 0 4m33s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
...
Wed 30 Nov 2022 09:50:41 PM KST
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-7gkq7 1/1 Running 0 23s 10.171.230.156 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 0/1
testapp-5f6c5545cd-lprdh 1/1 Running 0 62s 10.171.179.106 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-qc6v9 1/1 Running 0 4m46s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
Wed 30 Nov 2022 09:50:43 PM KST ## new pod 2 타겟 등록 시작
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-7gkq7 1/1 Running 0 24s 10.171.230.156 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 0/1
testapp-5f6c5545cd-lprdh 1/1 Running 0 63s 10.171.179.106 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-qc6v9 1/1 Running 0 4m47s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
Wed 30 Nov 2022 09:50:44 PM KST
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-7gkq7 1/1 Running 0 26s 10.171.230.156 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 0/1
testapp-5f6c5545cd-lprdh 1/1 Running 0 65s 10.171.179.106 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-qc6v9 1/1 Running 0 4m49s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
Wed 30 Nov 2022 09:50:15 PM KST
"healthy"
"initial"
"healthy"
Wed 30 Nov 2022 09:50:16 PM KST ## new pod 1 타겟 등록 완료
"healthy"
"healthy"
"healthy"
Wed 30 Nov 2022 09:50:18 PM KST
"healthy"
"healthy"
"healthy"
Wed 30 Nov 2022 09:50:19 PM KST ## new pod 1 생성 완료, old pod 1 제거 시작, new pod 2 생성 시작
"draining" <- old pod 1 의 타겟이 draining 상태 변환 이후부턴 요청 인입 안되야 하나 실제로는 전환 초기에 몇몇 요청이 인입된다
"healthy"
"healthy"
Wed 30 Nov 2022 09:50:21 PM KST
"draining"
"healthy"
"healthy"
...
Wed 30 Nov 2022 09:50:25 PM KST
"draining"
"healthy"
"healthy"
Wed 30 Nov 2022 09:50:27 PM KST ## old pod 1 제거 완료
"draining"
"healthy"
"healthy"
Wed 30 Nov 2022 09:50:28 PM KST
"draining"
"healthy"
"healthy"
...
Wed 30 Nov 2022 09:50:41 PM KST
"draining"
"healthy"
"healthy"
Wed 30 Nov 2022 09:50:43 PM KST ## new pod 2 타겟 등록 시작
"initial"
"healthy"
"draining"
"healthy"
Wed 30 Nov 2022 09:50:44 PM KST
"initial"
"healthy"
"draining"
"healthy"
Wed 30 Nov 2022 09:50:15 PM KST
- testapp-fc9974c74-w4kwj
Wed 30 Nov 2022 09:50:16 PM KST ## new pod 1 타겟 등록 완료
- testapp-fc9974c74-qc6v9
Wed 30 Nov 2022 09:50:17 PM KST
- testapp-fc9974c74-w4kwj
Wed 30 Nov 2022 09:50:18 PM KST
- testapp-5f6c5545cd-lprdh
Wed 30 Nov 2022 09:50:19 PM KST ## new pod 1 생성 완료, old pod 1 제거 시작, new pod 2 생성 시작
- testapp-fc9974c74-qc6v9
Wed 30 Nov 2022 09:50:20 PM KST ## 요청 실패 발생
</html>><h1>504 Gateway Time-out</h1></center>d> <- old pod 1 의 타겟이 draining 상태 변환 이후부턴 요청 인입 안되야 하나 전환 초기에는 몇몇 요청이 인입되는 것으로 예상된다.
Wed 30 Nov 2022 09:50:32 PM KST ### 대략 10초간 old pod 1 로 인입되는 요청은 응답 실패하다 이 후부터 정상 응답한다.
- testapp-5f6c5545cd-lprdh
...
Wed 30 Nov 2022 09:50:41 PM KST
- testapp-5f6c5545cd-lprdh
Wed 30 Nov 2022 09:50:42 PM KST ## new pod 2 타겟 등록 시작
- testapp-fc9974c74-qc6v9
Wed 30 Nov 2022 09:50:44 PM KST
- testapp-5f6c5545cd-lprdh
Running
상태이다READINESS GATES
값이 1/1
로 변경되고 Running
상태가 된다.Wed 30 Nov 2022 09:50:53 PM KST
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-7gkq7 1/1 Running 0 35s 10.171.230.156 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 0/1
testapp-5f6c5545cd-lprdh 1/1 Running 0 74s 10.171.179.106 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-qc6v9 1/1 Running 0 4m58s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
Wed 30 Nov 2022 09:50:55 PM KST ## new pod 2 타겟 등록 완료
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-7gkq7 1/1 Running 0 36s 10.171.230.156 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 0/1
testapp-5f6c5545cd-lprdh 1/1 Running 0 75s 10.171.179.106 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-qc6v9 1/1 Running 0 4m59s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
Wed 30 Nov 2022 09:50:56 PM KST
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-7gkq7 1/1 Running 0 38s 10.171.230.156 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 0/1
testapp-5f6c5545cd-lprdh 1/1 Running 0 77s 10.171.179.106 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-qc6v9 1/1 Running 0 5m1s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
Wed 30 Nov 2022 09:50:58 PM KST ## new pod 2 생성 완료
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-7gkq7 1/1 Running 0 39s 10.171.230.156 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
testapp-5f6c5545cd-lprdh 1/1 Running 0 78s 10.171.179.106 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-qc6v9 1/1 Terminating 0 5m2s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
Wed 30 Nov 2022 09:50:59 PM KST
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-7gkq7 1/1 Running 0 41s 10.171.230.156 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
testapp-5f6c5545cd-lprdh 1/1 Running 0 80s 10.171.179.106 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-qc6v9 0/1 Terminating 0 5m4s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
...
Wed 30 Nov 2022 09:51:06 PM KST
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-7gkq7 1/1 Running 0 48s 10.171.230.156 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
testapp-5f6c5545cd-lprdh 1/1 Running 0 87s 10.171.179.106 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
testapp-fc9974c74-qc6v9 0/1 Terminating 0 5m11s 10.171.232.42 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
Wed 30 Nov 2022 09:51:08 PM KST ## old pod 2 제거 완료
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-7gkq7 1/1 Running 0 50s 10.171.230.156 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
testapp-5f6c5545cd-lprdh 1/1 Running 0 89s 10.171.179.106 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
Wed 30 Nov 2022 09:51:09 PM KST
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testapp-5f6c5545cd-7gkq7 1/1 Running 0 51s 10.171.230.156 ip-10-171-227-94.ap-northeast-2.compute.internal <none> 1/1
testapp-5f6c5545cd-lprdh 1/1 Running 0 90s 10.171.179.106 ip-10-171-184-203.ap-northeast-2.compute.internal <none> 1/1
Wed 30 Nov 2022 09:50:53 PM KST
"initial"
"healthy"
"draining"
"healthy"
Wed 30 Nov 2022 09:50:55 PM KST ## new pod 2 타겟 등록 완료
"healthy"
"healthy"
"draining"
"healthy"
Wed 30 Nov 2022 09:50:56 PM KST
"healthy"
"healthy"
"draining"
"healthy"
Wed 30 Nov 2022 09:50:58 PM KST ## new pod 2 생성 완료
"healthy"
"healthy"
"draining"
"healthy"
Wed 30 Nov 2022 09:50:59 PM KST
"healthy"
"healthy"
"draining"
"draining"
...
Wed 30 Nov 2022 09:51:06 PM KST
"healthy"
"healthy"
"draining"
"draining"
Wed 30 Nov 2022 09:51:08 PM KST ## old pod 2 제거 완료
"healthy"
"healthy"
"draining"
"draining"
Wed 30 Nov 2022 09:51:09 PM KST
"healthy"
"healthy"
"draining"
"draining"
Wed 30 Nov 2022 09:50:54 PM KST
- testapp-fc9974c74-qc6v9
Wed 30 Nov 2022 09:50:55 PM KST ## new pod 1 타겟 등록 완료
- testapp-5f6c5545cd-lprdh
Wed 30 Nov 2022 09:50:56 PM KST
- testapp-5f6c5545cd-lprdh
Wed 30 Nov 2022 09:50:57 PM KST ## new pod 2 생성 완료
- testapp-5f6c5545cd-7gkq7
Wed 30 Nov 2022 09:50:59 PM KST ## 요청 실패 발생
</html>><h1>504 Gateway Time-out</h1></center>d> <- old pod 2 의 타겟이 draining 상태 변환 이후부턴 요청 인입 안되야 하나 전환 초기에는 몇몇 요청이 인입되는 것으로 예상된다.
Wed 30 Nov 2022 09:51:10 PM KST
- testapp-5f6c5545cd-lprdh
pod readiness gate 를 적용한 배포 테스트의 결과는 아래와 같다.
pod readiness gate 적용으로 인해 배포 간 인입되는 신규 요청에 대한 응답 실패는 상당히 줄일 수 있으나 AWS 내부적인 문제로 인해 완전한 무중단 배포를 구현하기는 다소 어려운 것으로 보인다.
다소 제약이 있었지만 pod readiness gate 적용에 대한 의의와 효과는 충분히 확인되었다.
다음 포스트에서는 무중단 배포 실패의 두번째 경우인 "배포 과정에서 아직 처리 중인 기존 요청에 대해 응답 실패가 발생하는 경우" 에 대해 얘기하고자 한다.