3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

EKSで各ノードにデフォルトで割り当てられる private IPアドレスの数を制限するたったひとつの冴えたやり方

Last updated at Posted at 2019-11-12

前置き

微妙に釣りになっていないタイトルは頑張った証です。
全然ひとつじゃないと思いますが、参考まで

EKSのノードを作成する際に、というかそれに限らずVPCやsubnetを作成する必要がありますが、net maskどんくらいにします?
なにが正しいってのはないとは思いますが、私の場合、VPCのnet maskは/16 、 subnetは /24 にします。

VPCは/16であれば、単純に第二オクテットでネットワークを識別できるからです。10.1.0.0/16とかなら、10.1がネットなわけですな。
VPCたくさんつくってもそれぞれ、10.1.0.0/16 , 10.2.0.0/16, 10.3.0.0/16 とはやっとけばそれぞれに配置しているリソースの識別も容易なわけです。
特にVPCピア接続をしたいと思った時にネットワークのIPが別である必要があるため、便利、というか必須です。

で、subnet。
/24にしとけば、第四オクテットが自由になる部分であり、発行できるIPアドレスは256。256個もIP発行することある?ないでしょ!
ということで、なんの迷いもなくそうやってきました。そう。EKSを使うまでは。

EKSにノードを立てたら、次にやるのはscale out ですよね。

ちなみにEKSのクラスタ構築にはeksctlを使用しています。

eksctl.io
https://eksctl.io/

裏でCloudFormationが走るよいツールです。普段はTerraformなのでちょっと思うところはありますが、良いツールです。

よっしゃー、r5.large でいっきに100個までscale outさせちゃうぞ!(ただしspot instanceにかぎる)
とかやります。私はやりました。
その結果、謎のエラー。。。。

CloudFormationのコンソール見たら、案の定エラー終了しています。
エラーメッセージをよく見てみると、どうやらsubnetのIPアドレスが枯渇しているとのこと。。。 え?

なんとEKSは、largeクラスであれば、各ノード毎に約10個程度のIPアドレスを確保していきます。いきやがるのです。

によれば、なんとr5.largeの場合1インタンスあたり最大29個のIPアドレスを消費する可能性があるとのこと。
podごとにIPをアサインする必要があるためらしいですが、いや1ノードでそんなにpod動かさないでしょ〜。

一度このエラーが発生するとCloudFormationのRollbackも至難の技で苦労しました。
Rollback時に出るエラーログを丁寧に追いながら、rollback対象外のリソースを指定していくのがポイント。
まあそもそも発生させないのがよいのでその方法を。

デフォルトで割り当てられる private IPアドレスの数を制限する方法

  • 例えば3個に制限する場合
kubectl set env daemonset aws-node -n kube-system WARM_IP_TARGET=3

こんだけです。
daemonsetとしてノードごとに起動しているaws-nodeの環境変数を変更するわけですな。

他に設定可能な値は以下参照。

CNI 設定変数
https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/cni-env-vars.html

変えたのはデフォルト値なので、たくさんpodをあげれば当然IPを確保しにいくので、枯渇の悪夢は起こりえます。
ご注意を。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?