ack-koordinator是ACK支持差异化SLO(Service Level Objectives)能力的核心应用,在保证应用服务质量的同时,充分提升资源使用效率。本文介绍ack-koordinator组件的信息、使用说明和变更记录。

前提条件

组件介绍

发展历程

ack-koordinator与开源项目Koordinator紧密相关。Koordinator是一个基于QoS的Kubernetes混合工作负载调度系统,源自阿里巴巴在差异化SLO调度领域多年累积的经验,旨在提高对延迟敏感的工作负载和批处理作业的运行时效率和可靠性,简化与资源相关的配置调整的复杂性,并增加Pod部署密度以提高资源利用率。

ack-koordinator组件的前身是ack-slo-manager,一方面ack-slo-manager为Koordinator开源社区的孵化提供了宝贵的经验,另一方面随着Koordinator逐渐成熟稳定,技术上对ack-slo-manager实现了反哺。因此,ack-koordinator提供两类功能,一是Koordinator开源版本已经支持的功能,二是原ack-slo-manager提供的一系列差异化SLO能力。

组件架构

ack-koordinator由中心侧组件和单机侧组件两大部分组成,各模块功能描述如下。

  • Koordinator Manager:以Deployment的形式部署的中心组件,由主备两个实例组成,以保证组件的高可用。
    • SLO Controller:用于资源超卖管理,根据节点混部时的运行状态,动态调整集群的超卖资源量,同时为管理各节点的差异化SLO策略。
    • Recommender:提供资源画像功能,预估工作负载的峰值资源需求,简化您的配置容器资源规格的复杂度。
  • Koordinator Descheduler:以Deployment的形式部署的中心组件,提供重调度功能。
  • Koordlet:以DaemonSet的形式部署的单机组件,用于支持混部场景下的资源超卖、单机精细化调度,以及容器QoS保证等。
 ack-koord-arch

版本管理

ack-koordinator自v1.1.1-ack.1版本起,版本号格式变更为x.y.z-ack.n
  • x.y.z:对应Koordinator开源版本,表示ack-koordinator已支持对应开源版本的所有功能。
  • ack.n:记录ack-koordinator在此开源版本基础上的功能增强和优化。

功能简介

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

类型功能文档与Koordinator开源版本一致
CPU调度CPU拓扑感知调度
CPU Burst性能优化策略
负载感知调度负载感知调度
热点打散重调度
精细化调度资源画像
动态资源超卖
弹性资源限制
容器CPU QoS
容器内存QoS
容器L3 Cache及内存带宽隔离
动态修改Pod资源参数

此外,原resource-controller的所有功能已经由ack-koordinator完成适配,resource-controller已于日前下线。若您正在使用resource-controller,请将resource-controller迁移至ack-koordinator。具体操作,请参见从resource-controller迁移至ack-koordinator

组件管理

ack-koordinator已在容器服务管理控制台组件管理页面上架,您可以在组件管理页面对ack-koordinator进行安装、升级、卸载等操作。若您正在使用的版本是通过应用市场部署(即版本低于v0.7),请参见将ack-koordinator从应用市场迁移至组件中心完成迁移。

安装ack-koordinator

  1. 登录容器服务管理控制台,在左侧导航栏选择集群
  2. 集群列表页面的目标集群右侧,单击操作列下更多 > 组件管理
  3. 组件管理页面,搜索并单击ack-koordinator,然后在ack-koordinator卡片中单击安装
  4. 安装组件ack-koordinator对话框,按需修改配置参数,单击确定
  5. 在集群管理页左侧导航栏,选择应用 > Helm,查看ack-koordinator的部署状态。
    当ack-koordinator的状态已部署,说明部署成功。

修改ack-koordinator

  1. 组件管理页面的ack-koordinator卡片中,单击配置
  2. ack-koordinator参数配置对话框,按需修改配置参数,然后单击确定
    系统会按新配置自动重新部署ack-koordinator。

升级ack-koordinator

  1. 组件管理页面的ack-koordinator卡片中,单击升级
  2. ack-koordinator参数配置对话框,按需修改配置参数,然后单击确定
    重要
    • 当已安装的组件版本不是最新版本时,才会显示升级操作。
    • 通过其他方式对ack-koordinator已部署模块(Deployment、DaemonSet)所做的修改,在组件升级后将被覆盖。

卸载ack-koordinator

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右侧操作列下的删除
    3. 确认删除对话框中,单击确定

组件迁移

将ack-koordinator从应用市场迁移至组件中心

若您修改过应用市场中ack-koordinator的ConfigMap,请先备份再升级;若未修改,请直接升级。

  1. 可选:使用以下任一方式对ack-koordinator的ConfigMap进行备份。
    • 方式一:通过命令行使用kubectl的方式备份
      1. 根据原ConfigMap配置的命名空间(例如kube-system)和名称(例如ack-slo-manager-config),执行kubectl get cm -n kube-system ack-slo-manager-config -o yaml > slo-config.yaml命令,将原配置保存在名称为slo-config.yaml的文件中。
      2. 执行vim slo-config.yaml命令编辑上述文件,将ConfigMap的namespace字段修改为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
    重要 若您修改过应用市场中ack-koordinator的ConfigMap,则需要在ack-koordinator参数配置对话框中,将步骤1备份的ConfigMap的名称(例如ack-slo-config)填入到对应的配置项中。

