관리형 노드 그룹과 웜 풀(Warm Pool)을 사용한 부팅 시간이 긴 애플리케이션의 지연 시간 감소
관리형 노드 그룹과 웜 풀(Warm Pool)을 사용한 부팅 시간이 긴 애플리케이션의 지연 시간 감소
웜 풀을 사용해 부팅 시간이 긴 애플리케이션의 스케일아웃 지연을 줄이는 방법을 설명합니다.
출처: 문서
본문
애플리케이션의 초기화 또는 부팅 시간이 길면 스케일아웃 이벤트가 지연을 일으킬 수 있습니다 — 새 노드가 Pod를 스케줄할 수 있으려면 완전히 부팅되고 클러스터에 가입해야 하기 때문입니다. 이 지연은 트래픽 급증이나 빠른 확장 이벤트 중에 애플리케이션 가용성에 영향을 줄 수 있습니다. 웜 풀은 부팅 프로세스를 이미 완료한 사전 초기화된 EC2 인스턴스 풀을 유지해 이 문제를 해결합니다. 스케일아웃 이벤트 중에 인스턴스는 시간이 많이 걸리는 초기화 단계를 건너뛰고 웜 풀에서 클러스터로 직접 이동하여 새 용량을 사용할 수 있게 되는 시간을 크게 줄입니다. 자세한 내용은 Amazon EC2 Auto Scaling 사용 설명서의 "웜 풀을 사용한 부팅 시간이 긴 애플리케이션의 지연 시간 감소"를 참고하세요.
Amazon EKS 관리형 노드 그룹은 Amazon EC2 Auto Scaling 웜 풀을 지원합니다. 웜 풀은 Auto Scaling 그룹과 함께 사전 초기화된 EC2 인스턴스를 유지하여 스케일아웃 이벤트 중에 클러스터에 빠르게 가입할 수 있게 합니다. 웜 풀의 인스턴스는 이미 부팅 초기화 프로세스를 완료했으며 Stopped, Running, Hibernated 상태 중 하나로 유지될 수 있습니다.
Amazon EKS는 AWSServiceRoleForAmazonEKSNodegroup 서비스 연결 역할(service-linked role)을 사용해 노드 그룹 라이프사이클 전반에 걸쳐 웜 풀을 관리하여 웜 풀 리소스를 생성, 업데이트, 삭제합니다.
작동 방식
웜 풀을 구성하면 Amazon EKS가 노드 그룹의 Auto Scaling 그룹에 연결된 EC2 Auto Scaling 웜 풀을 생성합니다. 인스턴스는 웜 풀에서 시작되어 부팅 초기화 프로세스를 완료하고, 필요할 때까지 구성된 상태(Running, Stopped, Hibernated)를 유지합니다. 스케일아웃 이벤트 중에 인스턴스는 웜 풀에서 Auto Scaling 그룹으로 이동하여, Amazon EKS 초기화 프로세스를 완료해 클러스터에 가입하고 Pod 스케줄링에 사용할 수 있게 됩니다. 인스턴스 재사용이 활성화되면 인스턴스는 스케일인 이벤트 중에 웜 풀로 돌아갈 수 있습니다.
중요:
create-nodegroup또는update-nodegroup-config를 사용해 항상 Amazon EKS API로 웜 풀을 구성하세요. EC2 Auto Scaling API를 사용해 웜 풀 설정을 수동으로 수정하지 마세요. Amazon EKS의 리소스 관리와 충돌을 일으킬 수 있습니다.
고려 사항
중요: 웜 풀을 구성하기 전에 Amazon EC2 Auto Scaling 사용 설명서의 "Amazon EC2 Auto Scaling용 웜 풀"에서 전제 조건과 제한 사항을 검토하세요. 모든 인스턴스 유형, AMI 또는 구성이 지원되는 것은 아닙니다.
- IAM 권한 –
AWSServiceRoleForAmazonEKSNodegroup서비스 연결 역할(첫 번째 관리형 노드 그룹과 함께 자동 생성)에는 필요한 웜 풀 관리 권한이 포함되어 있습니다. - AMI 제한 사항 – 웜 풀은 사용자 지정 AMI를 지원하지 않습니다. Amazon EKS 최적화 AMI를 사용해야 합니다.
- Bottlerocket 제한 사항 – Bottlerocket AMI를 사용하면
Hibernated풀 상태가 지원되지 않습니다.Stopped또는Running풀 상태만 사용하세요. 또한reuseOnScaleIn기능은 Bottlerocket AMI에서 지원되지 않습니다. - 최대 절전 지원 –
Hibernated풀 상태는 특정 인스턴스 유형에서만 지원됩니다. 지원되는 인스턴스 유형은 Amazon EC2 사용 설명서의 "최대 절전 전제 조건"을 참고하세요. - 비용 영향 – 필요하지 않은데 웜 풀을 만들면 불필요한 비용이 발생할 수 있습니다.
- 용량 계획 – 확장 패턴을 기반으로 비용과 가용성의 균형을 맞추도록 웜 풀 크기를 정하세요. 예상 최대 용량의 10-20%로 시작하세요.
- VPC 네트워킹 – Auto Scaling 그룹과 웜 풀 인스턴스 모두에 충분한 IP 주소가 있는지 확인하세요.
웜 풀 구성
새 관리형 노드 그룹을 만들 때 웜 풀을 구성하거나 기존 관리형 노드 그룹을 업데이트해 웜 풀 지원을 추가할 수 있습니다.
구성 매개변수
enabled– (boolean) 관리형 노드 그룹에 웜 풀을 연결하려는 의도를 나타냅니다. 웜 풀 지원을 활성화하는 데 필요합니다.maxGroupPreparedCapacity– (integer) 웜 풀과 Auto Scaling 그룹을 합친 최대 총 인스턴스 수.minSize– (integer) 웜 풀에 유지할 최소 인스턴스 수. 기본값:0.poolState– (string) 웜 풀 인스턴스의 상태. 기본값:Stopped.reuseOnScaleIn– (boolean) 스케일인 이벤트 중 인스턴스를 종료하는 대신 웜 풀로 돌려보낼지 여부. 기본값:false. Bottlerocket AMI에서는 지원되지 않습니다.
AWS CLI 사용
관리형 노드 그룹을 만들 때 웜 풀을 구성하거나 기존 노드 그룹에 추가할 수 있습니다.
웜 풀이 있는 노드 그룹 생성:
aws eks create-nodegroup \
--cluster-name my-cluster \
--nodegroup-name my-nodegroup \
--node-role arn:aws:iam::111122223333:role/AmazonEKSNodeRole \
--subnets subnet-12345678 subnet-87654321 \
--region us-east-1 \
--scaling-config minSize=2,maxSize=10,desiredSize=3 \
--warm-pool-config enabled=true,maxGroupPreparedCapacity=8,minSize=2,poolState=Stopped,reuseOnScaleIn=true
기존 노드 그룹에 웜 풀 추가:
aws eks update-nodegroup-config \
--cluster-name my-cluster \
--nodegroup-name my-nodegroup \
--region us-east-1 \
--warm-pool-config enabled=true,maxGroupPreparedCapacity=8,minSize=2,poolState=Stopped,reuseOnScaleIn=true
구성 업데이트
update-nodegroup-config를 사용해 언제든지 웜 풀 설정을 업데이트할 수 있습니다. 기존 웜 풀 인스턴스는 즉시 영향을 받지 않습니다. 새 설정은 업데이트 후 웜 풀에 들어오는 인스턴스에 적용됩니다.
aws eks update-nodegroup-config \
--cluster-name my-cluster \
--nodegroup-name my-nodegroup \
--region us-east-1 \
--warm-pool-config enabled=true,maxGroupPreparedCapacity=10,minSize=3,poolState=Running,reuseOnScaleIn=true
노드 그룹에 연결된 웜 풀을 비활성화하려면 enabled=false로 설정하세요.
aws eks update-nodegroup-config \
--cluster-name my-cluster \
--nodegroup-name my-nodegroup \
--region us-east-1 \
--warm-pool-config enabled=false
추가 리소스
- Amazon EC2 Auto Scaling 사용 설명서의 "Amazon EC2 Auto Scaling용 웜 풀"
- "관리형 노드 그룹으로 노드 라이프사이클 간소화"