如何防止 Kubernetes 水平自动扩缩器缩容?

Posted

技术标签:

【中文标题】如何防止 Kubernetes 水平自动扩缩器缩容?【英文标题】:How to prevent Kubernetes horizontal auto-scaler from scaling down? 【发布时间】:2019-11-16 02:49:39 【问题描述】:

我创建了一个基于 cpu 使用情况的水平自动缩放器,它工作正常。我想知道如何配置自动缩放器,使其只放大而不缩小?我想要这样的事情的原因是,当我有高负载/请求时,我创建了一些操作符,但我想让它们保持活力,即使在一段时间内它们不做任何事情,但自动缩放器会杀死 pod 并缩小到如果没有负载,则在某个时间后的最小副本数。

我的自动缩放器:

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: gateway
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: gateway
  minReplicas: 1
  maxReplicas: 10
  targetCPUUtilizationPercentage: 20

编辑: 操作员是指在 pod 中运行的小型应用程序/程序。

【问题讨论】:

运营商是什么意思?它是为有状态容器执行后处理步骤的框架吗? 您为什么不简单地将 pod 的最小数量锁定在您希望拥有的值?如果您的 targetCpu 为 20,您可能会遇到另一个问题......您可能希望使用另一个值作为放大目标...... 我编辑了我的问题并添加了我所说的操作员的意思。 @night-gold 我不想保留资源,我只想在需要时进行扩展,但我想让那些在扩展 pod 中运行的小程序保持活力,以防我再次需要它们,比如 10-20分钟。我发现了这些标志:--horizontal-pod-autoscaler-downscale-stabilization--horizontal-pod-autoscaler-downscale-delay,我认为它们有助于解决我的问题。那 20 只用于测试和基准测试,而不是用于生产。 【参考方案1】:

您可以按照in docs 的描述将--horizontal-pod-autoscaler-downscale-stabilization 标志添加到kube-controller-manager。默认延迟设置为 5 分钟。

在 master 节点上添加标志到 kube-controller-manager edit /etc/kubernetes/manifests/kube-controller-manager.yaml,pod 将被重新创建。

【讨论】:

以上是关于如何防止 Kubernetes 水平自动扩缩器缩容?的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes HPA 动态弹性扩缩容

kubernetes 中如何实现 Pod 自动扩缩容

3个自动伸缩机制,帮你降低Kubernetes的成本

在 Google Cloud 上的何处配置 Kubernetes 集群自动扩缩器?

Kubernetes 高阶玩法-自动扩缩容

Kubernetes 高阶玩法-自动扩缩容