Load To Technical Architect

[AWS] EKS AutoScaling Scale In과 LB 502, 504 에러 본문

Cloud/AWS

[AWS] EKS AutoScaling Scale In과 LB 502, 504 에러

고지식한청춘 2022. 8. 9. 14:32
728x90

Auto Scaling(Cluster AutoScaler, HPA)을 구성하고 성능 테스트를 진행하는데 리소스 사용량이 줄어

 

Pod가 축소될 때 502, 504 에러가 발생되는것을 확인하였다.

 

처음에는 HPA에서 Scale In 할 때 동작중인 애플리케이션이 있는 Pod를 Kill 하는 것으로 예상하여

 

Pod의 terminationGracePeriodSeconds과 ALB의 deregistration delay 옵션을 조정하며 테스트 해보았지만

 

여전히 502, 504 Error가 발생하였다.

 

위의 옵션으로 Graceful Shutdown은 될터인데 왜 계속 50X 에러가 발생하였고

 

필자는 LB의 Health Check가 문제라고 생각하였고 구글링을 하며 해결 방법을 찾았다.

 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  namespace: test
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app.kubernetes.io/name: test
    spec:
      containers:
      - image: <image arn>
        name: test
        resources:
          requests:
            cpu: "500m"
        ports:
        - containerPort: 80
          name: http
        lifecycle:
          preStop:
            exec:
              command: ["sleep", "25"]

위와 같이 Pod의 LifeCycle에서 preStop을 추가하는것이다.

 

위의 lifecycle을 추가하면 Pod가 Kill 될 때 preStop에 해당하는 명령어를 실행하게되는데

 

이 경우 Pod의 메인 프로세스는 종료되고 25초간 Sleep 명령어만 실행된 상태로 유지된다.

 

필자는 LB Health Check 주기를 5초, 비정상 임계값을 2 연속 상태 검사 실패로 구성하였는데

 

이러면 LB에서 Pod에 Health Check가 실패하여 더 이상 해당 Pod로 트래픽을 전송하지 않게된다.

 

위의 설정 추가로 50X 에러는 발생하지않았다.

 

ps.1 Dockerfile을 작성 할 때 프로세스 실행시 CMD 대신 ENTRYPOINT를 사용해야 한다.

728x90
Comments