Amazon Elastic Kubernetes Service (Amazon EKS) で VPC サブネットの IP アドレスを使用するように Amazon Virtual Private Cloud (VPC) コンテナネットワークインターフェイス (CNI) プラグインを設定したいと考えています。ベストプラクティスは何ですか?
簡単な説明
Amazon VPC CNI の主要なコンポーネントの 1 つは L-IPAM デーモンです。このデーモンを、IP アドレスをノードに割り当てるよう設定します。
新しい ポッドがノードでスケジュールされている場合、kubelet は CNI バイナリを呼び出します。CNI バイナリは L-IPAMD を呼び出して、新しいポッド の IP アドレスを取得します。ポッド は、インスタンスに添付されている Elastic network interfaceと IP アドレスを追跡します。
特定の設定変数を使用して、維持するネットワークインターフェイスと IP アドレスの数を制御できます。詳細については、 WARM_ENI_TARGET、WARM_IP_TARGET、および WARM_PREFIX_TARGETおよび、WARM_IP_TARGET、WARM_IP_TARGET (GitHub ウェブサイトから) を参照してください。
解決方法
設定変数を使用して、維持するネットワークインターフェイスと IP アドレスの数を制御するための基本的なベストプラクティスを次に示します。
WARM_ENI_TARGET
WARM_ENI_TARGET 変数を使用して、L-IPAMD が利用可能な Elastic network interfaceの数を決定し、ノードでスケジュールされたときにポッド に直ちに IP アドレスが割り当てられるようにします。
- サブネットで使用可能な IP アドレスが枯渇しないようにするには、ワーカーノードのインスタンスタイプと、インターフェイスあたりのネットワークインターフェイスとプライベート IPv4 アドレスの最大数を確認してください。たとえば、m5.xlarge ノードに WARM_ENI_TARGET=3 を設定すると、3 つの Elastic network interfaceがノードに常に添付されます。このノードは、45 個の IP アドレスを割り当て、Elastic network interfaceごとに 15 個を割り当てます。なぜなら、45 個の IP アドレスはこのノード用に予約されているため、これらのアドレスは他のワーカーノードでスケジュールされているポッド には使用できません。
- アプリケーションのスケーリングが大きく予想される場合は、 WARM_ENI_TARGET を使用して、新しくスケジュールされたポッド に迅速に対応できます。
WARM_IP_TARGET
WARM_IP_TARGET 変数を使用して、L-IPAMD のウォームプールで使用可能な IP アドレスの数が常に定義されていることを確認します。
- 生産性が低いクラスターでは、 WARM_IP_TARGET を使用して、必要な数の IP アドレスだけがネットワークインターフェースに割り当てられるようにします。これにより、Elastic network interfaceの IP アドレスがブロックされるのを防ぎます。
MINIMUM_IP_TARGET
MINIMUM_IP_TARGET を使用して、ノードが最初に表示されたときに、ノードに最小数の IP アドレスが割り当てられていることを確認します。通常、この変数は WARM_IP_TARGET 変数と共に使用されます。
- ノードごとに実行するポッドの最小数がわかっている場合は、 MINIMUM_IP_TARGET を使用して、必要な数の IP アドレスを割り当てます。IP アドレスがすぐに利用できる場合、ポッドは ポッドがスケジュールされたとおりに受信できます。
- この変数を WARM_IP_TARGET に設定して、将来のポッドで使用できる IP アドレスがノードにあることを確認します。
WARM_PREFIX_TARGET
WARM_PREFIX_TARGET 変数を使用して、定義済みの数のプレフィックス (/28 CIDR ブロック) がインスタンスのネットワークインターフェイスに常に追加されるようにします。WARM_PREFIX_TARGET は CNI バージョン 1.9.0 以降でのみ使用でき、 Amazon VPC CNI IP アドレスプレフィックス割り当て機能をアクティブ化する必要があります。
- IP アドレスプレフィックスの割り当てを使用する場合は、 WARM_PREFIX_TARGET 変数が 1 以上の値に設定されていることを確認します。0 に設定すると、次のエラーが表示されます:
Error: Setting WARM_PREFIX_TARGET = 0 is not supported while WARM_IP_TARGET/MINIMUM_IP_TARGET is not set.
Please configure either one of the WARM_{PREFIX/IP}_TARGET or MINIMUM_IP_TARGET env variables
- サブネットが小さい場合は、 WARM_IP_TARGET と WARM_PREFIX_TARGET を使用して、プレフィクスの割り当てが多すぎないようにします。割り当てるプレフィクスが多すぎると、使用可能な IP アドレスが枯渇する可能性があります。
これらの設定変数が IP アドレスの使用率に与える影響について詳しくは、 CNI 設定変数 (GitHub Web サイトから) を参照してください。