관리 메뉴

피터의 개발이야기

[kubernetes] 노드당 Secondary IP 숫자 줄이는 방법, warmIP세팅 본문

Kubernetes/트러블슈팅&장애대응

[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

 

 

ㅁ 함께 보면 좋은 사이트

 

GitHub - aws/amazon-vpc-cni-k8s: Networking plugin repository for pod networking in Kubernetes using Elastic Network Interfaces

Networking plugin repository for pod networking in Kubernetes using Elastic Network Interfaces on AWS - GitHub - aws/amazon-vpc-cni-k8s: Networking plugin repository for pod networking in Kubernete...

github.com

 

Kubernetes용 Amazon VPC CNI 플러그인을 사용한 Amazon EKS의 Pod 네트워킹 - Amazon EKS

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

[AWS]EKS 네트워크 이해하기(CNI Plugin)

안녕하세요 오늘은 EKS 네트워크에 대해 이야기 해보고자합니다. EKS 네트워크는 EKS사용에 있어서 가장 중요한 포인트중 하나 입니다. EKS 네트워크 쿠버네티스의 Pod는 한 개 이상의 컨테이너를

kim-dragon.tistory.com

 

반응형
Comments