ack-koordinator(ack-slo-manager)

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组件,并提供资源画像功能。

image

版本号说明

自v1.1.1-ack.1版本起,ack-koordinator的版本号格式变更为x.y.z-ackn

  • x.y.z:对应Koordinator开源版本,表示ack-koordinator已支持对应开源版本的所有功能。

  • ackn:在此开源版本基础上的功能增强和优化。

相关概念

QoS

Kubernetes社区为Pod提供了三种服务质量(Quality of Service, QoS)类,包括Guaranteed、Burstable和BestEffort。Koordinator在兼容并增强Kubernetes QoS的基础上,引入了新的QoS分类(LS(Latency Sensitive)类、BE(Best Effort)等),并通过独立的字段koordinator.sh/qosClass进行管理。Koordinator QoS旨在更精细地控制和优化混部场景下工作负载的资源使用与调度,保障系统整体的服务质量。

重调度

Kubernetes调度(Scheduling)是将Pending的Pod分配到节点上的过程。重调度(Descheduling)通常是指将部署在某个节点上调度不合理的Pod重新调度到另一个节点。在集群利用率不均而产生热点节点、节点属性变化导致存量Pod调度规则不匹配等场景下,您可以使用重调度来优化资源使用,确保Pod在最佳节点上运行,从而保障集群的高可用性和工作负载的高效运行。

混部

在离线混合部署,即混部(Colocation),是一种资源利用策略,允许不同种类、不同优先级的工作负载在同一计算节点上共存,以提高资源利用率和降低成本。混部策略可以更充分地利用计算和存储资源,减少资源闲置,降低集群资源成本,尤其是在面对波峰波谷明显的业务负载时更为明显。

支持的功能

ack-koordinator组件的各模块涵盖对应Koordinator开源版本支持的功能,安装配置中,仅默认开启常用功能的feature-gate。Koordinator开源版本的其他功能,需在开启ack-koordinator对应模块的feature-gate后使用。关于Koordinator开源版本的其他功能,请参见Koordinator官网文档

类型

功能文档

功能说明

与开源版本是否一致

负载感知调度

根据节点的实际负载情况,将Pod优先调度到负载较低的节点,以实现节点负载均衡,降低节点故障风险。

QoS感知调度

CPU Burst性能优化策略

动态感知CPU Throttled现象并对容器参数进行自适应调节,在出现突发负载时,为容器临时提供额外的CPU资源以保障并提升应用的服务质量。

启用CPU拓扑感知调度

将Pod固定在节点的CPU Core上运行,缓解因CPU上下文切换、跨NUMA访存导致的应用性能下降问题

启用动态资源超卖

实时收集节点的真实负载数据,量化集群中已分配但未使用的CPU和内存资源,为BestEffort作业提供资源并保证BestEffort作业之间的资源公平性。

启用CPU资源弹性限制能力

动态资源超卖的场景下,将BE Pod的CPU资源使用限制在合理范围内,优先保障节点中LS Pod的稳定运行

启用容器CPU QoS

避免不同优先级的应用之间可能存在的CPU资源争抢,优先保障LS应用的CPU资源使用。

启用容器内存QoS

支持根据优先级为容器设置服务质量参数,在确保内存资源公平性的前提下,优先保障高优先级应用的性能

启用容器L3 Cache及内存带宽隔离

避免不同优先级的应用之间可能存在的L3 Cache和内存带宽资源争抢,优先保障LS应用的内存资源使用。

动态修改Pod的资源参数

基于cgroups文件动态修改Pod资源参数,在不重启Pod的情况下,在Pod或Deployment维度临时修改CPU、内存、磁盘IO等单机隔离参数。

使用硬件DSA进行数据流加速

基于英特尔®DSA数据流加速器,提升节点上数据密集型工作负载的数据处理效能,还能进一步优化容器内存就近访问的加速效果。

多NUMA机型的容器内存就近访问加速

保证数据安全的前提下将绑核应用远端NUMA上的内存迁移至本地,提高本地访存命中率,为内存密集型的工作负载提供更好的访存性能。

重调度

启用重调度功能

在集群资源利用不均衡、节点负载过高或有新的调度策略需求等场景下,将部署在某个节点上调度不合理的Pod重新调度到另一个节点,以维护集群健康、优化资源使用以及提高工作负载的服务质量。

