Kubernetes のノードのリソース不足による terminationGracePeriodSeconds を待たない evict
kubernetesemptyDir の volume を含む ephemeral-storage や memory の requests のみを指定した場合 pod はそれ以上のリソースを使うことができるが、それによってノードのリソースが枯渇しないよう kubelet が 次のシグナルを監視して pod を evict することがある。
- memory.available
- nodefs.available
- nodefs.inodesFree
- imagefs.available
- imagefs.inodesFree
- pid.available
これらに対して KubeletConfiguration の evictionSoft と evictionHard で閾値を設定することができ、soft を超えただけでは evict されるまで eviction-max-pod-grace-period の猶予があるが、hard も超えると即座に evict されてしまう。いずれの場合も pod の terminationGracePeriodSeconds は考慮されない。
evict される pod は requests 以上のリソースを使っているものから選ばれ、Pod Priority も考慮される。
EKS AMI を用いている場合、起動時に実行される bootstrap.sh で evictionHard が設定される。
$ cat /etc/kubernetes/kubelet/kubelet-config.json | jq ".evictionHard"
{
"memory.available": "100Mi",
"nodefs.available": "10%",
"nodefs.inodesFree": "5%"
}