在动态资源超卖场景下,您可能会将高优先级(Guaranteed、Burstable)应用未使用的资源超卖给低优先级(BestEffort)任务使用。为了确保BE Pod的CPU资源使用在合理范围内,ACK提供了CPU资源弹性限制能力,以优先保障节点中LS Pod的稳定运行。
为了帮助您更好地理解本文档并使用本功能,推荐您参见Kubernetes官方文档了解Pod Qos类、为容器和 Pod 分配内存资源等概念。
本功能搭配动态资源超卖功能使用,请参见启用动态资源超卖了解。
为什么需要启用弹性资源限制
为了提升集群资源的利用率,您可能会采用动态资源超卖模型,为LS(Latency Sensitive)类型的高优任务预留一定的资源Buffer来应对上下游链路的负载波动,并将这部分超卖资源提供给低BE类型的低优任务使用。为了控制BE Pod的CPU资源使用在合理范围内,避免占用LS Pod的资源而使其运行质量受到干扰,ack-koordinator组件提供了节点维度的CPU资源弹性限制能力,支持在整机资源用量的安全水位下,控制BE Pod可用的CPU资源,保障节点内容器稳定运行。
如下图所示,在整机安全水位下(CPU Threshold),随着LS Pod资源使用量的变化(Pod(LS).Usage),BE Pod可用的CPU资源会被限制在合理的范围内(CPU Restriction for BE)。限制水位的配置与动态资源超卖模型中的预留水位基本一致,以此保证CPU资源使用的一致性。
前提条件
已创建ACK集群Pro版,请参见创建ACK Pro版集群。
已安装ack-koordinator组件,且组件版本为0.4.0及以上,请参见ack-koordinator(ack-slo-manager)。
费用说明
ack-koordinator组件本身的安装和使用是免费的,不过需要注意的是,在以下场景中可能产生额外的费用:
ack-koordinator是非托管组件,安装后将占用Worker节点资源。您可以在安装组件时配置各模块的资源申请量。
ack-koordinator默认会将资源画像、精细化调度等功能的监控指标以Prometheus的格式对外透出。若您配置组件时开启了ACK-Koordinator开启Prometheus监控指标选项并使用了阿里云Prometheus服务,这些指标将被视为自定义指标并产生相应费用。具体费用取决于您的集群规模和应用数量等因素。建议您在启用此功能前,仔细阅读阿里云Prometheus计费说明,了解自定义指标的免费额度和收费策略。您可以通过账单和用量查询,监控和管理您的资源使用情况。
操作步骤
您可以通过ConfigMap在集群维度开启弹性资源限制功能,也可以在ConfigMap中配置相关参数,例如弹性资源限制下节点的安全水位阈值(cpuSuppressThresholdPercent
),实现更精细化的资源管理。
使用以下ConfigMap,创建configmap.yaml文件。
apiVersion: v1 kind: ConfigMap metadata: name: ack-slo-config namespace: kube-system data: # 开启弹性资源限制能力。 resource-threshold-config: | { "clusterStrategy": { "enable": true } }
查看命名空间kube-system下是否存在ConfigMap
ack-slo-config
。存在:使用PATCH方式进行更新,避免干扰ConfigMap中其他配置项。
kubectl patch cm -n kube-system ack-slo-config --patch "$(cat configmap.yaml)"
不存在:执行以下命令部署ConfigMap。
kubectl apply -f configmap.yaml
执行以下命令,查看当前BE分组对应的CPU绑核情况。
cat /sys/fs/cgroup/cpuset/kubepods.slice/kubepods-besteffort.slice/cpuset.cpus
预期输出:
10-25,35-51,62-77,87-103
预期输出表明,BE Pod的CPU绑定范围为
10-25,35-51,62-77,87-103
,即在开启CPU资源弹性限制后,根据当前资源使用情况,BE Pod可用的CPU资源范围得到了限制。可选:使用以下ConfigMap,配置高级参数。
您可以进一步配置CPU弹性资源限制的安全水位。
apiVersion: v1 kind: ConfigMap metadata: name: ack-slo-config namespace: kube-system data: resource-threshold-config: | { "clusterStrategy": { "enable": true, "cpuSuppressThresholdPercent": 65 } }
主要参数说明如下。
参数
类型
取值范围
说明
enable
Boolean
true
false
true
:集群开启弹性资源限制能力。false
:集群关闭弹性资源限制能力。
cpuSuppressThresholdPercent
Int
[0, 100]
弹性资源限制对应的节点安全水位阈值,默认为
65
。单位为百分比。