使用负载热点打散重调度

动态感知集群内节点负载的变化,自动优化超过负载水位安全阈值的节点,防止出现负载极端不均衡的情况。

GPU拓扑感知

启用NUMA拓扑感知调度

基于NUMA拓扑感知调度能力将Pod调度到最佳的NUMA节点上,从而减少跨NUMA节点的访问以优化性能。

资源画像

通过对资源使用量历史数据的分析,为容器推荐资源规格,有效简化了容器配置Request和Limit的复杂度。

组件的安装和管理

ack-koordinator已在容器服务管理控制台组件管理页面上架,您可以在组件管理页面进行组件的安装、升级、卸载等操作。

前提条件

安装和管理组件

您可以在组件管理页面安装ack-koordinator组件。后续使用过程中,您也可以在此操作界面修改组件参数配置或按需升级组件。

  • 安装组件:参见下方步骤安装并验证组件是否部署成功。

  • 修改组件参数:系统会按新配置自动重新部署ack-koordinator

  • 升级组件:如果您曾经通过其他方式对ack-koordinator已部署的模块(Deployment、DaemonSet)做过手动修改,组件升级后自定义的配置将被覆盖。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面的目标集群右侧,单击操作列下更多 > 组件管理

  3. 组件管理页面,定位ack-koordinator,然后在ack-koordinator卡片中单击安装

  4. 安装组件ack-koordinator对话框,按需修改配置参数,然后单击确定

  5. (可选)在集群管理页左侧导航栏,选择应用 > Helm,查看ack-koordinator的部署状态。

    如果ack-koordinator状态已部署,表明组件已成功部署。

卸载组件

清理未下线节点的ConfigMap

CPU拓扑感知调度功能为每个ACK节点在kube-system命名空间下创建拓扑信息ConfigMap。从0.5.1版本起,ack-koordinator会自动清理已下线节点的ConfigMap,但卸载ack-koordinator后,未下线节点的ConfigMap仍会保留。这些未清理的ConfigMap不会影响您其他功能的正常使用,但会占用数据空间,建议您及时清理。

  1. 组件管理页面,定位ack-koordinator,按照页面提示完成组件的卸载。

  2. 删除拓扑信息ConfigMap。

    1. 在左侧导航栏,选择配置管理 > 配置项,然后在页面顶部,选择kube-system命名空间。

    2. 在名称文本框中搜索-numa-info,然后在下方列表,选择符合${NODENAME}-numa-info命名格式的ConfigMap,单击目标ConfigMap右侧操作列下的删除,按照页面提示完成删除。

清理CRD对象

写在ack-koordinator组件时,可能还遗留一些CRD对象。这些未清理的对象不会影响您其他功能的正常使用,但会占用数据空间。如果您后续可能需要重新安装ack-koordinator,这些对象可能会影响组件相关功能的正常使用,建议您及时清理。涉及的CRD如下。

autoscaling.alibabacloud.com

slo.koordinator.sh

image

image

费用说明

ack-koordinator组件本身的安装和使用是免费的,不过需要注意的是,在以下场景中可能产生额外的费用:

  • ack-koordinator是非托管组件,安装后将占用Worker节点资源。您可以在安装组件时配置各模块的资源申请量。

  • ack-koordinator默认会将资源画像、精细化调度等功能的监控指标以Prometheus的格式对外透出。若您配置组件时开启了ACK-Koordinator开启Prometheus监控指标选项并使用了阿里云Prometheus服务,这些指标将被视为自定义指标并产生相应费用。具体费用取决于您的集群规模和应用数量等因素。建议您在启用此功能前,仔细阅读阿里云Prometheus计费说明,了解自定义指标的免费额度和收费策略。您可以通过账单和用量查询,监控和管理您的资源使用情况。

相关内容

