ACK集群通过调整节点池的期望节点数实现节点池扩缩容,将节点数目维持在期望数量。扩容节点池功能可以保证节点数量足够支撑业务运行,缩容节省成本。扩缩容节点池均可自动化执行,提升了运维效率。
前提条件
已创建集群且集群中已有节点池,请参见创建节点池。
已通过kubectl工具连接集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
节点池扩缩容介绍
期望节点数是指节点池应该维持的节点数量,代表节点池终态的节点数。指定节点池的期望节点数后,节点池将会根据当前节点池内节点数自动触发扩容或缩容,将节点数目维持在期望数量,无需人工干预。
扩容节点池
设定期望节点数大于当前节点池的节点数时,系统将触发节点池扩容。推荐您通过增大期望节点数的方式扩容节点池。在出现弹出节点失败的情况下,系统也会自动进行重试,直至节点池现有节点数满足期望节点数。
弹出节点的配置将取决于节点池的配置,具体弹出的实例规格和可用区与节点池扩缩容策略相关。关于扩缩容策略,请参见扩缩容策略。
节点池扩容包含两个步骤。
弹出ECS实例:ACK节点池底层依赖ESS(弹性伸缩服务)弹出节点。调整期望节点数后,ACK会修改ESS伸缩组期望实例数执行扩容,节点池将显示为扩容中。ESS成功弹出ECS实例后,节点池将显示为已激活。关于期望实例数的更多信息,请参见期望实例数。
重要神龙裸金属GPU实例(ecs规格族为ebmgn7、ebmgn7e)不支持自动MIG清理,因此ACK添加该类型节点时会对已有的MIG设置进行重置。由于重置时间不定,可能会出现重置时间过长导致自动添加节点失败。
排查失败原因,请参见裸金属实例节点添加失败怎么办?。
关于ebmgn7e,请参见GPU计算型弹性裸金属服务器实例规格族ebmgn7e。
将ECS实例添加到集群:ESS弹出ECS实例后,实例将自动运行
cloud-init
脚本(由ACK维护),对节点进行初始化,并将节点加入到节点池。运行的日志将保存到节点/var/log/messages文件中。您可以登录节点执行grep cloud-init /var/log/messages
查看执行日志。说明如果节点成功加入到节点池,将会自动清除
/var/log/messages
中的日志信息,因此日志仅作为节点添加到集群失败的参考信息。如果添加节点到集群失败,
/var/log/messages
中的日志信息也将被截取关键信息到Task结果中。您可以单击目标集群,在集群任务页签查看原因。
缩容节点池
设定期望节点数小于当前节点池的节点数,系统将触发节点池的缩容并移除节点。
缩容节点时:
如果节点池扩缩容策略选择优先级策略,系统会选择最新创建的实例进行缩容。
如果节点池扩缩容策略选择均衡分布策略,系统会按照均衡发布策略筛选ECS实例的可用区,再选择最新创建的实例进行缩容,使移出ECS实例后伸缩组各可用区的ECS实例数量大致相当。
如果节点池扩缩容策略选择成本优化策略,系统缩容时会按照vCPU单价从高到低尝试移出ECS实例。
通过期望节点数缩容节点,即使节点排水失败,节点仍会被移除。若您对节点排水有强需求,请使用指定节点移除。具体操作,请参见移除节点。
缩容节点时,包年包月的ECS实例不会被释放,如果需要释放包年包月的实例,请登录ECS管理控制台,将包年包月的实例转换为按量付费的节点后再尝试释放。关于如何将包年包月实例转按量付费,请参见包年包月转按量付费
操作步骤
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在目标节点池列表的操作列,单击扩缩容。
(可选)如果您之前没有为OOS运维编排服务授权,需要进行此步骤。通过创建AliyunOOSLifecycleHook4CSRole角色,为OOS运维编排服务授权。
单击AliyunOOSLifecycleHook4CSRole。
说明如果当前账号是阿里云账号,单击AliyunOOSLifecycleHook4CSRole即可授权。
如果当前账号是RAM用户,请先确保对应的阿里云账号已授权AliyunOOSLifecycleHook4CSRole,并为RAM用户授予AliyunRAMReadOnlyAccess系统策略。具体操作,请参见为RAM用户授权。
在云资源访问授权页面,单击同意授权。
填写期望节点数,按页面提示提交配置。
在节点池列表的状态列,若显示扩容中,表明节点池正在扩容中。若显示已激活,表明扩容已完成。
重要集群扩容节点时,如果安全组拒绝访问100.64.0.0/10,会导致节点无法正常加入到集群。
在节点池列表的状态列,若显示移除节点中,表明节点池正在缩容中,若显示已激活,表明缩容已完成。
非标操作及处理建议
期望节点数是指节点池应该维持的节点数量。一些非标准操作可能会导致节点池未按照预期扩容,从而带来资产损失。常见的非标操作及对应建议如下。
不推荐您进行任何非标操作。
非标操作 | 节点池行为 | 建议 |
直接通过 | 期望节点数仅感知ESS伸缩组内ECS实例数量,不感知集群内Node数量。 通过API Server移除节点,由于ECS没有被释放,因此节点池节点数不会有任何变化。但由于节点已经移出了集群,所以节点池节点列表中的节点状态会显示为未知。 |
|
通过ECS控制台或者OpenAPI释放ECS。 | 节点池会感知到ECS的释放,并自动弹出新ECS实例,补充到期望节点数数量。 | |
通过ESS将ECS实例移除伸缩组并且不修改期望实例数。 | 节点池会感知到ECS的释放,并自动弹出新ECS实例,补充到期望节点数数量。 | 请勿直接操作节点池相关的伸缩组,以免造成节点池行为异常。 |
包年包月ECS实例到期释放。 | 节点池会感知到ECS的释放,并自动弹出新ECS实例,补充到期望节点数数量。 | |
通过弹性伸缩控制台或OpenAPI手动开启ESS伸缩组实例的健康检查。 | ESS伸缩组开启健康检查后,每当检测到存在不健康实例(如停机)时,会自动弹出新的ECS实例。 | ACK默认不开启ESS健康检查,仅在节点被释放时才会补充新的ECS实例。请勿直接操作节点池的ESS伸缩组,否则可能会造成节点池行为异常。 |
扩缩容失败错误码及解决方法
在扩缩容节点池过程中,可能会由于库存等原因造成扩缩容失败。您可以在集群列表页面单击目标集群名称,在集群任务页签查看集群任务列表,单击查看原因查看节点池扩容失败原因。
常见的扩容失败错误码如下。
错误码 | 问题原因 | 解决方法 |
RecommendEmpty.InstanceTypeNoStock | 当前可用区下ECS实例库存不足。 | 尝试通过节点池编辑功能为节点池增加不同可用区交换机(vSwitch)以及配置多种实例规格,提高节点创建成功率。 说明 在节点池页面单击目标节点池名称,在基本信息页签的伸缩组后面会提示弹性强度。您可以通过弹性强度查看您节点池的扩容成功概率。 |
NodepoolScaleFailed.FailedJoinCluster | 节点添加到ACK集群失败。 | 登录节点执行 |
InvalidAccountStatus.NotEnoughBalance | 您的账户余额不足。 | 充值后再进行操作。详细信息,请参见充值操作指引。 |
InvalidParameter.NotMatch | 错误信息 | |
QuotaExceed.ElasticQuota | 在当前地域选择的实例规格创建的ECS数量超出配额上限。 | 您可以进行如下操作。
|
InvalidResourceType.NotSupported | 您指定的ECS实例类型在当前可用区下不支持使用或者无库存。 | 通过查询实例规格查询该可用区下的实例规格是否存在,并修改节点池的实例规格。 |
InvalidImage.NotSupported | 错误信息 | |
InvalidParameter.NotMatch | 错误信息 | |
QuotaExceeded.PrivateIpAddress | 交换机下可用的私有IP地址数量不足。 | 尝试为节点池配置更多可用交换机后重试。 |
InvalidParameter.KmsNotEnabled | 您指定的KMS密钥为非启用状态。 | |
InvalidInstanceType.NotSupported | 错误信息 | |
InsufficientBalance.CreditPay | 您的账户余额不足。 | 请先充值再进行操作。详细信息,请参见充值操作指引。 |
ApiServer.InternalError | 错误信息 | 检查集群API Server是否可用或者可访问。详细信息,请参见控制台访问集群异常问题排查 。 |
RecommendEmpty.InstanceTypeNotAuthorized | 您指定的实例规格需要授权后使用。 | 请向云服务器ECS提交工单申请授权。 |
Account.Arrearage | 您的账户余额不足。 | 请先充值再进行操作。详细信息,请参见充值操作指引。 |
Err.QueryEndpoints | 访问ACK集群的API Server失败。 | 检查您的集群API Server是否可用或者可访问。详细信息,请参见控制台访问集群异常问题排查 。 |
RecommendEmpty.DiskTypeNoStock | 指定可用区下磁盘库存不足。 | 尝试增加节点池的可用区(vSwitch),或者更换磁盘类型后重试。 |
InvalidParameter.KMSKeyId.KMSUnauthorized | 没有授权无法访问密钥管理服务KMS。 | 登录ECS管理控制台为ECS配置访问KMS服务角色AliyunECSDiskEncryptDefaultRole授权。详细信息,请参见AliyunECSDiskEncryptDefaultRole。 |
InvalidParameter.Conflict | 错误信息 | 您可以尝试更换实例规格或者磁盘类型后重试。 |
NotSupportSnapshotEncrypted.DiskCategory | 系统盘加密仅支持ESSD类型云盘。 | 请更换云盘类型。关于云盘类型与加密,请参见创建节点池。 |
ScalingActivityInProgress | 当前节点池正在伸缩中,请稍后再操作。 | 为了避免伸缩活动冲突,请勿直接通过ESS进行节点扩缩容。 |
Instance.StartInstanceFailed | ECS实例启动失败。 | 请稍后尝试重新操作。排查具体原因,请向云服务器ECS提交工单。 |
OperationDenied.NoStock | 您选择的ECS实例规格在指定的可用区内库存不足。 | 您可以选择其他实例规格后重试。 弹性强度会根据实时库存量化您节点池的扩容成功概率。详细信息,请参见查看节点池弹性强度。 |
RecommendEmpty.InstanceTypeNoStock | 您选择的ECS实例规格在指定的可用区内库存不足。 | 您可以选择其他实例规格后重试。 弹性强度会根据实时库存量化您节点池的扩容成功概率。详细信息,请参见查看节点池弹性强度。 |
NodepoolScaleFailed.WaitForDesiredSizeTimeout | 扩容任务超时。 | 按照如下操作查看扩容详情。
|
ApiServer.TooManyRequests | 扩容任务被API Server限流。 | 扩容任务被API Server限流,请减少API Server请求,或稍后重试。 |
NodepoolScaleFailed.PartialSuccess | 由于库存原因,部分节点扩容成功。 | 选择其他实例规格后重试。 弹性强度会根据实时库存量化您节点池的扩容成功概率。详细信息,请参见查看节点池弹性强度。 |
相关文档
如需将集群中的节点移出集群,请参见移除节点了解具体操作及注意事项。
节点池的运维操作,例如升级节点池、节点自动恢复、修复节点池OS CVE漏洞等,请参见节点池运维。
节点池相关的最佳实践,例如基于部署集将节点分散部署在不同的物理服务器上以实现高可用、基于抢占式实例创建节点池等,请参见节点与节点池最佳实践。