ack-slo-manager提供动态资源超卖功能,通过对节点负载数据的实时收集,可以充分挖掘集群中已分配但未使用的资源量,以实现对集群资源的动态超卖。本文主要介绍如何使用动态资源超卖功能。
前提条件
- 仅支持ACK Pro版集群。具体操作,请参见Create a professional managed Kubernetes cluster。
- 已安装ack-slo-manager。具体操作,请参见使用说明。
背景信息
在Kubernetes系统中,Kubelet通过参考Pod的QoS等级来管理单机容器的资源质量,例如OOM(Out of Memory)优先级控制等。Pod的QoS级别分为Guaranteed、Burstable和BestEffort。QoS级别并不是显式定义,而是取决于Pod配置的Request和Limit(CPU、内存)。
为了提高稳定性,应用管理员在提交Guaranteed和Burstable这两类Pod时会预留相当数量的资源Buffer来应对上下游链路的负载波动,在大部分时间段,容器的Request会远高于实际的资源利用率。为了提升集群资源利用率,应用管理员会提交一些QoS为BestEffort的低优任务,来充分使用那些已分配但未使用的资源,实现对集群资源的超卖,其缺点如下:

- 节点可容纳低优任务的资源量没有任何参考,即使节点实际负载已经很高,由于BestEffort任务在资源规格上缺少容量约束,仍然会被调度到节点上运行。
- BestEffort任务间缺乏公平性保证,任务资源规格存在区别,但无法在Pod描述上体现。

针对以上问题,ACK的差异化SLO(Service Level Objectives)提供将这部分资源量化的能力。将上图中的红线定义为Usage,蓝线到红线预留部分资源定义为Buffered,绿色覆盖部分定义为Reclaimed。
如下图所示,Reclaimed资源代表可动态超卖的资源量。ack-slo-manager会根据节点真实负载情况动态更新,并以标准扩展资源的形式实时更新到K8s的Node元信息中。低优的BestEffort任务可以通过在Request和Limit中定义的Recliamed资源配置来使用这部分资源,这部分配置同时也会体现在节点侧的资源限制参数上,保证BestEffort作业之间的公平性。

使用限制
组件 | 版本要求 |
---|---|
Kubernetes | ≥v1.18 |
ack-slo-manager | ≥0.3.0 |
Helm版本 | ≥v3.0 |
操作系统 | Alibaba Cloud Linux 2、CentOS 7.6、CentOS 7.7 |