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

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

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

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

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

  • すべての Amazon EKS AMI は、現在、g5g および mac ファミリをサポートしていません。

  • 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 の数を手動で確認するには、「各 Amazon EC2 インスタンスタイプの Amazon EKS の推奨最大ポッド数」を参照してください。

注記

Amazon EKS に最適化された Amazon Linux 2 AMI の v20220406 以降を使用している場合、AMI を最新版にアップグレードしなくても、新しいインスタンスタイプを使用できます。これらの AMI は、max-pods の値が eni-max-pods.txt ファイルにリストされていな場合、必要な値を自動計算します。現在プレビュー中のインスタンスタイプは、Amazon EKS のデフォルトではサポートされていない場合があります。これらのタイプでの max-pods 値は、依然として AMI 内の eni-max-pods.txt に追加する必要があります

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 に割り当てる」を参照してください。

各 Amazon EC2 インスタンスタイプの Amazon EKS の推奨最大ポッド数

各 Pod には独自の IP アドレスが割り当てられているため、インスタンスタイプでサポートされている IP アドレスの数が、インスタンスで実行できる Pod の数を決定するための要因になります。Amazon EKS には、ダウンロードして実行できるスクリプトが用意されており、各インスタンスタイプで実行する Amazon EKS で推奨される最大のポッド数を決定できます。このスクリプトでは、各インスタンスのハードウェア属性と設定オプションを使用して、ポッドの最大数を決定します。これらの手順で返された番号を使用して、インスタンスが属するサブネットとは異なるサブネットから IP アドレスをポッドに割り当てる機能や、インスタンスの IP アドレス数を大幅に増やす機能を有効にできます。複数のインスタンスタイプを持つマネージドノードグループを使用している場合は、それらすべてのインスタンスタイプで機能する値を使用します。

  1. 各インスタンスタイプにおけるポッドの最大数を計算するために使用できるスクリプトをダウンロードします。

    curl -O https://raw.githubusercontent.com/awslabs/amazon-eks-ami/master/templates/al2/runtime/max-pods-calculator.sh
  2. コンピュータ上で、そのスクリプトを実行可能としてマークします。

    chmod +x max-pods-calculator.sh
  3. m5.large をデプロイ予定のインスタンスタイプに置き換え、1.9.0-eksbuild.1 を Amazon VPC CNI アドオンバージョンに置き換えて、そのスクリプトを実行します。アドオンバージョンを確認するには、「Amazon VPC CNI を使用してポッドに IP を割り当てる」の更新手順を参照してください。

    ./max-pods-calculator.sh --instance-type m5.large --cni-version 1.9.0-eksbuild.1

    出力例は次のとおりです。

    29

    次のオプションをスクリプトに追加して、オプションの機能を使用する際にサポートされる最大のポッド数を確認できます。

    • --cni-custom-networking-enabled — インスタンスとは異なるサブネットから IP アドレスを割り当てる場合は、このオプションを使用します。詳細については「カスタムネットワーキングを使用して代替サブネットに Pod をデプロイする」を参照してください。同じサンプル値を使用して前のスクリプトにこのオプションを追加すると、20 が得られます。

    • --cni-prefix-delegation-enabled — 各 elastic network interface にかなり多くの IP アドレスを割り当てる場合は、このオプションを使用します。この機能を使用するには、Nitro System で実行する Amazon Linux インスタンスと、Amazon VPC CNI アドオンのバージョン 1.9.0 以降が必要です。詳細については、「プレフィックスを使用して Amazon EKS ノードに割り当てる IP アドレスを増やす」を参照してください。同じサンプル値を使用して前のスクリプトにこのオプションを追加すると、110 が得られます。

--help オプションを指定してスクリプトを実行し、使用可能なすべてのオプションを表示することもできます。

注記

最大 Pod 計算スクリプトは、Kubernetes スケーラビリティのしきい値と推奨設定に基づいて戻り値を 110 に制限します。インスタンスタイプに 30 を超える vCPU がある場合、この制限は、内部の Amazon EKS スケーラビリティチームのテストに基づく数値である 250 に跳ね上がります。詳細については、「Amazon VPC CNI プラグインがノードあたりのポッド数の制限を引き上げ」のブログ記事を参照してください。

EKS Auto Mode に関する考慮事項

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

  • ハード上限の 110 ポッド

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