참고
VPC CNI가 pod에 IP를 할당하는 과정
•
노드에 신규 pod이 스케쥴
1.
Kubelet이 Pod의 Spec에 맞게 Pod을 생성하기 위해 CRI(Container Runtime Interface)플러그인을 통해 컨테이너 런타임을 호출 합니다.
2.
컨테이너 런타임이 Pod 네트워크 설정을 위해 CNI(Container Network Interface) 플러그인을 호출합니다.
3.
CNI 바이너리는 L-IPAMD(VPC CNI IP management daemonset, a.k.a aws-node)를 호출하여 신규 Pod에 할당 할 IP주소를 가져올 수 있도록 합니다.
4.
이때 node에 attach되어 있는 Warm pool에 가용 IP가 있다면 해당 IP를 Pod에 할당합니다.
5.
Warm pool에 가용 IP가 없다면 EC2에 AssignPrivateIpAddresses() API를 호출하여 가용 IP를 확보합니다.
WARM_ENI_TARGET
인스턴스에 할당할 ENI 개수
WARM_IP_TARGET
L-IPAMD에서 확보하는 Warm pool 크기 즉, 미리 예약할 IP주소의 개수
MINIMUM_IP_TARGET
노드가 처음 생성될 때 할당되어야 하는 IP 주소
MINIMUM_IP_TARGET=n, WARM_IP_TARGET=m 으로 값을 설정
kubectl set env daemonset aws-node -n kube-system ENABLE_PREFIX_DELEGATION=true
kubectl set env daemonset aws-node -n kube-system WARM_PREFIX_TARGET=1
kubectl set env daemonset aws-node -n kube-system WARM_IP_TARGET=3
kubectl set env daemonset aws-node -n kube-system MINIMUM_IP_TARGET=2
Shell
복사
kubectl describe daemonset/aws-node -n kube-system
Shell
복사
만약 EC2 인스턴스가 N개의 ENI와 M개의 주소를 가질 수 있다면 최대 IP는 아래와 같이 계산된다.
Max IPs = min((N * M - N), subnet's free IP)
m5.xlarge라고 가정하고 예시
우선 m5.xlarge 유형은 4 ENI 와 ENI 당 15 개의 IP 주소를 가질 수 있다.
-1을 하는 이유는 하나는 노드가 사용하기 때문이다.
# ex. 4 * (15 - 1) = 56
Markdown
복사





