Kubelet 可以主动监测和防止计算资源的全面短缺。 在资源短缺的状况下,kubelet 能够主动地结束一个或多个 Pod 以回收短缺的资源。 当 kubelet 结束一个 Pod 时,它将终止 Pod 中的全部容器,而 Pod 的 Phase 将变为 Failed。 若是被驱逐的 Pod 由 Deployment 管理,这个 Deployment 会建立另外一个 Pod 给 Kubernetes 来调度。
配置资源不足时的处理方式:node
kubelet 支持按照如下信号触发驱逐决定。
docker
kubelet支持指定驱逐阈值,用于触发 kubelet 回收资源。
每一个阈值形式以下:shell
[eviction-signal][operator][quantity]
合法的 eviction-signal 标志如上图所示。
operator 是所需的关系运算符,例如 <,>。
quantity 是驱逐阈值值标志,例如 1Gi。合法的标志必须匹配 Kubernetes 使用的数量表示。 驱逐阈值也可使用 % 标记表示百分比。
举例说明,若是一个节点有 10Gi 内存,但愿在可用内存降低到 1Gi 如下时引发驱逐操做, 则驱逐阈值可使用下面任意一种方式指定(但不是二者同时)。ide
memory.available<10%
memory.available<1Gi
软驱逐阈值使用一对由驱逐阈值和管理员必须指定的宽限期组成的配置对。在超过宽限期前,kubelet不会采起任何动做回收和驱逐信号关联的资源。若是没有提供宽限期,kubelet启动时将报错。spa
此外,若是达到了软驱逐阈值,操做员能够指定从节点驱逐 pod 时,在宽限期内容许结束的 pod 的最大数量。 若是指定了 pod.Spec.TerminationGracePeriodSeconds 值, kubelet 将使用它和宽限期两者中较小的一个。 若是没有指定,kubelet将当即终止 pod,而不会优雅结束它们。code
软驱逐阈值的配置支持下列标记:orm
硬驱逐阈值没有宽限期,一旦察觉,kubelet将当即采起行动回收关联的短缺资源。 若是知足硬驱逐阈值,kubelet将当即结束 pod 而不是优雅终止。blog
硬驱逐阈值的配置支持下列标记:
eviction-hard 描述了驱逐阈值的集合(例如 memory.available<1Gi),若是知足条件将触发 pod 驱逐。排序
kubelet 根据其配置的整理时间间隔计算驱逐阈值。
housekeeping-interval 是容器管理时间间隔。进程
若是 kubelet 在节点上没法回收足够的资源,kubelet将开始驱逐 pod。
kubelet 首先根据他们对短缺资源的使用是否超过请求来排除 pod 的驱逐行为, 而后经过优先级, 而后经过相对于 pod 的调度请求消耗急需的计算资源。
kubelet 按如下顺序对要驱逐的 pod 排名:
必要时,kubelet会在遇到 DiskPressure 时逐个驱逐 Pod 来回收磁盘空间。 若是 kubelet 响应 inode 短缺,它会首先驱逐服务质量最低的 Pod 来回收 inodes。 若是 kubelet 响应缺乏可用磁盘,它会将 Pod 排在服务质量范围内,该服务会消耗大量的磁盘并首先结束这些磁盘。