首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kubernetes HPA禁用缩放

Kubernetes HPA禁用缩放
EN

Stack Overflow用户
提问于 2020-02-13 16:41:43
回答 3查看 3.1K关注 0票数 4

根据我们产品的设计,我们想禁用HPA的比例,它能被禁用吗?

EN

回答 3

Stack Overflow用户

发布于 2020-10-07 16:15:10

我偶然发现了这篇文章,看起来你可以禁用刻度。文献资料在底部包含了这个示例。当最初提出问题时,这个特性可能是不可用的。

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

代码语言:javascript
复制
behavior:
  scaleDown:
    selectPolicy: Disabled
票数 6
EN

Stack Overflow用户

发布于 2020-02-13 17:00:50

不,这不可能。

1)您可以删除HPA并使用所需的num来创建简单的部署。

2)您可以使用用户“坦率”在HorizontalPodAutoscaler:有可能限制规模down?#65097问题上提供的解决方案:

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

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2020-02-13 18:12:30

水平Pod自动分频器根据观察到的CPU利用率自动缩放复制控制器、部署、复制集或有状态集中的荚数(或者,有了beta支持,您也可以使用应用程序提供的度量标准)。从最基本的角度来看,水平Pod自动分频器控制器的工作原理是期望的度量值与当前的度量值之间的比率:

代码语言:javascript
复制
desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]

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

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

  1. 这也可能与HorizontalPodAutoscaler有关:有可能限制规模缩小吗?
  2. HPA应该有缩小/上升的限制。
  3. RFC:可配置的HPA升降速度
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60212727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档