如何在业务非活动时间内让集群自动扩缩容器组忽略 ASG?

100次阅读
没有评论

问题描述

在处理集群自动扩缩容(Cluster Autoscaler)与在业务非活动时间内被外部缩减至最小目标0的自动扩缩组(ASG)时,需要一些建议。用户希望在集群自动扩缩器在业务活动时间内与特定的ASG一起工作,但在业务非活动时间内,由于成本节约的目的,有一些自动化会将ASG缩减至0。然而问题在于,集群自动扩缩器在恢复业务活动时间后,会将节点数恢复到其配置中的值,而用户希望在这个过程中不影响ASG的状态。用户希望在不进行helm升级的情况下,有其他方法来设置集群自动扩缩器在业务非活动时间内不操作ASG。

解决方案

以下解决方案提供了使用kubectl annotate命令和标签注释的方式来实现自动扩缩器在特定时间内忽略ASG,同时也提到了一种更改自动扩缩器配置的方法。请在操作前备份相关配置,确保不会造成不可逆的影响。

方案1:使用标签注释忽略特定ASG

你可以使用 kubectl annotate 命令为自动扩缩器的相关资源添加标签注释,以便在特定时间内忽略ASG。以下是操作步骤:
1. 使用以下命令为目标自动扩缩器资源添加标签注释,以便在特定时间范围内使其忽略ASG。在这个示例中,我们将使用non-scaling-time=true标签注释。

bash
kubectl annotate deployment <deployment-name> non-scaling-time=true

请将<deployment-name>替换为您实际的自动扩缩器资源名称。

  1. 创建一个用于自动扩缩的Shell脚本,以在业务非活动时间内自动添加和移除标签注释。以下是一个示例脚本:

“`bash
#!/bin/bash
# 获取当前时间的小时
current_hour=$(date +%H)

# 判断是否在业务非活动时间范围内(例如晚上10点到早上6点)
if [[ $current_hour -ge 22 || $current_hour -lt 6 ]]; then
kubectl annotate deployment non-scaling-time=true –overwrite
else
kubectl annotate deployment non-scaling-time-
fi
“`

请根据您的业务非活动时间范围和资源名称进行适当的调整。

方案2:重新加载配置以忽略ASG

如果您需要更改自动扩缩器的配置,而不想使用helm upgrade,您可以使用以下方法重新加载配置:
1. 编辑自动扩缩器的配置文件,进行所需的更改。
2. 使用以下命令重新加载自动扩缩器的配置:

bash
kubectl apply -f <config-file>

请将<config-file>替换为您的自动扩缩器配置文件的路径。

请注意,无论使用哪种方法,都需要确保您的自动扩缩器资源在业务活动时间内以及业务非活动时间内的表现都符合预期。如果使用标签注释的方法,也请注意您的自动扩缩器是否正确地忽略了ASG。

总结

通过使用kubectl annotate命令为自动扩缩器资源添加标签注释,您可以实现在特定时间范围内忽略ASG,从而实现您的需求。此外,您还可以重新加载自动扩缩器的配置来应用更改。请根据您的实际情况选择合适的方法来实现自动扩缩器与ASG的协同工作。

正文完