ack-koordinator是ACK支持差异化SLO(Service Level Objectives)能力的核心应用,在保证应用服务质量的同时,充分提升资源使用效率。本文介绍ack-koordinator组件的信息、使用说明和变更记录。
前提条件
Helm版本为3.0及以上。如需升级,请参见【组件升级】Helm V2 Tiller升级公告和如何手动升级Helm的版本?。
组件介绍
发展历程
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 Serverless集群中,ack-koordinator只包括Koordinator Manager组件,并提供资源画像功能。
版本管理
ack-koordinator自v1.1.1-ack.1版本起,版本号格式变更为x.y.z-ackn
。
x.y.z
:对应Koordinator开源版本,表示ack-koordinator已支持对应开源版本的所有功能。ackn
:记录ack-koordinator在此开源版本基础上的功能增强和优化。
功能简介
ack-koordinator组件的各模块涵盖对应Koordinator开源版本支持的功能,安装配置中,仅默认开启常用功能的feature-gate。Koordinator开源版本的其他功能,需在开启ack-koordinator对应模块的feature-gate后使用。关于Koordinator开源版本的其他功能,请参见Koordinator官网文档。
类型 | 功能文档 | 与Koordinator开源版本一致 |
CPU调度 | 否 | |
是 | ||
负载感知调度 | 是 | |
是 | ||
精细化调度 | 否 | |
是 | ||
是 | ||
是 | ||
是 | ||
是 | ||
否 | ||
否 | ||
否 |
此外,原resource-controller的所有功能已经由ack-koordinator完成适配,resource-controller已下线。若您正在使用resource-controller,请将resource-controller迁移至ack-koordinator。具体操作,请参见从resource-controller迁移至ack-koordinator。
费用说明
ack-koordinator组件本身的安装和使用是免费的,不过需要注意的是,在以下场景中可能产生额外的费用:
ack-koordinator是非托管组件,安装后将占用Worker节点资源。您可以在安装组件时配置各模块的资源申请量。
ack-koordinator默认会将资源画像、精细化调度等功能的监控指标以Prometheus的格式对外透出。若您配置组件时开启了ACK-Koordinator开启Prometheus监控指标选项并使用了阿里云Prometheus服务,这些指标将被视为自定义指标并产生相应费用。具体费用取决于您的集群规模和应用数量等因素。建议您在启用此功能前,仔细阅读阿里云Prometheus计费说明,了解自定义指标的免费额度和收费策略。您可以通过账单和用量查询,监控和管理您的资源使用情况。
组件管理
ack-koordinator已在容器服务管理控制台的组件管理页面上架,您可以在组件管理页面对ack-koordinator进行安装、升级、卸载等操作。若您正在使用的版本是通过应用市场部署(即版本低于v0.7),请参见将ack-koordinator从应用市场迁移至组件中心完成迁移。
安装ack-koordinator
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面的目标集群右侧,单击操作列下 。
在组件管理页面,搜索并单击ack-koordinator,然后在ack-koordinator卡片中单击安装。
在安装组件ack-koordinator对话框,按需修改配置参数,单击确定。
在集群管理页左侧导航栏,选择ack-koordinator的部署状态。 ,查看
如果ack-koordinator的状态为已部署,表明组件已部署成功。
修改ack-koordinator参数配置
在组件管理页面的ack-koordinator卡片中,单击配置。
在ack-koordinator参数配置对话框,按需修改配置参数,然后单击确定。
系统会按新配置自动重新部署ack-koordinator。
升级ack-koordinator
在组件管理页面的ack-koordinator卡片中,单击升级。
在ack-koordinator参数配置对话框,按需修改配置参数,然后单击确定。
重要当已安装的组件版本不是最新版本时,才会显示升级操作。
通过其他方式对ack-koordinator已部署模块(Deployment、DaemonSet)所做的修改,在组件升级后将被覆盖。
卸载ack-koordinator
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右侧操作列下的删除,按照页面提示完成删除。
组件迁移
将ack-koordinator从应用市场迁移至组件中心
若您修改过应用市场中ack-koordinator的ConfigMap,请先备份再升级;若未修改,请直接升级。
可选:使用以下任一方式对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。
重要若您修改过应用市场中ack-koordinator的ConfigMap,则需要在ack-koordinator参数配置对话框中,将步骤1备份的ConfigMap的名称(例如ack-slo-config)填入到对应的配置项中。
从resource-controller迁移至ack-koordinator
ack-koordinator支持原resource-controller的所有功能。若您的集群已安装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的形式修改了指定容器Cgroup参数文件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机制将不会生效,以此避免两个模块同时修改容器的Cgroup参数文件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,请参见【组件升级】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日 | 支持使用负载感知调度。 | 无 |