Amazon EC2 ノードで使用可能な IP アドレスの量を増やす
各 Amazon EC2 インスタンスでは、Elastic Network Interface の最大数と、各ネットワークインターフェイスに割り当て可能な IP アドレスの最大数がサポートされています。各ノードには、ネットワークインターフェースごとに 1 つの IP アドレスが必要です。その他の使用可能な IP アドレスはすべて Pods
に割り当てることができます。Pod
それぞれに固有の IP アドレスが必要です。その結果、使用可能なコンピューティングリソースとメモリリソースはあるが、Pods
に割り当てる IP アドレスが不足しているために追加の Pods
に対応できないノードが存在する可能性があります。
このトピックでは、個別のセカンダリ IP アドレスではなく、IP プレフィックスをノードに割り当てて、ノードで Pods
に割り当て可能な IP アドレスの数を大幅に増やす方法について説明します。各プレフィックスには複数の IP アドレスが含まれます。IP プレフィックスが割り当てられるようにクラスターを設定しない場合、クラスターは Pod 接続に必要なネットワークインターフェイスと IP アドレスを設定するために Amazon EC2 アプリケーションプログラミングインターフェイス (API) の呼び出しをさらに実行する必要があります。クラスターのサイズが大きくなるにつれて、これらの API コールの頻度が高くなるため、Pod とインスタンスの起動時間が長くなる場合があります。これにより、大規模でスパイク的なワークロードの需要を満たすためにスケーリングの遅延が発生します。また、スケーリング要件を満たすためには、追加のクラスターと VPC をプロビジョニングする必要があるため、コストと管理オーバーヘッドも増加します。詳細については、「GitHub」の「Kubernetes スケーラビリティ閾値
考慮事項
-
各 Amazon EC2 インスタンスタイプでは、Pods の最大数がサポートされています。マネージドノードグループが複数のインスタンスタイプで構成されている場合、クラスターのインスタンスで指定する Pods の最大数の内、最小の値がクラスター内のすべてのノードに適用されます。
-
デフォルトでは、1 つのノードで実行できる
Pods
の最大数は 110 ですが、この値は変更できます。数値を変更し、既存のマネージド型ノードグループがある場合、ノードグループの AMI または起動テンプレートを次に更新するときに、新しいノードで変更済みの値が適用されるようになります。 -
IP アドレスの割り当てから IP プレフィックスの割り当てに移行する場合は、既存のノードにローリング置換を実行するのではなく、新しいノードグループを作成して使用可能な IP アドレスの数を増やすことをお勧めします。IP アドレスと IP プレフィックスの両方が割り当てられているノードで Pods を実行すると、アドバタイズされた IP アドレスの容量に不一致が生じ、ノード上の将来のワークロードに影響する可能性があります。推奨される移行方法については、「Amazon EKS ベストプラクティスガイド」の「セカンダリ IP モードからプレフィックス委任モード、またはその逆への移行中にすべてのノードを置換する
」を参照してください。 -
Linux ノードのみを含むクラスターの場合。
-
ネットワークインターフェイスにプレフィックスを割り当てるようにアドオンを設定すると、クラスター内のすべてのノードグループ内のすべてのノードを削除しない限り、Amazon VPC CNI plugin for Kubernetes アドオンを
1.9.0
(あるいは1.10.1
) より前のバージョンにダウングレードすることはできません。 -
Pods のセキュリティグループ (
POD_SECURITY_GROUP_ENFORCING_MODE
=standard
およびAWS_VPC_K8S_CNI_EXTERNALSNAT
=false
に設定) も使用している場合、Pods が VPC の外部のエンドポイントと通信するときに、Pods に割り当てたセキュリティグループではなく、ノードのセキュリティグループが使用されます。Pods のセキュリティグループ (
POD_SECURITY_GROUP_ENFORCING_MODE
=strict
に設定) も使用している場合、Pods
が VPC の外部のエンドポイントと通信するときに、Pod's
セキュリティグループが使用されます。
-
前提条件
-
既存のクラスター。デプロイするには、「Amazon EKS クラスターの作成」を参照してください。
-
Amazon EKS ノードが配置されているサブネットでは、
/28
個の連続ブロック (IPv4
クラスターの場合)、または/80
個の Classless Inter-Domain Routing (CIDR) ブロック (IPv6
クラスターの場合) が十分な数として必要になります。IPv6
クラスターに含めることができるのは Linux ノードだけです。IP アドレスがサブネット CIDR 全体に分散している場合、IP プレフィックスを使用すると失敗する可能性があります。次のことを推奨します。-
サブネット CIDR 予約を使用すると、予約された範囲内の IP アドレスがまだ使用されている場合でも、解放時に IP アドレスが再割り当てされません。これにより、セグメンテーションなしでプレフィックスを割り当てることができます。
-
IP プレフィックスが割り当てられているワークロードの実行に特に使用される新しいサブネットを使用してください。IP プレフィックスを割り当てると、Windows と Linux 両方のワークロードを同じサブネットで実行できます。
-
-
ノードに IP プレフィックスを割り当てるには、ノードが AWS Nitro ベースである必要があります。Nitro ベースではないインスタンスでは、引き続き個別のセカンダリ IP アドレスが割り当てられますが、Pods に割り当てることのできる IP アドレスの数は Nitro-based のインスタンスよりも大幅に少なくなります。
-
Linux ノードのみのクラスターの場合 – クラスターが
IPv4
ファミリーで設定されている場合は、バージョン1.9.0
以降の Amazon VPC CNI plugin for Kubernetes アドオンがインストールされている必要があります。現在のバージョンは、次のコマンドで確認できます。kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2
クラスターが
IPv6
ファミリーで設定されている場合は、バージョン1.10.1
のアドオンがインストールされている必要があります。プラグインバージョンが必要なバージョンよりも古い場合は、更新する必要があります。詳細については、更新された「Amazon VPC CNI plugin for Kubernetes Amazon EKS アドオンの使用」セクションを参照してください。 -
Windows ノードのみのクラスターの場合
-
クラスターとそのプラットフォームバージョンは、次の表のバージョン以降である必要があります。クラスターバージョンをアップグレードするには、「Amazon EKS クラスターの Kubernetes バージョンの更新」を参照してください。クラスターがプラットフォームの最小バージョンでない場合、Amazon EKS がプラットフォームバージョンを更新するまで、ノードに IP プレフィックスを割り当てることはできません。
Kubernetes バージョン プラットフォームのバージョニング 1.27
eks.3
1.26
eks.4
1.25
eks.5
現在の Kubernetes バージョンとプラットフォームバージョンを確認するには、次のコマンドの
をクラスターの名前に置き換えて、変更したコマンドmy-cluster
aws eks describe-cluster --name
を実行します。my-cluster
--query 'cluster.{"Kubernetes Version": version, "Platform Version": platformVersion}' -
クラスターで Windows サポートが有効になっています。詳細については、「Amazon EKS クラスター の Windows サポートの有効化」を参照してください。
-
Amazon EC2 ノードで使用可能な IP アドレスの量を増やす
-
ノードに IP アドレスプレフィックスを割り当てるようにクラスターを設定します。ノードのオペレーティングシステムに対応するタブで手順を完了します。
-
ノードがデプロイされると、クラスター内のノードの表示が可能になります。
kubectl get nodes
出力例は次のとおりです。
NAME STATUS ROLES AGE VERSION ip-
192-168-22-103
.region-code
.compute.internal Ready <none>19m
v1.XX.X-eks-6b7464
ip-192-168-97-94
.region-code
.compute.internal Ready <none>19m
v1.XX.X-eks-6b7464
-
いずれかのノードを記述して、そのノードの
max-pods
値と使用可能な IP アドレスの数を決定します。前の出力で返されたいずれかのノードの名前の
を192.168.30.193
IPv4
アドレスに置き換えます。kubectl describe node ip-
192-168-30-193
.region-code
.compute.internal | grep 'pods\|PrivateIPv4Address'出力例は次のとおりです。
pods:
110
vpc.amazonaws.com/PrivateIPv4Address:144
前の出力にある
110
は、144 個
の IP アドレスが使用可能であるにもかかわらず、Kubernetes がノードにデプロイする Pods の最大数です。