ack-koordinatorack-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直接升级组件。

  1. 使用kubectl或通过控制台对ack-koordinator的ConfigMap进行备份。

    kubectl

    1. 根据原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
    2. 执行vim slo-config.yaml命令编辑上述文件,将ConfigMap的字段修改为kube-system,将name字段修改为ack-slo-config,并删除ConfigMap中所有annotationslabels,避免升级时被自动覆盖。

    3. 执行以下命令,将修改后的配置提交到集群中。

      kubectl apply -f slo-config.yaml 

    控制台

    1. 记录原ConfigMap中的键值对。

      1. 在左侧导航栏中,单击配置管理 > 配置项,然后在页面顶部,选择在应用市场安装ack-koordinator时指定的命名空间(默认为kube-system)。

      2. 在名称文本框中搜索ack-slo-manager-config,依次单击目标ConfigMap名称,记录ConfigMap的键值对。

    2. 使用原ConfigMap中的键值对,创建新的ConfigMap。

      1. 在左侧导航栏中,选择配置管理 > 配置项,然后在页面顶部,选择所有命名空间

      2. 配置项页面右上角,单击创建,输入配置项名称为ack-slo-config,选择新配置的命名空间kube-system,单击+添加,输入上一步记录的键值对,单击创建

  2. 组件管理页面,升级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的迁移。

  1. 将resource-controller升级至最新版本。

    1. 登录容器服务管理控制台,在左侧导航栏选择集群

    2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 组件管理

    3. 组件管理页面,定位resource-controller,按照页面提示完成组件的升级。

  2. 安装并配置ack-koordinator

    1. 组件管理页面,定位ack-koordinator,然后在组件卡片区域,按页面提示进行安装。

    2. 安装组件ack-koordinator对话框,按需修改agentFeatureGates(Koordlet的feature-gates控制开关)并配置其他参数,然后单击确定

      1. 检查集群目前是否使用了动态修改Pod的资源参数中的CPU Limit调节功能(即通过创建CRD或Pod Annotation的形式修改了指定容器的cgroups参数文件cpu.cfs_quota_us)。若使用,请继续执行步骤ii;若未使用,请直接执行步骤c

      2. 参考如下命令,从当前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,....
      3. 参考如下示例,修改当前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性能优化策略

    3. 在页面左侧导航栏,选择应用 > Helm,查看ack-koordinator的部署状态。

      如果ack-koordinator状态已部署,表明组件已成功部署。

  3. 组件管理页面,定位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

  • registry.cn-hangzhou.aliyuncs.com/acs/koord-manager:v1.5.0-ack1.14-4225002-aliyun

  • registry.cn-hangzhou.aliyuncs.com/acs/koordlet:v1.5.0-ack1.14-4225002-aliyun

  • registry.cn-hangzhou.aliyuncs.com/acs/koord-descheduler:v1.5.0-ack1.14-4225002-aliyun

2024年09月12日

  • 优化重调度maxUnavailablePerWorkload参数的计算逻辑。

  • 修复通过cgroups动态调整Pod资源参数的功能。

  • 资源画像相关指标更名。

  • 优化内部相关接口。

2024年07月

版本号

镜像地址

变更时间

变更内容

变更影响

v1.5.0-ack1.12

  • registry.cn-hangzhou.aliyuncs.com/acs/koord-manager:v1.5.0-ack1.12-a096ae3-aliyun

  • registry.cn-hangzhou.aliyuncs.com/acs/koordlet:v1.5.0-ack1.12-a096ae3-aliyun

  • registry.cn-hangzhou.aliyuncs.com/acs/koord-descheduler:v1.5.0-ack1.12-a096ae3-aliyun

2024年07月29日

优化内部接口。

2024年01月

版本号

镜像地址

变更时间

变更内容

变更影响

v1.3.0-ack1.8

  • registry.cn-hangzhou.aliyuncs.com/acs/koord-manager:v1.3.0-ack1.8-94730e0-aliyun

  • registry.cn-hangzhou.aliyuncs.com/acs/koordlet:v1.3.0-ack1.8-94730e0-aliyun

  • registry.cn-hangzhou.aliyuncs.com/acs/koord-descheduler:v1.3.0-ack1.8-94730e0-aliyun

2024年01月24日

  • 支持在ACK灵骏集群安装。

  • 功能与v1.3.0-ack1.6版本一致。

2023年12月

版本号

镜像地址

变更时间

变更内容

变更影响

