

 **このページの改善にご協力ください** 

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「**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 との互換性があることを確認する際は、次の基準を考慮してください。
+ `mac` ファミリは、現在、すべての Amazon EKS AMI でサポートされていません。
+ 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 インスタンスを作成する前に、「[Deploy Windows nodes on EKS clusters](windows-support.md)」を確認してください。

 **ハードウェアアーキテクチャ**   
x86 または Arm のどちらが必要か検討します。Arm インスタンスをデプロイする前に、「[Amazon EKS optimized Arm Amazon Linux AMIs](eks-optimized-ami.md#arm-ami)」を確認してください。Nitro System ([Linux](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/accelerated-computing-instances.html) または [Windows](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances)) 上に構築されたインスタンス、または[アクセラレータ付き](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/instance-types.html#ec2-nitro-instances)機能が必要かを検討します。アクセラレータ付き機能は、Linux の Amazon EKS でのみ使用できます。

 **Pod の最大数**   
各 Pod には独自の IP アドレスが割り当てられているため、インスタンスタイプでサポートされている IP アドレスの数が、インスタンスで実行できる Pod の数を決定するための要因になります。インスタンスタイプがサポートする Pod の数を手動で確認するには、「」を参照してください。  
 [AWS Nitro システム](https://aws.amazon.com/ec2/nitro/)のインスタンスタイプには、サポートできる IP アドレスの数を、非 Nitro のシステムのインスタンスタイプよりも大幅に多くできるオプションがあります。ただし、インスタンスに割り当てられたすべての IP アドレスが Pod で使用できるわけではありません。インスタンスに割り当てる 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` アドレスを Pod とサービスに割り当てることができます。ただし、クラスターに `IPv6` ファミリを使用する場合は、[AWS Nitro システム](https://aws.amazon.com/ec2/nitro/)インスタンスタイプ、またはベアメタルインスタンスタイプを使用する必要があります。Windows インスタンスでは、`IPv4` のみがサポートされています。クラスターでは、バージョン `1.10.1` 以降の Amazon VPC CNI アドオンを実行している必要があります。`IPv6` の使用の詳細については、「[クラスター、Pod、サービスに対する IPv6 アドレスの説明](cni-ipv6.md)」を参照してください。

 **実行している Amazon VPC CNI アドオンのバージョン**   
最新バージョンの [Amazon VPC CNI Plugin for Kubernetes](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 を使用して Pod に IP を割り当てる](managing-vpc-cni.md)」を参照してください。最新バージョンでは、Amazon EKS で使用できる最新の機能をサポートしています。以前のバージョンでは、すべての機能がサポートされているわけではありません。さまざまなバージョンでサポートされている機能は、GitHub の [Changelog](https://github.com/aws/amazon-vpc-cni-k8s/blob/master/CHANGELOG.md) で確認できます。

 **ノードを作成している AWS リージョン**   
AWS リージョンによっては使用できないインスタンスタイプがあります。

 **Pod にセキュリティグループを使用しているかどうか**   
Pod にセキュリティグループを使用している場合は、特定のインスタンスタイプのみがサポートされます。詳細については、「[セキュリティグループを個別の Pod に割り当てる](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 はそのインスタンスタイプでサポートされている Elastic Network Interface と 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` を使用するか、もしくは `--max-pods` を `bootstrap.sh` に直接渡すことができます。

## EKS Auto Mode に関する考慮事項
<a name="_considerations_for_eks_auto_mode"></a>

EKS Auto Mode では、ノード上のポッドの数が以下のいずれか低い方に制限されます。
+ ハード上限の 110 ポッド
+ 上記の最大ポッド数計算の結果。