일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CKA 기출문제
- MySQL
- AI
- 정보처리기사 실기 기출문제
- Pinpoint
- Java
- IntelliJ
- 티스토리챌린지
- PETERICA
- 정보처리기사실기 기출문제
- CKA
- 기록으로 실력을 쌓자
- 오블완
- 정보처리기사 실기
- CloudWatch
- mysql 튜닝
- kotlin
- Kubernetes
- minikube
- kotlin spring
- kotlin querydsl
- kotlin coroutine
- AWS EKS
- Elasticsearch
- APM
- 코틀린 코루틴의 정석
- Spring
- 공부
- Linux
- aws
- Today
- Total
피터의 개발이야기
[kubernetes] 노드당 Secondary IP 숫자 줄이는 방법, warmIP세팅 본문
[kubernetes] 노드당 Secondary IP 숫자 줄이는 방법, warmIP세팅
기록하는 백앤드개발자 2022. 8. 21. 14:45
ㅁ 개요
AWS EKS로 구성된 워커노드가 가동되어 파드들이 생성되는 과정에서 생성 지연되고 있었다. 원인은 kubernetes 특정 노드가 IP를 과점유하면서 다른 노드에서 파드 생성 시 프라이빗 IP가 부족하여 발생하는 문제였다. 원인 분석 과정에서 WARM_IP_TARGET와 MINIMUM_IP_TARGET의 설정 방법에 대해서 알게 되어서 그 과정을 정리하였다.
ㅁ 파드 생성 지연 발생
ㅇ 새로운 노드에서 파드들이 생성되는 중에 지연이 발생하였다.
ㅇ 그림처럼 43분동안 계속 ContainerCreating 상태에서 지연이 발생하였다.
ㅁ 노드 CPU 부하 확인
ㅁ 특정 노드에 IP 과점유 상태 확인
ㅇ 시스템 점검 중 노드에 보조 프라이빗 IP가 너무 많은 것을 확인하였다.
ㅁ WARM_IP_TARGET와 MINIMUM_IP_TARGET 설정
WARM_IP_TARGET를 통해 노드에서 신규 포드가 사용 가능한 IP 주소의 수를 지정할 수 있다. 예를 들어, WARM_IP_TARGET을 5로 설정하면 5개의 IP 주소를 항상 사용 가능한 상태로 유지한다. 노드의 탄력적 네트워크 인터페이스가 이러한 사용 가능한 주소를 제공할 수 없는 경우에도 사용 가능한 IP 주소를 사용할 수 ipamd있을 때까지 더 많은 인터페이스를 할당하려고 시도한다.
여기서 주의점은 대규모 클러스터 또는 클러스터에 포드 변동이 심한 경우 이 설정을 사용하지 말아야 한다. 이를 설정하면 EC2 API에 대한 추가 호출이 발생하여 요청이 제한될 수 있다.
WARM_IP_TARGET은 MINIMUM_IP_TARGET와 함께 사용할 때 설정하는 것이 좋다. 둘 다 설정되어 있으면, WARM_IP_TARGET와 MINIMUM_IP_TARGET 두 조건을 모두 충족하려고 시도한다. MINIMUM_IP_TARGET은 각 노드에서 유지할 IP의 하위 갯수를 의미한다. 만약 노드에서 10개의 포드를 실행할 계획이라면 이보다 약간 높게 설정하여 MINIMUM_IP_TARGET은 12을 설정하고 WARM_IP_TARGET은 2로 설정하도록 권고하고 있다. 자세한 내용은 여기 참조
ㅁ 샘플 케이스
Instance type |
WARM_ENI_TARGET | WARM_IP_TARGET | MINIMUM_IP_TARGET | Pods | Attached ENIs |
Attached Secondary IPs |
Unused IPs |
IPs per ENI |
t3.small | 1 | - | - | 0 | 1 | 3 | 3 | 3 |
t3.small | 1 | - | - | 5 | 3 | 9 | 4 | 3,3,3 |
t3.small | 1 | - | - | 9 | 3 | 9 | 0 | 3,3,3 |
t3.small | - | 1 | 1 | 0 | 1 | 1 | 1 | 1 |
t3.small | - | 1 | 1 | 5 | 2 | 6 | 1 | 3,3 |
t3.small | - | 1 | 1 | 9 | 3 | 9 | 0 | 3,3,3 |
t3.small | - | 2 | 5 | 0 | 2 | 5 | 5 | 2,3 |
t3.small | - | 2 | 5 | 5 | 3 | 7 | 2 | 3,3,1 |
t3.small | - | 2 | 5 | 9 | 3 | 9 | 0 | 3,3,3 |
p3dn.24xlarge | 1 | - | - | 0 | 1 | 49 | 49 | 49 |
p3dn.24xlarge | 1 | - | - | 3 | 2 | 98 | 95 | 49,49 |
p3dn.24xlarge | 1 | - | - | 95 | 3 | 147 | 52 | 49,49,49 |
p3dn.24xlarge | - | 5 | 10 | 0 | 1 | 10 | 10 | 10 |
p3dn.24xlarge | - | 5 | 10 | 7 | 1 | 12 | 5 | 12 |
p3dn.24xlarge | - | 5 | 10 | 15 | 1 | 20 | 5 | 20 |
p3dn.24xlarge | - | 5 | 10 | 45 | 2 | 50 | 5 | 49,1 |
ㅁ aws-node 설정변경
kubectl edit daemonset -n kube-system aws-node
ㅇ 명령어를 통해 WARM_IP_TARGET의 설정값을 추가 하였다.
ㅇ 설정값 추가 후 IP 갯수의 변화는 10분정도 소요되었다.
kubectl set env ds aws-node -n kube-system WARM_IP_TARGET=1
kubectl set env ds aws-node -n kube-system MINIMUM_IP_TARGET=10
ㅇ kubectl set 명령어로 수정도 가능하다.
ㅁ 확인하는 방법 추가(22.10.14)
# 확인
$ kubectl get -n kube-system daemonsets.apps aws-node -o json |jq -r '.spec.template.spec.containers[*].env[] | select(.name | test("WARM_IP_TARGET"))'
# 수정
$ kubectl set env ds aws-node -n kube-system WARM_PREFIX_TARGET=1
ㅁ 함께 보면 좋은 사이트