| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- post
- terminationGracePeriodSeconds
- topologySpreadConstraints
- chartjs
- 예매로직
- spread operator
- spring
- Kubernetes
- MySQL Error
- ES6
- AWS Route53
- Get
- sessionStorage
- node.js
- html
- mongodb
- ssh
- AWS
- ajax
- 영화예매
- AWS RDS
- git
- Bootstrap
- javascript
- 인생이재밌다
- json
- mysql
- Java
- zombie-hit apartment
- jsp
- Today
- Total
jongviet
Feb 29, 2024 - 쿠버네티스 내 배치 서버 파드, 오토스케일링으로 인해 갑자기 죽을 때 하던일은 마저하고 떠나보낼 수는 없을까..? 본문
Feb 29, 2024 - 쿠버네티스 내 배치 서버 파드, 오토스케일링으로 인해 갑자기 죽을 때 하던일은 마저하고 떠나보낼 수는 없을까..?
jongviet 2024. 2. 29. 07:51*2월29일
트래픽 폭증으로 인해 AWS EKS 오토스케일링을 적용하면서 다양한 문제가 생기게 되었다. 그 중 배치 서버의 파드가 cron으로 돌아가는 테스크를 완료 하지 않은 시점에 지속적으로 종료되는 문제가 발생했다.
새로운 EC2에 배치 서버를 띄우면 쉽게 해결이 되지만, 여러 보안 설정, 다른 배포 방법 등.. 너무 귀찮고 관리 범위도 많아진다. 그렇다고 배치서버의 파드를 2개로 증가시키면 멱등성이 확보되지 않은 상황에서 중복된 일을 하게 되는 문제 또한 발생한다.
이러한 고민을 해결해주는 설정값을 외부 조언을 통해 확인 할 수 있었는데, 바로 terminationGracePeriodSeconds이다. 직역하자면 종료 유예 기간 초 정도이다.
배치 서버 yaml 내 아래 설정값만 넣으면 오토스케일링을 통해 축소 노드에 속한 파드가 죽어도 해당 시간 동안의 실행을 보장한다. 일반적으로 하기 설정값이 별도로 지정되지 않으면 30초 정도의 시간을 가진 후 종료(sigterm)하는데, 이 시간을 인위적으로 조정할 수 있다. yaml 내 정확하게 어디에 넣어야 하는게 궁금하다면.. phind로 가서 적용하고자 하는 yaml을 넣고 넣어달라고 하면된다.
일단 오토스케일링으로 인해 축소 명령을 받은 노드에 속한 파드는 terminating 상태로 전환되고, 전환되는 시점에 Iptable에서 해당 파드의 ip가 제거되기에 추가적인 요청이 들어올 일은 전혀 없다. 다만 본 종료유예기간을 너무 긴 시간 동안 가지면 적절하게 노드가 죽지 못하고 바로 바로 죽지 않는 노드로 인해 비용 문제로 이어질 수 있다. 따라서 배치서버에 적용한다면 각 프로세스가 너무 과한 시간을 잡아먹지 않도록 로직을 손보는 것이 먼저 선행되어야 한다.
*리눅스 종료 신호 관련
-sigterm: 이 신호를 받은 프로세스는 별도 세팅이 있지 않는 한 기본적으로 부여된 30초의 시간 내 프로세스를 마무리하고 정상 종료함. 다만 해당 유예 기간 동안 프로세스가 종료되지 않으면 sigkill을 보내서 즉시 종료 처리해버림
-sigkill: 프로세스에게 시간을 주지 않고 즉시 종료
-sigint: 로컬 터미널에서 프로세스 종료할 때의 케이스(ctrl + c)
'kubernetes' 카테고리의 다른 글
| March 3, 2024 - 오토스케일링으로 매번 흐트러지는 노드 별 파드 수, 균형을 어떻게 맞출 수 있을까? (0) | 2024.03.03 |
|---|---|
| Oct 10, 2022 - Kubernetes 개념 (0) | 2022.10.10 |