Kubernetes HPA отключить масштабирование - PullRequest
1 голос
/ 13 февраля 2020

В соответствии с дизайном нашего продукта мы хотели бы отключить масштабирование в HPA, его можно отключить?

Ответы [ 2 ]

2 голосов
/ 13 февраля 2020

НЕТ, это невозможно.

1) вы можете удалить HPA и создать простое развертывание с желаемым количеством модулей

2) вы можете использовать обходной путь, предоставленный на HorizontalPodAutoscaler: возможно ограничить масштабирование? # 65097 проблема от пользователя 'frankh':

Я сделал очень хакерский обходной путь, у меня есть cronjob, который запускается каждые 3 минуты и устанавливает минимальные реплики на 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
1 голос
/ 13 февраля 2020

Horizontal Pod Autoscaler автоматически масштабирует количество модулей в контроллере репликации, развертывании, наборе реплик или наборе с сохранением состояния на основе наблюдаемой загрузки ЦП (или, при поддержке бета-версии, вы также можете использовать метрики, предоставляемые приложением). С точки зрения основы c контроллер горизонтального стручка Auto Scaler работает с соотношением между желаемым значением metri c и текущим значением metri c:

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

Если в HorizontalPodAutoscaler указано несколько показателей , этот расчет выполняется для каждого показателя c, а затем выбирается наибольшее из желаемых подсчетов реплик. Тем не менее, перед записью рекомендации по шкале. Контроллер учитывает все рекомендации в настраиваемом окне, выбирая самую высокую рекомендацию из этого окна. Это значение можно настроить с помощью флага --horizontal-pod-autoscaler-downscale-stabilization, который по умолчанию равен 5 минутам. Это означает, что масштабирование будет происходить постепенно, сглаживая влияние быстро меняющихся значений метри c.

На основании того, что я объяснил, это означает, что нет, вы не можете. Однако для колючих траффиков c вы все равно можете использовать: --horizontal-pod-autoscaler-downscale-stabilization флаг.

  1. Это также может быть связано с HorizontalPodAutoscaler: возможно ограничить масштабирование?
  2. HPA должен иметь ограничения на уменьшение / увеличение
  3. RF C: настраиваемая скорость увеличения / уменьшения масштаба для HPA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...