最適な Amazon EC2 ノードインスタンスタイプを選択する - Amazon EKS

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

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。

最適な Amazon EC2 ノードインスタンスタイプを選択する

Amazon EC2 では、ワーカーノード用のインスタンスタイプが幅広く用意されています。インスタンスタイプごとに、コンピューティング、メモリ、ストレージの異なる機能が提供されます。また、各インスタンスファミリーは、これらの機能に基づきグループ化されています。リストについては、「Amazon EC2 ユーザーガイド」の「利用可能なインスタンスタイプ」を参照してください。Amazon EKS は、(特定の) サポートを有効にするために、Amazon EC2 AMI のいくつかのバリエーションをリリースしています。選択したインスタンスタイプに Amazon EKS との互換性があることを確認する際は、次の基準を考慮してください。

  • mac ファミリは、現在、すべての Amazon EKS AMI でサポートされていません。

  • Arm およびアクセラレータ付きではない Amazon EKS AMI では、g3g4inf、および p ファミリはサポートされません。

  • アクセラレータ付き Amazon EKS AMI は、achpcm、および t ファミリをサポートしていません。

  • Arm ベースのインスタンスの場合、Amazon Linux 2023 (AL2023) は Graviton2 以降のプロセッサを使用するインスタンスタイプのみをサポートします。AL2023 は A1 インスタンスをサポートしていません。

Amazon EKS でサポートされているインスタンスタイプを選択する場合は、各タイプで次の機能を考慮してください。

ノードグループ内のインスタンス数

特に多くの DaemonSet が存在する場合などは、一般的に、数少ない大型のインスタンスの使用が適しています。各インスタンスには API サーバーへの API コールが必要です。したがって、インスタンス数が多いほど、API サーバーのロードが高くなります。

オペレーティングシステム

LinuxWindows、および Bottlerocket に対応しているインスタンスタイプを確認します。Windows インスタンスを作成する前に、「Deploy Windows nodes on EKS clusters」を確認してください。

ハードウェアアーキテクチャ

x86 または Arm のどちらが必要か検討します。Arm インスタンスをデプロイする前に、「Amazon EKS optimized Arm Amazon Linux AMIs」を確認してください。Nitro System (Linux または Windows) 上に構築されたインスタンス、またはアクセラレータ付き機能が必要かを検討します。アクセラレータ付き機能は、Linux の Amazon EKS でのみ使用できます。

Pod の最大数

各 Pod には独自の IP アドレスが割り当てられているため、インスタンスタイプでサポートされている IP アドレスの数が、インスタンスで実行できる Pod の数を決定するための要因になります。インスタンスタイプがサポートする Pod の数を手動で確認するには、「」を参照してください。

AWS Nitro システムのインスタンスタイプには、サポートできる IP アドレスの数を、非 Nitro のシステムのインスタンスタイプよりも大幅に多くできるオプションがあります。ただし、インスタンスに割り当てられたすべての IP アドレスが Pod で使用できるわけではありません。インスタンスに割り当てる IP アドレスの数を大幅に増やすには、クラスターにバージョン 1.9.0 以降の Amazon VPC CNI アドオンをインストールし、適切に設定する必要があります。詳細については、「プレフィックスを使用して Amazon EKS ノードに割り当てる IP アドレスを増やす」を参照してください。インスタンスに最大数の IP アドレスを割り当てるには、バージョン 1.10.1 以降の Amazon VPC CNI アドオンをクラスターにインストールし、IPv6 ファミリーを使用してそのクラスターをデプロイする必要があります。

IP ファミリー

クラスターで IPv4 ファミリーを使用している場合、サポートされているすべてのインスタンスタイプが使用可能になります。これによりクラスターは、プライベート IPv4 アドレスを Pod とサービスに割り当てることができます。ただし、クラスターに IPv6 ファミリを使用する場合は、AWS Nitro システムインスタンスタイプ、またはベアメタルインスタンスタイプを使用する必要があります。Windows インスタンスでは、IPv4 のみがサポートされています。クラスターでは、バージョン 1.10.1 以降の Amazon VPC CNI アドオンを実行している必要があります。IPv6 の使用の詳細については、「クラスター、Pod、サービスに対する IPv6 アドレスの説明」を参照してください。

