https://zhuanlan.zhihu.com/p/342595624
https://kubernetes.io/zh/docs/tasks/administer-cluster/reserve-compute-resources/
换句话说,每个驱逐信号都与某个驱逐阈值相关联,该驱逐阈值会告诉 kubelet 何时开始回收资源。目前,kubelet 支持以下驱逐信号:
memory.available:描述集群内存状态的信号。内存的默认驱逐阈值为 100Mi。换句话说,当内存下降到 100Mi 时,kubelet 就会开始驱逐 Pod。nodefs.available:nodefs是 kubelet 用于卷、守护进程日志等的文件系统。默认情况下,如果nodefs.available<10%,kubelet 将开始回收节点资源。nodefs.inodesFree:描述 nodefs 索引节点内存状态的信号。默认情况下,如果 nodefs.inodesFree<5%,kubelet 将开始驱逐工作负载。imagefs.available—imagefs:文件系统是容器运行时使用的可选文件系统,用于存储容器镜像和容器可写层。默认情况下,如果imagefs.available<15%,kubelet 将开始逐出工作负载。imagefs.inodesFree:索引 imagefs 节点内存的状态。它没有默认驱逐阈值。
上述驱逐阈值都是合理的默认值。用户可以通过在 kubelet binary 上设置适当的 flag 来配置其自定义驱逐阈值。这些用户定义的阈值可以更改默认的 kubelet 驱逐行为。
目前,Kubernetes 支持硬驱和软驱逐阈值。
如果达到硬驱逐阈值,kubelet 将立即开始回收资源,而没有任何宽限期。软驱逐阈值则会包含用户定义的宽限期。在超过宽限期前,kubelet 不会回收与驱逐信号关联的资源。
我们可以使用 kubelet binary 上的 --eviction-hardkubelet flag 定义硬驱逐阈值。例如,kubelet —-eviction-hard=memory.available<1Gi 当节点的 memory.available 大小低于 1Gi 时,kubelet 将开始回收资源。
如果要在驱逐之前允许宽限期,可以将 —-eviction-soft 与 —-eviction-soft-grace-period 结合使用。例如,kubelet —-eviction-soft=memory.available<2Gi 以及 kubelet —-eviction-soft-grace-period=1m30s 能将 90 秒的驱逐阈值保持在触发驱逐前。
用户还可以通过设置 —-eviction-max-pod-grace-period 秒数来指定允许的最大宽限期。
