Kubernetes のノードのリソース不足による terminationGracePeriodSeconds を待たない evict

kubernetes

emptyDir の 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%"
}