根据我们产品的设计,我们想禁用HPA中的缩小,可以禁用吗?
我偶然发现了这篇文章,看起来你可以禁用缩小。 文档在底部包含此示例。 最初提出问题时,此功能可能不可用。
"已禁用"的选择策略值关闭缩放给定 方向。因此,为了防止缩小规模,以下策略将是 使用:
behavior:
scaleDown:
selectPolicy: Disabled
不,这是不可能的。
1( 您可以删除 HPA 并使用所需的 Pod 数创建简单部署
2( 您可以使用 HorizontalPodAutoscaler 上提供的解决方法:是否可以限制缩减?#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
水平 Pod 自动缩放程序会根据观察到的 CPU 利用率自动缩放复制控制器、部署、副本集或有状态集中的 Pod 数量(或者,通过测试版支持,您还可以使用应用程序提供的指标(。从最基本的角度来看,水平容器自动缩放器控制器根据所需指标值与当前指标值之间的比率进行操作:
desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]
如果在 HorizontalPodAutoscaler 中指定了多个指标,则会针对每个指标执行此计算,然后选择所需的最大副本计数。但是,在记录规模建议之前。控制器考虑可配置窗口中的所有建议,从该窗口中选择最高建议。可以使用--horizontal-pod-autoscaler-downscale-stabilization
标志配置此值,该标志默认为 5 分钟。这意味着缩减将逐渐发生,从而消除快速波动的指标值的影响。
根据我的解释,这意味着不,你不能。但是,对于峰值流量,您仍然可以使用:--horizontal-pod-autoscaler-downscale-stabilization
标志。
- 这也可能与HorizontalPodAutoscaler有关:可以限制缩减吗?
- HPA 应具有缩小/增加的扩展限制
- RFC:可配置的 HPA 扩展/缩减速度