v1.3.0-ack1.7

  • registry.cn-hangzhou.aliyuncs.com/acs/koord-manager:v1.3.0-ack1.7-3500ce9-aliyun

  • registry.cn-hangzhou.aliyuncs.com/acs/koordlet:v1.3.0-ack1.7-3500ce9-aliyun

  • registry.cn-hangzhou.aliyuncs.com/acs/koord-descheduler:v1.3.0-ack1.7-3500ce9-aliyun

2023年12月21日

  • 支持在ACK Edge集群安装。

  • 仅在云端Worker节点安装,不在边缘节点安装。

  • 功能与v1.3.0-ack1.6版本一致。

2023年10月

版本号

镜像地址

变更时间

变更内容

变更影响

v1.3.0-ack1.6

  • registry.cn-hangzhou.aliyuncs.com/acs/koord-manager:v1.3.0-ack1.6-3500ce9-aliyun

  • registry.cn-hangzhou.aliyuncs.com/acs/koordlet:v1.3.0-ack1.6-3500ce9-aliyun

  • registry.cn-hangzhou.aliyuncs.com/acs/koord-descheduler:v1.3.0-ack1.6-3500ce9-aliyun

2023年10月19日

优化内部接口。

2023年06月

版本号

镜像地址

变更时间

变更内容

变更影响

v1.2.0-ack1.3

  • registry-cn-zhangjiakou.ack.aliyuncs.com/acs/koord-manager:v1.2.0-ack1.3-89a9730-aliyun

  • registry-cn-zhangjiakou.ack.aliyuncs.com/acs/koordlet:v1.2.0-ack1.3-89a9730-aliyun

  • registry-cn-zhangjiakou.ack.aliyuncs.com/acs/koord-descheduler:v1.2.0-ack1.3-89a9730-aliyun

2023年06月09日

优化内部接口。

2023年04月

版本号

镜像地址

变更时间

变更内容

变更影响

v1.2.0-ack1.2

  • registry.cn-hangzhou.aliyuncs.com/acs/koord-manager:v1.2.0-ack1.2-b675c9a8-aliyun

  • registry.cn-hangzhou.aliyuncs.com/acs/koordlet:v1.2.0-ack1.2-b675c9a8-aliyun

  • registry.cn-hangzhou.aliyuncs.com/acs/koord-descheduler:v1.2.0-ack1.2-b675c9a8-aliyun

2023年04月25日

2023年03月

版本号

镜像地址

变更时间

变更内容

变更影响

v1.1.1-ack.2

  • registry.cn-hangzhou.aliyuncs.com/acs/koord-manager:v1.1.1-ack.2

  • registry.cn-hangzhou.aliyuncs.com/acs/koordlet:v1.1.1-ack.2

  • registry.cn-hangzhou.aliyuncs.com/acs/koord-descheduler:v1.1.1-ack.2

2023年03月23日

优化内部接口。

2023年01月

版本号

镜像地址

变更时间

变更内容

变更影响

v1.1.1-ack.1

  • registry.cn-hangzhou.aliyuncs.com/acs/koord-manager:v1.1.1-ack.1

  • registry.cn-hangzhou.aliyuncs.com/acs/koordlet:v1.1.1-ack.1

2023年01月11日

  • 组件名称修改为ack-koordinator。

  • 优化内部接口。

2022年11月

版本号

镜像地址

变更时间

变更内容

变更影响

v0.8.0

  • registry.cn-hangzhou.aliyuncs.com/acs/koord-manager:v0.8.0

  • registry.cn-hangzhou.aliyuncs.com/acs/koordlet:v0.8.0

2022年11月17日

  • 负载感知调度升级,支持Kubernetes 1.22版本。

  • 优化内部相关接口。

组件升级后,若使用负载感知调度,需要将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日

  • 解决在CentOS 3内核环境下,使用拓扑感知调度时出现的CPU限流问题。

  • 支持Prometheus监控开关。

  • 支持资源画像控制台相关功能。

  • 取消应用市场的安装方式。

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日

  • 优化内部相关接口。

  • 优化启用容器CPU QoS

  • 支持关闭ack-slo-manager命名空间的自动创建。

v0.5.1

registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.5.1

2022年06月02日

  • 支持启用容器CPU QoS

  • 优化内部相关接口,自动清理已下线节点对应的拓扑信息ConfigMap。

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日

支持使用负载感知调度