なんで増やす必要があるのか
- 安めのインスタンスタイプでNodeを構成する場合、インスタンスに割り当てることができるIPアドレスの上限が少ないため、それにより新規Podを起動することができなくなるから
- たとえば、t3smallだと11個までしかIPアドレスを持つことができないため、仮にCPUメモリなどのリソースに空きがあったとしても、新規Podの起動ができなくなってしまう
手順
- VPC CNIプラグインというものを使って、/28のIPアドレスプレフィックスを割り当てることができる
割り当てられるPod数を確認
kubectl describe nodes <NodeName>
このNodeはt3.smallで起動しており、Capacityが11
となっており、11台までしかPodの起動ができない。
Capacity:
attachable-volumes-aws-ebs: 25
cpu: 2
ephemeral-storage: 104845292Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 1994624Ki
pods: 11 ← 11台まで
Allocatable:
attachable-volumes-aws-ebs: 25
cpu: 1930m
ephemeral-storage: 95551679124
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 1507200Ki
pods: 11
System Info:
Machine ID: ec248b9dac6722fd9acc25fd3f65ca6c
System UUID: ec248b9d-ac67-22fd-9acc-25fd3f65ca6c
Boot ID: 9010f11a-8230-443d-a92b-8a2833ee65d9
Kernel Version: 5.4.204-113.362.amzn2.x86_64
OS Image: Amazon Linux 2
Operating System: linux
Architecture: amd64
Container Runtime Version: docker://20.10.13
Kubelet Version: v1.22.9-eks-810597c
Kube-Proxy Version: v1.22.9-eks-810597c
ProviderID: aws:///ap-northeast-1a/i-095d812d190f6d642
Non-terminated Pods: (11 in total) ← 11/11台このノードでPodが起動しているということ
/28 IPv4 アドレスプレフィックスを割り当てる機能を有効化する
kubectl set env daemonset aws-node -n kube-system ENABLE_PREFIX_DELEGATION=true
設定確認
Podであるaws-nodeはPodにIPを割り当てる仕事をしている
kubectl describe -n kube-system pod aws-node-9czrj | grep ENABLE_PREFIX_DELEGATION
Nodeを再作成する
managedNodegroupであれば、eksctlでmaxPodsPerNode: 110
を指定する
managedNodeGroups:
- name: t3-small-managed
instanceType: t3.small
minSize: 2
maxSize: 5
volumeSize: 100
privateNetworking: true
maxPodsPerNode: 110 ← コレ
再作成後はPodのCapacityが増えている
Capacity:
attachable-volumes-aws-ebs: 25
cpu: 2
ephemeral-storage: 104845292Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 1994624Ki
pods: 110
参考
https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/cni-increase-ip-addresses.html
https://qiita.com/okubot55/items/2c25d75bd72bac629829