ack-koordinator是一个QoS感知的调度系统,通过CPU Burst、动态资源超卖等功能,在优化集群资源利用率的同时优先保障高优应用的服务质量,从而提升系统整体的稳定性。此外,ack-koordinator还支持资源画像以及重调度能力。本文介绍ack-koordinator组件的基本信息和变更记录。
如需了解组件的发布和变更记录,可直接跳转至变更记录。
ack-koordinator是什么
ack-koordinator是一个基于Kubernetes的QoS感知调度系统,能够有效提升集群资源利用率,并针对不同优先级的应用提供QoS保障能力,避免应用因资源竞争而影响性能表现。例如,ack-koordinator支持将Service服务型应用与批处理任务混合部署在同一节点,通过动态资源超卖、QoS感知调度等能力,在提升集群资源利用率的同时,保障Service应用的服务质量,适用于批处理、高性能计算、AI任务和机器学习等业务场景。ack-koordinator是ACK支持QoS感知调度的核心组件,提供弹性资源限制、拓扑感知调度、动态资源超卖等QoS感知调度能力,以及负载感知调度、重调度、资源画像等功能。
使用时,您可以登录容器服务管理控制台在ACK集群中安装ack-koordinator组件,然后通过ConfigMap或Pod Annotation启用并使用相关功能。
组件架构
ack-koordinator由中心侧组件和单机侧组件两部分组成,各模块功能描述如下。
Koordinator Manager:以Deployment的形式部署的中心组件,由主备两个实例组成,以保证组件的高可用。
SLO Controller:负责资源超卖管理,支持根据节点混部时的运行状态,动态调整集群的超卖资源量,同时为管理各节点的差异化SLO策略。
Recommender:提供资源画像功能,预估工作负载的峰值资源需求,简化配置容器资源规格的复杂度。
Koordinator Descheduler:以Deployment的形式部署的中心组件,提供重调度功能。
Koordlet:以DaemonSet的形式部署的单机组件,支持在离线混部场景下的动态资源超卖、负载感知调度、QoS感知调度等。
Koordinator调度插件:ack-koordinator组件在安装时不包括Koord-Scheduler模块,相关调度能力已经以插件形式集成在ACK调度器中默认安装。
在ACK Serverless集群中,ack-koordinator只包括Koordinator Manager组件,并提供资源画像功能。
版本号说明
自v1.1.1-ack.1版本起,ack-koordinator的版本号格式变更为x.y.z-ackn
。
x.y.z
:对应Koordinator开源版本,表示ack-koordinator已支持对应开源版本的所有功能。ackn
:在此开源版本基础上的功能增强和优化。
相关概念
支持的功能
ack-koordinator组件的各模块涵盖对应Koordinator开源版本支持的功能,安装配置中,仅默认开启常用功能的feature-gate。Koordinator开源版本的其他功能,需在开启ack-koordinator对应模块的feature-gate后使用。关于Koordinator开源版本的其他功能,请参见Koordinator官网文档。
类型 | 功能文档 | 功能说明 | 与开源版本是否一致 |
根据节点的实际负载情况,将Pod优先调度到负载较低的节点,以实现节点负载均衡,降低节点故障风险。 | 是 | ||
动态感知CPU Throttled现象并对容器参数进行自适应调节,在出现突发负载时,为容器临时提供额外的CPU资源以保障并提升应用的服务质量。 | 是 | ||
将Pod固定在节点的CPU Core上运行,缓解因CPU上下文切换、跨NUMA访存导致的应用性能下降问题 | 否 | ||
实时收集节点的真实负载数据,量化集群中已分配但未使用的CPU和内存资源,为BestEffort作业提供资源并保证BestEffort作业之间的资源公平性。 | 是 | ||
动态资源超卖的场景下,将BE Pod的CPU资源使用限制在合理范围内,优先保障节点中LS Pod的稳定运行 | 是 | ||
避免不同优先级的应用之间可能存在的CPU资源争抢,优先保障LS应用的CPU资源使用。 | 是 | ||
支持根据优先级为容器设置服务质量参数,在确保内存资源公平性的前提下,优先保障高优先级应用的性能 | 是 | ||
避免不同优先级的应用之间可能存在的L3 Cache和内存带宽资源争抢,优先保障LS应用的内存资源使用。 | 是 | ||
基于cgroups文件动态修改Pod资源参数,在不重启Pod的情况下,在Pod或Deployment维度临时修改CPU、内存、磁盘IO等单机隔离参数。 | 否 | ||
基于英特尔®DSA数据流加速器,提升节点上数据密集型工作负载的数据处理效能,还能进一步优化容器内存就近访问的加速效果。 | 否 | ||
保证数据安全的前提下将绑核应用远端NUMA上的内存迁移至本地,提高本地访存命中率,为内存密集型的工作负载提供更好的访存性能。 | 否 | ||
在集群资源利用不均衡、节点负载过高或有新的调度策略需求等场景下,将部署在某个节点上调度不合理的Pod重新调度到另一个节点,以维护集群健康、优化资源使用以及提高工作负载的服务质量。 | 是 | ||
动态感知集群内节点负载的变化,自动优化超过负载水位安全阈值的节点,防止出现负载极端不均衡的情况。 | 是 | ||
GPU拓扑感知 | 基于NUMA拓扑感知调度能力将Pod调度到最佳的NUMA节点上,从而减少跨NUMA节点的访问以优化性能。 | 否 | |
通过对资源使用量历史数据的分析,为容器推荐资源规格,有效简化了容器配置Request和Limit的复杂度。 | 否 |
组件的安装和管理
ack-koordinator已在容器服务管理控制台的组件管理页面上架,您可以在组件管理页面进行组件的安装、升级、卸载等操作。
前提条件
已创建1.18及以上版本的ACK集群。如何升级集群,请参见手动升级集群。
Helm版本为3.0及以上。如需升级,请参见【组件升级】Helm V2 Tiller升级公告和如何手动升级Helm的版本?。
安装和管理组件
您可以在组件管理页面安装ack-koordinator组件。后续使用过程中,您也可以在此操作界面修改组件参数配置或按需升级组件。
安装组件:参见下方步骤安装并验证组件是否部署成功。
修改组件参数:系统会按新配置自动重新部署ack-koordinator。
升级组件:如果您曾经通过其他方式对ack-koordinator已部署的模块(Deployment、DaemonSet)做过手动修改,组件升级后自定义的配置将被覆盖。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面的目标集群右侧,单击操作列下 。
在组件管理页面,定位ack-koordinator,然后在ack-koordinator卡片中单击安装。
在安装组件ack-koordinator对话框,按需修改配置参数,然后单击确定。
(可选)在集群管理页左侧导航栏,选择ack-koordinator的部署状态。
,查看如果ack-koordinator的状态为已部署,表明组件已成功部署。
卸载组件
清理未下线节点的ConfigMap
CPU拓扑感知调度功能为每个ACK节点在kube-system命名空间下创建拓扑信息ConfigMap。从0.5.1版本起,ack-koordinator会自动清理已下线节点的ConfigMap,但卸载ack-koordinator后,未下线节点的ConfigMap仍会保留。这些未清理的ConfigMap不会影响您其他功能的正常使用,但会占用数据空间,建议您及时清理。
在组件管理页面,定位ack-koordinator,按照页面提示完成组件的卸载。
删除拓扑信息ConfigMap。
在左侧导航栏,选择
,然后在页面顶部,选择kube-system命名空间。在名称文本框中搜索-numa-info,然后在下方列表,选择符合
${NODENAME}-numa-info
命名格式的ConfigMap,单击目标ConfigMap右侧操作列下的删除,按照页面提示完成删除。
清理CRD对象
写在ack-koordinator组件时,可能还遗留一些CRD对象。这些未清理的对象不会影响您其他功能的正常使用,但会占用数据空间。如果您后续可能需要重新安装ack-koordinator,这些对象可能会影响组件相关功能的正常使用,建议您及时清理。涉及的CRD如下。
autoscaling.alibabacloud.com | slo.koordinator.sh |
费用说明
ack-koordinator组件本身的安装和使用是免费的,不过需要注意的是,在以下场景中可能产生额外的费用:
ack-koordinator是非托管组件,安装后将占用Worker节点资源。您可以在安装组件时配置各模块的资源申请量。
ack-koordinator默认会将资源画像、精细化调度等功能的监控指标以Prometheus的格式对外透出。若您配置组件时开启了ACK-Koordinator开启Prometheus监控指标选项并使用了阿里云Prometheus服务,这些指标将被视为自定义指标并产生相应费用。具体费用取决于您的集群规模和应用数量等因素。建议您在启用此功能前,仔细阅读阿里云Prometheus计费说明,了解自定义指标的免费额度和收费策略。您可以通过账单和用量查询,监控和管理您的资源使用情况。
相关内容
ack-koordinator与ack-slo-manager的关系
ack-slo-manager是ack-koordinator的前身,孵化了开源项目Koordinator。后续随着Koordinator逐渐成熟稳定,也对ack-slo-manager实现了反哺。ack-koordinator既提供了Koordinator开源版本已经支持的功能,还在ack-slo-manager的基础上增加了更为丰富的功能。建议您参见将ack-koordinator从应用市场迁移至组件中心及时升级至最新组件版本,以便享用新功能特性和缺陷修复。
将ack-koordinator从应用市场迁移至组件中心
若您正在使用的ack-koordinator版本是通过应用市场完成部署的(即版本低于v0.7)请参见下文完成迁移。
若您修改过应用市场ack-koordinator的ConfigMap,请先备份再升级;若未修改,请参见步骤2直接升级组件。
使用kubectl或通过控制台对ack-koordinator的ConfigMap进行备份。
kubectl
根据原ConfigMap配置的命名空间(例如kube-system)和名称(例如ack-slo-manager-config),执行以下命令,将原配置保存在名称为slo-config.yaml的文件中。
kubectl get cm -n kube-system ack-slo-manager-config -o yaml > slo-config.yaml
执行
vim slo-config.yaml
命令编辑上述文件,将ConfigMap的字段修改为kube-system
,将name
字段修改为ack-slo-config
,并删除ConfigMap中所有annotations
和labels
,避免升级时被自动覆盖。执行以下命令,将修改后的配置提交到集群中。
kubectl apply -f slo-config.yaml
控制台
记录原ConfigMap中的键值对。
在左侧导航栏中,单击ack-koordinator时指定的命名空间(默认为kube-system)。
,然后在页面顶部,选择在应用市场安装在名称文本框中搜索ack-slo-manager-config,依次单击目标ConfigMap名称,记录ConfigMap的键值对。
使用原ConfigMap中的键值对,创建新的ConfigMap。
在左侧导航栏中,选择
,然后在页面顶部,选择所有命名空间。在配置项页面右上角,单击创建,输入配置项名称为ack-slo-config,选择新配置的命名空间kube-system,单击+添加,输入上一步记录的键值对,单击创建。
在组件管理页面,升级ack-koordinator至最新版本。
重要若您修改过应用市场中ack-koordinator的ConfigMap,则需要在ack-koordinator参数配置对话框中,将步骤1备份的ConfigMap的名称(例如ack-slo-config)填入到对应的配置项中。
从resource-controller迁移至ack-koordinator
resource-controller组件已下线,目前ack-koordinator已支持原resource-controller的所有功能,例如启用CPU拓扑感知调度、动态修改Pod的资源参数等。若您的集群正在使用resource-controller,请参见以下步骤完成从resource-controller到ack-koordinator的迁移。
将resource-controller升级至最新版本。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在组件管理页面,定位resource-controller,按照页面提示完成组件的升级。
安装并配置ack-koordinator。
在组件管理页面,定位ack-koordinator,然后在组件卡片区域,按页面提示进行安装。
在安装组件ack-koordinator对话框,按需修改agentFeatureGates(Koordlet的feature-gates控制开关)并配置其他参数,然后单击确定。
检查集群目前是否使用了动态修改Pod的资源参数中的CPU Limit调节功能(即通过创建CRD或Pod Annotation的形式修改了指定容器的cgroups参数文件cpu.cfs_quota_us)。若使用,请继续执行步骤ii;若未使用,请直接执行步骤c。
参考如下命令,从当前ack-koordlet的对应的DaemonSet YAML中获取当前feature-gate配置。
kubectl get daemonset -n kube-system ack-koordlet -o yaml |grep feature-gates - --feature-gates=AllAlpha=false,AllBeta=false,...,CPUBurst=true,....
参考如下示例,修改当前ack-koordlet的feature-gate配置,关闭CPU Burst策略模块,即设置
CPUBurst=false
(参数之间使用英文半角逗号(,)分隔),其他保持不变。关闭后,集群内所有容器的CPU Burst机制将不会生效,以此避免两个模块同时修改容器的cgroups参数文件cpu.cfs_quota_us。
AllAlpha=false,AllBeta=false,...,CPUBurst=false,....
如需实现容器的CPU资源弹性能力,推荐您使用CPU Burst性能优化策略功能自动调整Pod的CPU资源弹性,请参见CPU Burst性能优化策略。
在页面左侧导航栏,选择ack-koordinator的部署状态。
,查看如果ack-koordinator的状态为已部署,表明组件已成功部署。
在组件管理页面,定位resource-controller,然后按照页面提示完成组件的卸载。
常见问题
组件安装时报错:no matches for kind "ServiceMonitor" in version "monitoring.coreos.com/v1" ensure CRDs are installed first
集群中未安装Prometheus。请参见使用阿里云Prometheus监控安装Prometheus组件,或在组件管理页面安装ack-koordinator时取消选中ack-koordinator开启Prometheus监控指标。
组件安装时报错:task install-addons-xxx timeout, error install addons map[ack-slo-manager:Can't install release with errors: ... function "lookup" not defined
需升级Helm到3.0或以上版本。请参见【组件升级】Helm V2 Tiller升级公告完成升级。
变更记录
2024年09月
版本号 | 镜像地址 | 变更时间 | 变更内容 | 变更影响 |
v1.5.0-ack1.14 |
| 2024年09月12日 |
| 无 |
2024年07月
版本号 | 镜像地址 | 变更时间 | 变更内容 | 变更影响 |
v1.5.0-ack1.12 |
| 2024年07月29日 | 优化内部接口。 | 无 |
2024年01月
版本号 | 镜像地址 | 变更时间 | 变更内容 | 变更影响 |
v1.3.0-ack1.8 |
| 2024年01月24日 |
| 无 |
2023年12月
版本号 | 镜像地址 | 变更时间 | 变更内容 | 变更影响 |
v1.3.0-ack1.7 |
| 2023年12月21日 |
| 无 |
2023年10月
版本号 | 镜像地址 | 变更时间 | 变更内容 | 变更影响 |
v1.3.0-ack1.6 |
| 2023年10月19日 | 优化内部接口。 | 无 |
2023年06月
版本号 | 镜像地址 | 变更时间 | 变更内容 | 变更影响 |
v1.2.0-ack1.3 |
| 2023年06月09日 | 优化内部接口。 | 无 |
2023年04月
版本号 | 镜像地址 | 变更时间 | 变更内容 | 变更影响 |
v1.2.0-ack1.2 |
| 2023年04月25日 |
| 无 |
2023年03月
版本号 | 镜像地址 | 变更时间 | 变更内容 | 变更影响 |
v1.1.1-ack.2 |
| 2023年03月23日 | 优化内部接口。 | 无 |
2023年01月
版本号 | 镜像地址 | 变更时间 | 变更内容 | 变更影响 |
v1.1.1-ack.1 |
| 2023年01月11日 |
| 无 |
2022年11月
版本号 | 镜像地址 | 变更时间 | 变更内容 | 变更影响 |
v0.8.0 |
| 2022年11月17日 |
| 组件升级后,若使用负载感知调度,需要将ACK升级至1.22.15-ack-2.0版本。其他功能均可正常使用。 |
2022年09月
版本号 | 镜像地址 | 变更时间 | 变更内容 | 变更影响 |
v0.7.2 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.7.2 | 2022年09月16日 | 修复0.7.1版本引入的问题:拓扑感知调度对Pod不生效。 | 无 |
v0.7.1 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.7.1 | 2022年09月02日 |
| 无 |
2022年08月
版本号 | 镜像地址 | 变更时间 | 变更内容 | 变更影响 |
v0.7.0 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.7.0 | 2022年08月08日 | ack-slo-manager安装方式从应用市场迁移至组件管理。 | 无 |
2022年07月
版本号 | 镜像地址 | 变更时间 | 变更内容 | 变更影响 |
v0.6.0 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.6.0 | 2022年07月26日 | 优化内部相关接口,简化组件配置。 | 无 |
2022年06月
版本号 | 镜像地址 | 变更时间 | 变更内容 | 变更影响 |
v0.5.2 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.5.2 | 2022年06月14日 |
| 无 |
v0.5.1 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.5.1 | 2022年06月02日 |
| 无 |
2022年04月
版本号 | 镜像地址 | 变更时间 | 变更内容 | 变更影响 |
v0.5.0 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.5.0 | 2022年04月29日 |
| 无 |
v0.4.1 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.4.1 | 2022年04月14日 |
| 无 |
v0.4.0 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.4.0 | 2022年04月11日 | 优化slo-agent内存开销。 | 无 |
2022年02月
版本号 | 镜像地址 | 变更时间 | 变更内容 | 变更影响 |
v0.3.0 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.3.0 | 2022年02月25日 | 无 |
2021年12月
版本号 | 镜像地址 | 变更时间 | 变更内容 | 变更影响 |
v0.2.0 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.2.0 | 2021年12月10日 | 无 |
2021年09月
版本号 | 镜像地址 | 变更时间 | 变更内容 | 变更影响 |
v0.1.1 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.1.1-c2ccefa | 2021年09月02日 | 优化内部相关接口。 | 无 |
2021年07月
版本号 | 镜像地址 | 变更时间 | 变更内容 | 变更影响 |
v0.1.0 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.1.0-09766de | 2021年07月08日 | 支持使用负载感知调度。 | 无 |