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

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

本ユーザーガイドの改善にご協力いただけませんか? このページの下部までスクロールし、[GitHub でこのページの編集] を選択します。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。

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

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 でサポートされているインスタンスタイプを選択する場合は、各タイプで次の機能を考慮してください。

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

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

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

LinuxWindows、および Bottlerocket に対応しているインスタンスタイプを確認します。Windows インスタンスを作成する前に、EKS クラスターに Windows ノードをデプロイする を確認してください。

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

x86 または Arm のどちらが必要か検討します。Arm インスタンスをデプロイする前に、Amazon EKS 最適化 Arm Amazon Linux AMI を確認します。Nitro System (Linux または Windows) 上に構築されたインスタンス、またはアクセラレータ付き機能インスタンが必要かを検討します。高速化された機能が必要な場合は、Amazon EKS でのみ Linux を使用できます。

Pods の最大数

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

注記

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 アドレスが Pods で使用できるわけではありません。インスタンスに割り当てる IP アドレスの数を大幅に増やすには、クラスターにバージョン 1.9.0 以降の Amazon VPC CNI アドオンをインストールし、適切に設定する必要があります。詳細については、「プレフィックスを使用して Amazon EKS ノードに割り当てる IP アドレスを増やす」を参照してください。インスタンスに最大数の IP アドレスを割り当てるには、バージョン 1.10.1 以降の Amazon VPC CNI アドオンをクラスターにインストールし、IPv6 ファミリーを使用してそのクラスターをデプロイする必要があります。

IP ファミリー

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

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

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

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

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

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

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

各 Amazon EC2 インスタンスタイプの Amazon EKS 推奨最大 Pods 数

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

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

    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 を使用してPodsに IP を割り当てるの更新手順を参照してください。

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

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

    29

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

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

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

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

注記

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