如何临时禁用基于STS的应用的HPA且不删除它?
临时禁用HPA的可行方案(无需删除)
以下几种方法可以在不删除HPA的前提下临时禁用自动扩缩容,且后续可轻松恢复:
方法1:固定HPA的副本数范围
将HPA的minReplicas和maxReplicas设置为当前STS运行的实际副本数,让HPA没有扩缩容的空间,直接禁用自动调节逻辑。
- 先获取当前STS的副本数:
kubectl get sts <你的STS名称> -o jsonpath='{.spec.replicas}'
- 假设当前副本数为3,执行patch命令修改HPA:
kubectl patch hpa <你的HPA名称> -p '{"spec":{"minReplicas":3,"maxReplicas":3}}'
- 恢复时,改回原有的副本数范围即可(示例为min=1,max=5):
kubectl patch hpa <你的HPA名称> -p '{"spec":{"minReplicas":1,"maxReplicas":5}}'
方法2:调整触发阈值至无法达到的范围
修改HPA的资源使用率阈值,让自动扩缩容的触发条件永远无法满足。
- 若HPA基于CPU使用率,将阈值调至极高:
kubectl patch hpa <你的HPA名称> -p '{"spec":{"metrics":[{"resource":{"name":"cpu","target":{"averageUtilization":1000}},"type":"Resource"}]}}'
- 若HPA基于内存使用率,同理调至极高:
kubectl patch hpa <你的HPA名称> -p '{"spec":{"metrics":[{"resource":{"name":"memory","target":{"averageUtilization":2000}},"type":"Resource"}]}}'
- 恢复时,改回原阈值即可(示例为CPU使用率70%):
kubectl patch hpa <你的HPA名称> -p '{"spec":{"metrics":[{"resource":{"name":"cpu","target":{"averageUtilization":70}},"type":"Resource"}]}}'
方法3:通过注解禁用扩缩容
部分Kubernetes版本支持使用注解直接暂停HPA的扩缩操作:
- 禁用缩容:
kubectl annotate hpa <你的HPA名称> autoscaling.kubernetes.io/scale-down-disabled=true
- 禁用扩容:
kubectl annotate hpa <你的HPA名称> autoscaling.kubernetes.io/scale-up-disabled=true
- 同时禁用扩缩容:
kubectl annotate hpa <你的HPA名称> autoscaling.kubernetes.io/scale-down-disabled=true autoscaling.kubernetes.io/scale-up-disabled=true
- 恢复时,删除对应注解:
kubectl annotate hpa <你的HPA名称> autoscaling.kubernetes.io/scale-down-disabled- autoscaling.kubernetes.io/scale-up-disabled-
注意事项
如果你的STS通过Operator或GitOps工具自动同步HPA配置,需确认修改后的配置不会被STS覆盖。这种情况下优先选择方法1或方法3,注解通常不会被基础STS资源管理逻辑覆盖。
内容的提问来源于stack exchange,提问作者beingumang
相关产品推荐
相关产品推荐