実行している Amazon VPC CNI アドオンのバージョン

最新バージョンの Amazon VPC CNI Plugin for Kubernetes は、こちらのインスタンスタイプをサポートしています。サポートされている最新のインスタンスタイプを利用するには、Amazon VPC CNI アドオンのバージョンを更新する必要があります。詳細については、「Amazon VPC CNI を使用して Pod に IP を割り当てる」を参照してください。最新バージョンでは、Amazon EKS で使用できる最新の機能をサポートしています。以前のバージョンでは、すべての機能がサポートされているわけではありません。さまざまなバージョンでサポートされている機能は、GitHub の Changelog で確認できます。

ノードを作成している AWS リージョン

AWS リージョンによっては使用できないインスタンスタイプがあります。

Pod にセキュリティグループを使用しているかどうか

Pod にセキュリティグループを使用している場合は、特定のインスタンスタイプのみがサポートされます。詳細については、「セキュリティグループを個別の Pod に割り当てる」を参照してください。

maxPods の決定方法

ノードに適用される最終 maxPods 値は、特定の優先順位で相互作用する複数のコンポーネントによって異なります。この優先順位を理解することで、maxPods をカスタマイズする際に予期しない動作を回避できます。

優先順位 (最高から最低):

  1. マネージド型ノードグループの適用カスタム AMI なしでマネージド型ノードグループを使用する場合、Amazon EKS はノードのユーザーデータの maxPods に上限を適用します。vCPU が 30 未満のインスタンスの場合、上限は 110 です。vCPU が 30 を超えるインスタンスの場合、上限は 250 です。この値は、maxPodsExpression を含む他の maxPods 設定よりも優先されます。

  2. kubelet maxPods 設定 – kubelet 設定で直接 maxPods を設定する場合 (カスタム AMI を使用した起動テンプレートなど)、この値は maxPodsExpression よりも優先されます。

  3. nodeadm maxPodsExpression NodeConfigmaxPodsExpression を使用する場合、nodeadm は式を評価して maxPods を計算します。これは、値がより優先順位の高いソースによってすでに設定されていない場合にのみ有効です。

  4. デフォルトの ENI ベースの計算 – 他の値が設定されていない場合、AMI はそのインスタンスタイプでサポートされている Elastic Network Interface と IP アドレスの数に基づいて maxPods を計算します。これは式 (number of ENIs × (IPs per ENI − 1)) + 2 と同等です。+ 2 は、ポッド IP アドレスを消費しないすべてのノードで実行される Amazon VPC CNI と kube-proxy を表します。

重要

マネージド型ノードグループを使用して NodeConfigmaxPodsExpression を設定すると、マネージド型ノードグループの適用によって式が上書きされます。マネージド型ノードグループでカスタム maxPods 値を使用するには、起動テンプレートでカスタム AMI を指定し、maxPods を直接設定する必要があります。詳細については、「起動テンプレートを使用してマネージドノードをカスタマイズする」を参照してください。

マネージド型ノードグループとセルフマネージド型ノードの比較

マネージド型ノードグループ (カスタム AMI なし) では、Amazon EKS はノードのブートストラップユーザーデータに maxPods 値を挿入します。つまり、次のようになります。

  • maxPods 値は常にインスタンスサイズに応じて 110 または 250 に制限されます。

  • 設定するすべての maxPodsExpression は、この挿入された値によって上書きされます。

  • 別の maxPods 値を使用するには、起動テンプレートでカスタム AMI を指定し、--use-max-pods false--kubelet-extra-args '--max-pods=my-value' と一緒に bootstrap.sh スクリプトに渡します。例については「起動テンプレートを使用してマネージドノードをカスタマイズする」を参照してください。

セルフマネージド型ノードを使用すると、ブートストラッププロセスを完全に制御できます。NodeConfigmaxPodsExpression を使用するか、もしくは --max-podsbootstrap.sh に直接渡すことができます。

EKS Auto Mode に関する考慮事項

EKS Auto Mode では、ノード上のポッドの数が以下のいずれか低い方に制限されます。

  • ハード上限の 110 ポッド

  • 上記の最大ポッド数計算の結果。