1.原则
- 通过limit保证不同pod只能占用指定的资源
- 集群资源允许被超额分配
- 为pod划分等级确保不同的QoS,资源不足时,低等级的会被清理
2.语义
limits
系统允许容器运行时可能使用的资源量的最高上限
最多允许使用的上限,超过时进程会被杀掉requests
K8S调度时能为容器提供的完全可保障的资源量
最少的资源下限,当node上资源少于该值,pod将不会被调度到此node上m=milli unit,表示千分之一
M=1000
3.资源范围
cpu/mem/gpu/huge-page(v1.14)
1 | resources: |
4.基于request和limit的调度机制
调度时不看实际的使用资源量,看已运行pod的request总和作为已占用资源的度量
K8S pod资源的特点
分为 完全可靠资源 和 不可靠资源,通过这种机制实现 超卖
完全可靠的资源 = request
不可靠资源 = limit - request
可压缩/不可压缩资源
可压缩资源:CPU
空闲资源按照Request的比例进行分配
pod的cpu使用超过limit时,cgroups会对pod进行限流throttled
不可压缩资源:内存
超过request可能会被杀掉
超过limit时,内核会杀掉容器中使用内存最多的一个,直到不超过limnit为止
5. 服务质量等级QoS Class
优先级递减:Guaranteed > Burstable > BestEffort
Guaranteed
所有容器request=limit(仅设置Limit时也等效)
Burstable
requests不等于limits
BestEffort
所有容器的request和limit都未定义
OOM Score
OOM Score = 内存占用百分比 * 10 + 调整分(OOM_SCORE_ADJ)
OOM_SCORE_ADJ
Guaranteed: -998, BestEffort: 1000,
Busrtable: