🔥
EKSでPodに割り当てることができるIPアドレスを増やす
環境
- 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個まで割り振ることができるようになりました
参考
Discussion