

 **이 페이지 개선에 도움 주기** 

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 **GitHub에서 이 페이지 편집** 링크를 선택합니다.

# 최적의 Amazon EC2 노드 인스턴스 유형 선택
<a name="choosing-instance-type"></a>

Amazon EC2에서는 워커 노드에 대한 다양한 인스턴스 유형을 제공합니다. 인스턴스 유형마다 서로 다른 컴퓨팅, 메모리, 스토리지 및 네트워크 기능을 제공합니다. 또한 각 인스턴스는 이러한 기능에 따라 한 인스턴스 패밀리로 그룹화됩니다. 목록은 *Amazon EC2 사용 설명서*의 [사용 가능한 인스턴스 유형](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#AvailableInstanceTypes)을 참조하세요. Amazon EKS에서는 Amazon EC2 AMI의 여러 변형을 출시하여 지원을 사용 설정합니다. 선택한 인스턴스 유형이 Amazon EKS와 호환되는지 확인하려면 다음 기준을 고려하세요.
+ 일부 Amazon EKS AMI에서는 현재 `mac` 패밀리를 지원하지 않습니다.
+ Arm 및 가속화되지 않은 Amazon EKS AMI에서는 `g3`, `g4`, `inf` 및 `p` 패밀리를 지원하지 않습니다.
+ 가속화된 Amazon EKS AMI에서는 `a`, `c`, `hpc`, `m` 및 `t` 패밀리를 지원하지 않습니다.
+ ARM 기반 인스턴스에서 Amazon Linux 2023(AL2023)은 Graviton2 이상 프로세서를 사용하는 인스턴스 유형만 지원합니다. AL2023은 `A1` 인스턴스를 지원하지 않습니다.

Amazon EKS에서 지원하는 인스턴스 유형 중에서 선택하는 경우 각 유형의 다음 기능을 고려하세요.

 **노드 그룹의 인스턴스 수**   
특히 DaemonSet이 많은 경우 일반적으로 수는 적고 크기는 큰 인스턴스가 더 좋습니다. 각 인스턴스에는 API 서버에 대한 API 직접 호출이 필요하므로 인스턴스가 많을수록 API 서버에 더 많은 부하가 발생합니다.

 **운영 체제**   
[Linux](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html), [Windows](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/instance-types.html) 및 [Bottlerocket](https://aws.amazon.com/bottlerocket/faqs/)에 대해 지원되는 인스턴스 유형을 검토합니다. Windows 인스턴스를 생성하기 전에 [EKS 클러스터에 Windows 노드 배포](windows-support.md)를 검토합니다.

 **하드웨어 아키텍처**   
x86 또는 Arm이 필요하나요? Arm 인스턴스를 배포하기 전에 [Amazon EKS 최적화 Arm Amazon Linux AMI](eks-optimized-ami.md#arm-ami)를 검토합니다. Nitro 시스템( [Linux](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances) 또는 [Windows](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/instance-types.html#ec2-nitro-instances))에 구축된 인스턴스나 [가속](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/accelerated-computing-instances.html) 기능이 있는 인스턴스가 필요하신가요? 가속화된 기능이 필요한 경우 Amazon EKS에서 Linux만 사용할 수 있습니다.

 **최대 포드 수**   
각 포드에 고유한 IP 주소가 할당되므로 인스턴스 유형에서 지원하는 IP 주소 수는 인스턴스에서 실행할 수 있는 포드 수를 결정하는 요소입니다. 인스턴스 유형이 지원하는 포드의 수를 수동으로 확인하려면  섹션을 참조하세요.  
 [AWS Nitro 시스템(Nitro System)](https://aws.amazon.com/ec2/nitro/) 인스턴스 유형은 Nitro 시스템 이외의 인스턴스 유형보다 훨씬 많은 IP 주소를 선택적으로 지원합니다. 그러나 인스턴스에 할당된 일부 IP 주소만 포드에 사용할 수 있습니다. 훨씬 더 많은 수의 IP 주소를 인스턴스에 할당하려면 클러스터에 버전 `1.9.0` 이상의 Amazon VPC CNI 추가 기능이 설치되어 있고 적절하게 구성되어 있어야 합니다. 자세한 내용은 [접두사를 사용하여 Amazon EKS 노드에 추가 IP 주소 할당](cni-increase-ip-addresses.md) 섹션을 참조하세요. 인스턴스에 가장 많은 수의 IP 주소를 할당하려면 클러스터에 버전 `1.10.1` 이상의 Amazon VPC CNI 추가 기능이 설치되어 있어야 하며 `IPv6` 패밀리를 사용하여 클러스터를 배포해야 합니다.

 **IP 패밀리**   
클러스터가 포드와 서비스에 프라이빗 `IPv4` 주소를 할당하도록 허용하는 클러스터용 `IPv4` 패밀리를 사용하는 경우 지원되는 모든 인스턴스 유형을 사용할 수 있습니다. 하지만 클러스터에 대한 `IPv6` 패밀리를 사용하려는 경우 [AWS Nitro 시스템(Nitro System)](https://aws.amazon.com/ec2/nitro/) 인스턴스 유형 또는 베어 메탈 인스턴스 유형을 사용해야 합니다. Windows 인스턴스에는 `IPv4`만 지원됩니다. 클러스터에서 버전 `1.10.1` 이상의 Amazon VPC CNI 추가 기능을 실행하고 있어야 합니다. `IPv6` 사용에 관한 자세한 내용은 [클러스터, 포드 및 서비스에 대한 IPv6 주소에 대해 알아보기](cni-ipv6.md) 부분을 참조하세요.

 **실행 중인 Amazon VPC CNI 추가 기능의 버전**   
최신 버전의 [Kubernetes용 Amazon VPC CNI 플러그인](https://github.com/aws/amazon-vpc-cni-k8s)은 [다음 인스턴스 유형](https://github.com/aws/amazon-vpc-cni-k8s/blob/master/pkg/vpc/vpc_ip_resource_limit.go)을 지원합니다. 지원되는 최신 인스턴스 유형을 활용하려면 Amazon VPC CNI 추가 기능 버전을 업데이트해야 할 수 있습니다. 자세한 내용은 [Amazon VPC CNI를 통해 포드에 IP 할당](managing-vpc-cni.md) 섹션을 참조하세요. 최신 버전은 Amazon EKS에서 사용할 최신 기능을 지원합니다. 이전 버전에서는 일부 기능을 지원하지 않습니다. GitHub의 [Changelog](https://github.com/aws/amazon-vpc-cni-k8s/blob/master/CHANGELOG.md)에 있는 다양한 버전에서 지원하는 기능을 볼 수 있습니다.

 **노드를 생성하는 AWS 리전**   
AWS 리전에 따라 일부 인스턴스 유형은 사용할 수 없습니다.

 **포드에 보안 그룹 사용 여부**   
포드에 보안 그룹을 사용하는 경우 특정 인스턴스 유형만 지원됩니다. 자세한 내용은 [개별 포드에 보안 그룹 할당](security-groups-for-pods.md) 섹션을 참조하세요.

## maxPods 결정 방법
<a name="max-pods-precedence"></a>

노드에 적용되는 최종 `maxPods` 값은 특정 우선순위로 상호 작용하는 여러 구성 요소에 따라 달라집니다. 이 순서를 이해하면 `maxPods`를 사용자 지정할 때 예기치 않은 동작을 방지하는 데 도움이 됩니다.

 **우선순위(가장 높은 순서에서 낮은 순서):** 

1.  **관리형 노드 그룹 적용** - [사용자 지정 AMI](launch-templates.md#launch-template-custom-ami) 없이 관리형 노드 그룹을 사용하는 경우 Amazon EKS는 노드 사용자 데이터의 `maxPods`에 최대 한도를 적용합니다. vCPU가 30개 미만인 인스턴스의 경우 최대 한도는 `110` 입니다. vCPU가 30개를 초과하는 인스턴스의 경우 최대 한도는 `250`입니다. 이 값은 `maxPodsExpression`을 포함하여 다른 `maxPods` 구성보다 우선합니다.

1.  **kubelet `maxPods` 구성** - kubelet 구성에서 직접 `maxPods`를 설정하는 경우(예: 사용자 지정 AMI를 사용하는 시작 템플릿을 통해) 이 값이 `maxPodsExpression`보다 우선합니다.

1.  **nodeadm `maxPodsExpression`** - `NodeConfig`에서 [https://awslabs.github.io/amazon-eks-ami/nodeadm/doc/examples/#defining-a-max-pods-expression](https://awslabs.github.io/amazon-eks-ami/nodeadm/doc/examples/#defining-a-max-pods-expression)을 사용하는 경우 nodeadm은 표현식을 평가하여 `maxPods`를 계산합니다. 이 방법은 우선순위가 더 높은 소스에 의해 값이 아직 설정되지 않은 경우에만 유효합니다.

1.  **기본 ENI 기반 계산** - 다른 값이 설정되지 않은 경우 AMI는 인스턴스 유형에서 지원하는 탄력적 네트워크 인터페이스 및 IP 주소 수를 기반으로 `maxPods`를 계산합니다. 이는 `(number of ENIs × (IPs per ENI − 1)) + 2` 공식과 동일합니다. `+ 2`는 포드 IP 주소를 소비하지 않는 모든 노드에서 실행되는 Amazon VPC CNI 및 `kube-proxy`를 고려합니다.

**중요**  
관리형 노드 그룹을 사용하고 `NodeConfig`에서 `maxPodsExpression`을 설정하면 관리형 노드 그룹의 적용이 표현식을 재정의합니다. 관리형 노드 그룹에서 사용자 지정 `maxPods` 값을 사용하려면 시작 템플릿에서 사용자 지정 AMI를 지정하고 `maxPods`를 직접 설정해야 합니다. 자세한 내용은 [시작 템플릿을 사용한 관리형 노드 사용자 지정](launch-templates.md) 섹션을 참조하세요.

 **관리형 노드 그룹과 자체 관리형 노드 비교** 

사용자 지정 AMI 없이 관리형 노드 그룹을 사용하면 Amazon EKS가 노드의 부트스트랩 사용자 데이터에 `maxPods` 값을 주입합니다. 이는 다음을 의미합니다.
+ `maxPods` 값은 항상 인스턴스 크기에 따라 `110` 또는 `250`으로 제한됩니다.
+ 구성한 모든 `maxPodsExpression`은 이 주입된 값으로 재정의됩니다.
+ 다른 `maxPods` 값을 사용하려면 시작 템플릿에서 사용자 지정 AMI를 지정하고 `--use-max-pods false`를 `--kubelet-extra-args '--max-pods=my-value'`와 함께 `bootstrap.sh` 스크립트로 전달합니다. 예시는 [시작 템플릿을 사용한 관리형 노드 사용자 지정](launch-templates.md) 섹션을 참조하세요.

자체 관리형 노드를 사용하면 부트스트랩 프로세스를 완벽하게 제어할 수 있습니다. `NodeConfig`에서 `maxPodsExpression`을 사용하거나 `bootstrap.sh`에 `--max-pods`를 직접 전달할 수 있습니다.

## EKS Auto Mode 고려 사항
<a name="_considerations_for_eks_auto_mode"></a>

EKS Auto Mode는 노드의 포드 수를 다음 중 더 낮은 값으로 제한합니다.
+ 110 포드 하드 캡
+ 위에서 설명한 최대 포드 계산 결과입니다.