연재 시리즈

EKS 스터디 - 2주차 2편 - EKS POD IP는 무한대로 할당할 수 있을까?

악분 2023. 4. 19. 23:39
반응형

EKS POD IP할당 한계

이전 글에 언급한거처럼, ENI가 pod IP를 관리하므로 ENI가 가질수 있는 IP개수에 제한을 받게 됩니다. 따라서, 인스턴스 유형에 따라 가질 수 있는 IP개수가 결정되고 pod개수도 같이 결정됩니다. 

 

인스턴스타입별 IP할당 계산기

인스턴스 타입별 IP개수제한은 AWS 공식문서를 보고 직접 계산해야 합니다. 감사하게도 AWS에서 “인스턴스별로 가질 수 있는 IP개수” 계산기를 제공합니다.

curl -o max-pods-calculator.sh https://raw.githubusercontent.com/awslabs/amazon-eks-ami/master/files/max-pods-calculator.sh
chmod +x max-pods-calculator.sh
./max-pods-calculator.sh --instance-type m5.large --cni-version 1.9.0 --cni-prefix-delegation-enabled

 

예를 들어 t2.medium타입 인스턴스는 최대 17개 pod를 가질 수 있습니다.

./max-pods-calculator.sh \
--instance-type t2.medium \
--cni-version 1.11.4 \
--cni-prefix-delegation-enabled

 

POD IP할당 한계 테스트

t2.medium타입 인스턴스가 실제로 17개 pod만 생성할 수 있는지 확인해볼까요? 저는 t2.medium타입 인스턴스 2개를 생성 nginx pod 80개를 생성했습니다. 참고로 아래 예제는 AWS 블로그에서 제공합니다.

cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 80
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: public.ecr.aws/nginx/nginx:1.21
        ports:
        - containerPort: 80
EOF

 

pod status를 확인하면 pod가 생성되지 않고 Pending인 것이 있습니다. 예상대로 인스턴스가 허용하는 IP개수를 초과하여 pod가 생성되지 않은 것 같습니다.

 

지금 Running상태인 pod가 몇 개일까요? 아래 명령어를 실행하면 34개 pod가 실행중인 것을 알 수 있습니다. t2.medium타입 인스턴스(노드)가 2개이므로, 계산식 34(17 x 2)개와 일치합니다.

kubectl get po -A | grep Running | wc -l

 

 

POD IP할당 개수 증설

Nitro계열 인스턴스(M5, R5 등)는 접두사 위임(prefix delegation)기능으로 인스턴스가 가질 수 있는 IP개수를 증가시킬 수 있습니다. 접두사 위임을 사용하려면 VCP CNI에서 설정을 활성화해야합니다.

kubectl set env daemonset aws-node -n kube-system ENABLE_PREFIX_DELEGATION=true

 

접두사 위임 설정이 활성화 되어 있지 않으면, 아래 그림처럼 false로 표시됩니다.

kubectl describe daemonset -n kube-system aws-node | grep ENABLE_PREFIX_DELEGATION

 

접두사 위임에 대해 잘 설명한 영상이 있어 링크를 남깁니다.

 

운영 중에 VPC CNI를 설정하는 것은 신중해야 합니다. 설정을 적용하기 위해 VPC CNI pod가 재부팅되는데, 잘 적용이 안되면 Stuck상태에 빠집니다. 아래 예제는 VPC CNI가 POD가 재부팅 이후 Stuck상태에 빠져, EKS클러스터 삭제가 안되는 상황입니다.

반응형