从resource-controller迁移至ack-koordinator

ack-koordinator支持原resource-controller的所有功能。若您的集群已安装resource-controller,请参考以下步骤完成从resource-controller到ack-koordinator的迁移。

  1. 将resource-controller升级至最新版本。
    1. 登录容器服务管理控制台,在左侧导航栏选择集群
    2. 集群列表页面的目标集群右侧,单击操作列下更多 > 组件管理
    3. 组件管理页面,搜索并单击resource-controller,然后在resource-controller卡片中,单击升级
    4. 在弹出的升级对话框中,单击确定
  2. 安装并配置ack-koordinator。
    1. 组件管理页面,搜索并单击ack-koordinator,然后在ack-koordinator卡片中,单击安装
    2. 安装组件ack-koordinator对话框,按需修改agentFeatureGates(ack-slo-agent的feature-gates控制开关)。
      1. 检查集群目前是否使用了动态修改Pod资源参数中的CPU Limit调节功能(即通过创建CRD或Pod Annotation的形式修改指定容器Cgroup参数文件cpu.cfs_quota_us)。若使用,请继续执行步骤ii;若未使用,请执行步骤c
      2. 参考如下命令,从当前ack-slo-agent的对应的DaemonSet YAML中获取当前feature-gate配置。
        kubectl get daemonset -n kube-system ack-slo-agent -o yaml |grep feature-gates
        - --feature-gates=AllAlpha=false,AllBeta=false,...,CPUBurst=true,....
      3. 参考如下示例,修改当前ack-slo-agent的feature-gate配置,关闭CPU策略模块,即设置CPUBurst=false(参数之间使用英文半角逗号(,)分隔),其他保持不变。

        关闭后集群内所有容器的CPU Burst机制将不会生效,以此避免两个模块同时修改容器的Cgroup参数文件cpu.cfs_quota_us

        AllAlpha=false,AllBeta=false,...,CPUBurst=false,....
      4. 对于容器的CPU资源弹性能力,强烈建议您使用CPU Burst性能优化策略功能,可以自动调整Pod的CPU资源弹性。更多信息,请参见CPU Burst性能优化策略
    3. 按需配置其他参数,然后单击确定
    4. 在集群管理页左侧导航栏中,选择应用 > Helm,查看ack-koordinator的部署状态。
      当ack-koordinator的状态已部署,说明部署成功。
  3. 卸载resource-controller。
    1. 组件管理页面,搜索并单击resource-controller,然后在resource-controller卡片中,单击卸载
    2. 卸载组件对话框中,单击确定

FAQ

组件安装时报错: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,请参见【组件升级】Helm V2 Tiller升级公告

变更记录

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.2registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.7.22022年09月16日修复0.7.1版本引入的问题:拓扑感知调度对Pod不生效。
v0.7.1registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.7.12022年09月02日
  • 解决在CentOS 3内核环境下,使用拓扑感知调度时出现的CPU限流问题。
  • 支持Prometheus监控开关。
  • 支持资源画像控制台相关功能。
  • 取消应用市场的安装方式。

2022年08月

版本号镜像地址变更时间变更内容变更影响
v0.7.0registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.7.02022年08月08日ack-slo-manager安装方式从应用市场迁移至组件管理。

2022年07月

版本号镜像地址变更时间变更内容变更影响
v0.6.0registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.6.02022年07月26日优化内部相关接口,简化组件配置。

2022年06月

版本号镜像地址变更时间变更内容变更影响
v0.5.2registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.5.22022年06月14日
  • 优化内部相关接口。
  • 优化容器CPU QoS
  • 支持关闭ack-slo-manager命名空间的自动创建。
v0.5.1registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.5.12022年06月02日
  • 支持容器CPU QoS
  • 优化内部相关接口,自动清理已下线节点对应的拓扑信息ConfigMap。

2022年04月

版本号镜像地址变更时间变更内容变更影响
v0.5.0registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.5.02022年04月29日
v0.4.1registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.4.12022年04月14日
v0.4.0registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.4.02022年04月11日优化slo-agent内存开销。

2022年02月

版本号镜像地址变更时间变更内容变更影响
v0.3.0registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.3.02022年02月25日

2021年12月

版本号镜像地址变更时间变更内容变更影响
v0.2.0registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.2.02021年12月10日

2021年09月

版本号镜像地址变更时间变更内容变更影响
v0.1.1registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.1.1-c2ccefa2021年09月02日优化内部相关接口。

2021年07月

版本号镜像地址变更时间变更内容变更影响
v0.1.0registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.1.0-09766de2021年07月08日支持使用负载感知调度