【问题标题】:Kubernetes HPA disable scale downKubernetes HPA 禁用缩减
【发布时间】:2020-02-13 16:41:43
【问题描述】:

根据我们产品的设计,我们希望禁用 HPA 中的缩减功能,可以禁用它吗?

【问题讨论】:

    标签: kubernetes hpa


    【解决方案1】:

    我偶然发现了这篇文章,看起来你可以禁用缩小。 The documentation 在底部包含此示例。最初提出问题时,此功能可能不可用。

    Disabled 的 selectPolicy 值关闭缩放给定的 方向。因此,为了防止缩小规模,以下政策将是 使用:

    behavior:
      scaleDown:
        selectPolicy: Disabled
    

    【讨论】:

      【解决方案2】:

      不,这是不可能的。

      1) 您可以删除 HPA 并使用所需的 pod 数量创建简单部署

      2) 您可以使用用户“frankh”在HorizontalPodAutoscaler: Possible to limit scale down?#65097 问题上提供的解决方法:

      我做了一个非常老套的解决方法,我有一个每 3 次运行的 cronjob 分钟,并将 HPA 上的最小副本设置为 $currentReplicas - $downscale 限制。如果有人想使用它,它就在这里: https://gist.github.com/frankh/050943c72273cf639886b43e98bc3caa

      apiVersion: batch/v1beta1
      kind: CronJob
      metadata:
        name: hpa-downscale-limiter
        namespace: kube-system
      spec:
        schedule: "*/3 * * * *"
        concurrencyPolicy: Forbid
        jobTemplate:
          spec:
            template:
              spec:
                serviceAccountName: hpa-downscale-limiter
                containers:
                - name: kubectl
                  image: frankh/k8s-kubectl:1.10.3
                  command: ["/bin/bash", "-c"]
                  args:
                  - |
                    set -xeuo pipefail
                    namespaces=$(kubectl get hpa --no-headers --all-namespaces | cut -d' ' -f1 | uniq)
                    for namespace in $namespaces; do
                      hpas=$(kubectl get hpa --namespace=$namespace --no-headers | cut -d' ' -f1)
                      for hpa in $hpas; do
                        echo "$(kubectl get hpa --namespace=$namespace $hpa -o jsonpath="{.spec.minReplicas} {.status.desiredReplicas} {.metadata.annotations.originalMinimum} {.metadata.annotations.downscaleLimit}")" > tmpfile
                        read -r minReplicas desiredReplicas originalMinimum downscaleLimit < tmpfile
      
                        if [ -z "$originalMinimum" ]; then
                          kubectl annotate hpa --namespace=$namespace $hpa originalMinimum="$minReplicas"
                          originalMinimum=$minReplicas
                        fi
      
                        if [ -z "$downscaleLimit" ]; then
                          downscaleLimit=1
                        fi
                        target=$(( $desiredReplicas - $downscaleLimit ))
                        target=$(( $target > $originalMinimum ? $target : $originalMinimum ))
      
                        if [ "$minReplicas" -ne "$target" ]; then
                          kubectl patch hpa --namespace=$namespace $hpa --patch="{\"spec\": {\"minReplicas\": "$target"}}"
                        fi
                      done
                    done
                restartPolicy: OnFailure
      ---
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: hpa-downscale-limiter
        namespace: kube-system
      ---
      apiVersion: rbac.authorization.k8s.io/v1beta1
      kind: ClusterRoleBinding
      metadata:
        name: hpa-downscale-limiter-admin
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: cluster-admin
      subjects:
        - name: hpa-downscale-limiter
          kind: ServiceAccount
          namespace: kube-system
      

      【讨论】:

      【解决方案3】:

      Horizo​​ntal Pod Autoscaler 根据观察到的 CPU 利用率自动扩展复制控制器、部署、副本集或有状态集中的 pod 数量(或者,通过 beta 支持,您还可以使用应用程序提供的指标)。从最基本的角度来看,Horizo​​ntal Pod Autoscaler 控制器根据期望的度量值和当前度量值之间的比率进行操作:

      desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]
      

      如果在 Horizo​​ntalPodAutoscaler 中指定了多个指标,则会针对每个指标进行此计算,然后选择所需副本数中最大的一个。但是,在记录规模推荐之前。控制器考虑可配置窗口内的所有推荐,从该窗口中选择最高推荐。可以使用--horizontal-pod-autoscaler-downscale-stabilization 标志配置此值,默认为 5 分钟。这意味着缩减将逐渐发生,从而消除快速波动的指标值的影响。

      根据我的解释,这意味着不,你不能。但是对于尖峰流量,您仍然可以使用:--horizontal-pod-autoscaler-downscale-stabilization 标志。

      1. This also may be related to HorizontalPodAutoscaler: Possible to limit scale down?
      2. HPA should have scale down/up limits
      3. RFC: Configurable scale up/down speed for HPA

      【讨论】:

        猜你喜欢
        • 2020-04-16
        • 2020-03-07
        • 1970-01-01
        • 1970-01-01
        • 2020-10-13
        • 2020-02-20
        • 2021-01-26
        • 2022-01-21
        • 1970-01-01
        相关资源
        最近更新 更多