繁体   English   中英

Kubernetes HPA 禁用缩减

[英]Kubernetes HPA disable scale down

根据我们产品的设计,我们希望在 HPA 中禁用缩小,可以禁用吗?

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

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

behavior:
  scaleDown:
    selectPolicy: Disabled

不,这是不可能的。

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

2) 您可以使用Horizo​​ntalPodAutoscaler 上提供的解决方法:可能限制缩小?#65097用户 'frankh'提出的问题:

我做了一个非常棘手的解决方法,我有一个每 3 分钟运行一次的 cronjob,并将 HPA 上的最小副本设置为 $currentReplicas - $downscaleLimit。 如果有人想使用它,它在这里: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

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

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

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

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

  1. 这也可能与 Horizo​​ntalPodAutoscaler 相关:是否可以限制缩小?
  2. HPA 应该有缩小/放大限制
  3. RFC:HPA 的可配置放大/缩小速度

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM