🔥

EKSでPodに割り当てることができるIPアドレスを増やす

2023/04/23に公開

環境

  • EKS 1.25
  • Terraform aws providerで構築
  • eksctlは使ってない

そもそも

  • VPCCNIを有効化していないデフォルト状態でEKSを構築すると、各インスタンスタイプが許容されている分のIPアドレスしか割り当てることができないので、すぐいっぱいいっぱいになってしまう。

手順

エラー

plugin type="aws-cni" name="aws-cni" failed (add): add cmd: failed to assign an IP address to container というのが、これ以上IPアドレスを割り当てることができないよ。ということを示すものと思います。

Events:
  Type     Reason                  Age                  From               Message
  ----     ------                  ----                 ----               -------
  Normal   Scheduled               2m56s                default-scheduler  Successfully assigned default/swagger-api-56f5fc7955-kpwwq to ip-10-0-91-62.ap-northeast-1.compute.internal
  Warning  FailedCreatePodSandBox  2m55s                kubelet            Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox "a13186451fbedfe519bd9d6afc92e3c4eccaff4352b18a16b91f10a93ca097e5": plugin type="aws-cni" name="aws-cni" failed (add): add cmd: failed to assign an IP address to container
  Normal   Pulled                  76s (x5 over 2m41s)  kubelet            Container image "stoplight/prism:4" already present on machine
  Normal   Created                 76s (x5 over 2m41s)  kubelet            Created container swagger-api
  Warning  Failed                  76s (x5 over 2m40s)  kubelet            Error: failed to create containerd task: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "mock": executable file not found in $PATH: unknown
  Warning  BackOff                 62s (x9 over 2m39s)  kubelet            Back-off restarting failed container

現状を確認

Nodeはt3.mediumで構築してる。
1つのインスタンスに対して、IPアドレスが17までしか割り当てることができないという意味。

kubectl describe nodes | grep pods: 
  pods:                        17
  pods:                        17

Versionの確認

1.10以上ならOK

kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2
amazon-k8s-cni-init:v1.12.2-eksbuild.1
amazon-k8s-cni:v1.12.2-eksbuild.1

ENABLE_PREFIX_DELEGATIONを有効化する

kubectl set env daemonset aws-node -n kube-system ENABLE_PREFIX_DELEGATION=true

Nodeを作り直す

ぼくの場合は、nodegroupを一度削除して、再度作り直しました。
Nodegroupまで削除する必要があるかは分かりませんが、AWSドキュメントを見るとその必要はなそう。

Nodeのpodsが増えていることを確認

kubectl describe nodes | grep pods: 
  pods:                        110
  pods:                        110

1ノードに対し、110個まで割り振ることができるようになりました

参考

https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/cni-increase-ip-addresses.html
https://qiita.com/okubot55/items/2c25d75bd72bac629829
https://qiita.com/yuta_vamdemic/items/79f3ec8091929da27219

Discussion