kubernetes - Kubernetes HPA禁用缩小

标签 kubernetes hpa

根据我们产品的设计,我们想禁用HPA的按比例缩小功能,是否可以将其禁用?

最佳答案

不,这是不可能的。

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

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

I've made a very hacky workaround, I have a cronjob that runs every 3 minutes, and sets the minimum replicas on an HPA to $currentReplicas - $downscaleLimit. If anyone feels like using it it's here: 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

关于kubernetes - Kubernetes HPA禁用缩小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60212727/

相关文章:

Kubernetes 指标服务器不提供所有指标或扩展 HPA

Azure Kubernetes 服务扩展和 HPA

kubernetes - 在 K3s Kubernetes 中创建 NFS 共享的链接

docker - 在裸机集群上公开 Kubernetes pod

kubernetes - Kubernetes 如何计算 HPA 的 CPU 利用率?

kubernetes - GKE - 使用自定义指标的 HPA - 无法获取指标

kubernetes - Kubernetes节点CPU利用率

docker - Kubernetes NodePort 连接被拒绝

go - 如何在 Prometheus 中显示使用 golang 客户端库从 Kubernetes 中运行的所有 pod 捕获的自定义应用程序指标

kubernetes - 如何使用 Helm 获取子图表的名称?