本篇将介绍如何使用kubelet处理资源耗尽的情况
当可用的计算机资源非常低的时候,kubelet仍然要保证节点的稳定性.当处理不可压缩的计算机资源(比如内存或磁盘空间)时,这尤其重要,当这些资源被耗尽时,节点将变得不稳定
kubelet会积极的监视并阻止可用计算机资源耗尽.这种情况下,kubelet会终止一个或者多个pod来重新取回耗尽的资源,当kubelet终止一个pod时,它将会终止pod的所有容器并把PodPhase设置为Failed
kubelet支持基于下面列表中描述的驱离信号的驱离策略.每一个信号值都由后面description列来描述,并且它们是基于kubelet的summary API
以上的信号同时支持字面量或者百分比值.百分比值根据每个信号的总容量来计算
memory.available的值从cgroup里衍生出来,而不是通过free -m,这一点很重要因为free -m在容器里是无效的
kubelet仅支持以下两种文件类型分区:
imagefs是可选的,kubelet使用cAdvisor来自动发现.kubelet并不关心其它文件系统.其它类型的配置目前kubelet也不支持,比如把存储卷和log存放到filesystem是not OK的
kubelet支持指定驱离阈值来来触发kubelet回收资源
每一个阈值都是以下形式的:
[eviction-signal][operator][quantity]
比如说一个节点有10Gi总内存值,并且如果可用内存的值如果低于1Gi的时候你想要触发驱离,你可以以如下两种方式中的任一来定义驱离阈值
memory.available<10%或memory.available<1Gi但是你不能两者同时使用.
软驱离阈值和一个包含管理员指定的优雅时间的驱离阈值成对出现.驱离信号发出后,在优雅时间没有超出之前,kubelet不会回收资源.如果不指定优雅时间,kubelet会在一开始就返回错误
此外,如果软驱离阈值被满足,operator可以指定被驱离时最大允许的pod优雅终止时间.如果指定了,kubelet使用pod.Spec.TerminationGracePeriodSeconds和最大允许的优雅终止时间两者中较小的一个值.如果没有指定,kubelet会马上杀死pod
以下标识被用于支持软驱离阈值
eviction-soft描述了一系列软驱离阈值.
eviction-soft-grace-period描述了一系列驱离时间,(比如memory.available=1m30s),对应在驱离发生之前,软件驱离阈值持续的时间
eviction-max-pod-grace-period描述了当软驱离阈值被满足时,最大允许的优雅终止时间(单位是秒)
硬驱离阈值没有优雅时段,kubelet会立马对相关的资源采取动作.如果硬驱离阈值被满足,kubelet会立马杀死pod,而没有优雅终止时段.
以下标识可以被用于配置硬驱离阈值
通过housekeeping-interval
节点状态
kubelet把一个或多个驱离信号映射到的对应的节点状态上
如果硬驱离阈值被满足,或者不依赖于优雅时段的软驱离阈值被满足,kubelet会报告一种状态来反映节点处于压力之下
以下是节点状态和特定驱离信号间的关系
kubelet会继续以--node-status-update-frequency指定的值(默认为10秒)来报告更新的节点状态
如果驱离阈值被满足并且优雅时段已过,kubelet开始启动对处于压力的资源的回收工作直到监测到压力信号已经消失并且低于定义的阈值
kubelete尝试优先回收节点级别的资源而不是驱离pod.如果监测到磁盘压力,如果节点有容器运行时专用的imagefs,则kubelet回收资源的方式不同
如果kubelet无法在节点上回收到足够的资源,则开始驱离pod.
kubelet首先会根据pod使用的资源是否超过了申请的资源,然后根据他们的优先级把要驱离的pod进行排序.
最终kubelet按照以下列出的顺序对要驱离的pod进行排序:
BestEffort或者Burstable类型pod
本文分享自 kubernetes中文社区 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!