Load To Technical Architect
[AWS] EKS AutoScaling Scale In과 LB 502, 504 에러 본문
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를 사용해야 한다.
'Cloud > AWS' 카테고리의 다른 글
[AWS] EKS ArgoCD Install (0) | 2024.06.11 |
---|---|
[AWS] EKS Cluster AutoScaler 구성 (0) | 2022.08.09 |
[AWS] Elastic LoadBalancer's Availability Zones (0) | 2021.12.29 |
[AWS] EKS 리소스 사용량을 Cloudwatch Container Insights에서 모니터링 하는 방법 (0) | 2021.11.18 |
[AWS] Fluentd를 사용하여 EKS Log를 CloudWatch로 전송하는 방법 (9) | 2021.11.18 |