코기판

AWS EKS 배포 가능한 최대 pods 갯수 본문

Infra

AWS EKS 배포 가능한 최대 pods 갯수

신코기 2019. 3. 9. 18:35

백엔드 마이크로 서비스에 대한 로드 밸런싱을 테스트해보려고 하다가,

worker node의 capability가 모두 차서, 더 이상 pod을 가진 service가 배포되지 않는 상황이 발생하였다.

pod 갯수가 worker node instance에서 허용 가능한 갯수를 초과한 것이다.

따라서, worker node가 가득 찬 상태에서는

개발자들이 서비스를 배포하면, 배포 대상인 pod들이 pending 상태가 되며 새로운 서비스를 deploy할 수 없는 상황이 발생했다. 


instance당 수용 가능한 pod 갯수는 아래 링크에서 확인할 수 있다.

https://github.com/awslabs/amazon-eks-ami/blob/master/files/eni-max-pods.txt

# Mapping is calculated from AWS ENI documentation, with the following modifications:
# * First IP on each ENI is not used for pods
# * 2 additional host-networking pods (AWS ENI and kube-proxy) are accounted for
#
# # of ENI * (# of IPv4 per ENI - 1)  + 2


ENI의 문서에서 링크와 같은 rule을 매핑한 모양인데, ENI가 뭔지에 대한 감이 없어서 좀 조사해보았다. 


ENI (Elastic Network Interface)

VPC에서 가상 네트워크 카드를 나타내는 논리적 네트워킹 구성 요소입니다.

(출처 : https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/using-eni.html)


아무래도 새로운 서비스를 배포하게 되면, 내부적으로 ip가 할당되는데, instance종류에 따라 ip주소 할당의 갯수가 달라지는 것 같다.


위 링크에서 인스턴스 유형 별로 사용 가능한 ENI의 갯수를 정리가 되어있다. 


ENI의 숫자 * ( ENI 당 ipv4의 숫자 - 1 ) + 2 가 되므로 

m1.medium의 경우를 계산해보면,

2 * ( 6 - 1 ) + 2 = 12 

즉, 12개의 max pod을 띄울 수 있는 것이다. 


만약의 최대 pod 갯수를 초과하면, worker node를 오토 스케일링 하는 방법을 강구해야 한다. 





참조 : 

https://raw.githubusercontent.com/awslabs/amazon-eks-ami/master/files/eni-max-pods.txt

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/using-eni.html



* 제 개인적인 생각이므로, 틀린 부분이 있을 수 있습니다. 기술토론 환영합니다 !

Comments