Неизвестное поле Kubernetes "поведение"

Я создаю HorizontalPodAutoscaler в Kubernetes, и мне нужно настроить окно стабилизации при уменьшении масштаба, чтобы оно было меньше значения по умолчанию. Используемый код и ошибка приведены ниже:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
    name: busy-autoscaler
spec:
    behavior:
        scaleDown:
            stabilizationWindowSeconds: 10
    scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: busy-worker
    minReplicas: 1
    maxReplicas: 2
    metrics:
        - type: Resource
          resource:
              name: cpu
              target:
                  type: Utilization
                  averageUtilization: 50
$ kubectl create -f some-autoscale.yaml
error validating "some-autoscale.yaml": error validating data: ValidationError(HorizontalPodAutoscaler.spec): unknown field "behavior" in io.k8s.api.autoscaling.v2beta2.HorizontalPodAutoscalerSpec

Насколько я понимаю, behaviorполе должно поддерживаться Kubernetes 1.17, как указано в документации. Бегkubectl version дает следующий результат:

Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.1", GitCommit:"d224476cd0730baca2b6e357d144171ed74192d6", GitTreeState:"clean", BuildDate:"2020-01-14T21:04:32Z", GoVersion:"go1.13.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.0", GitCommit:"70132b0f130acc0bed193d9ba59dd186f0e634cf", GitTreeState:"clean", BuildDate:"2019-12-07T21:12:17Z", GoVersion:"go1.13.4", Compiler:"gc", Platform:"linux/amd64"}

В справочнике по API нетbehavior поле для v2beta2 что еще больше сбивает с толку.

Я запускаю Minikube 1.6.2 локально. Что я делаю не так?

4 ответа

Решение

Похоже, это был случай неправильной документации, которая была исправлена ​​вскоре после того, как я задал свой вопрос. ПР №18157 вkubernetes/websiteдобавляет следующий текст на страницу в Horizontal Pod Autoscaler.

Начиная с v1.17, окно стабилизации при уменьшении масштаба может быть установлено для каждого HPA, установив параметр behavior.scaleDown.stabilizationWindowSecondsв v2beta2 API. См. Раздел Поддержка настраиваемого масштабирования.

PR #18965 отменяет предыдущий запрос на перенос с моментаbehavior объект - это функциональность, нацеленная на 1.18, а не на 1.17.

На данный момент решение состоит в том, чтобы использовать --horizontal-pod-autoscaler-downscale-stabilization флаг в диспетчере контроллеров, как указано в ответе @ShantyMan выше, который установит значение для каждого HPA.

Версия клиента: v1.20.2 Версия сервера: v1.18.9-eks-d1db3c

Убедись kubectl api-versions и ваш кластер поддерживает автомасштабирование / v2beta2

      apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: {{ template "ks.fullname" . }}-keycloak
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: {{ template "ks.fullname" . }}-keycloak
  minReplicas: {{ .Values.keycloak.hpa.minpods }}
  maxReplicas: {{ .Values.keycloak.hpa.maxpods }}
  metrics:
  - type: Resource
    resource:
      name: memory
      target:
        type: Utilization
        averageUtilization: {{ .Values.keycloak.hpa.memory.averageUtilization }}
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: {{ .Values.keycloak.hpa.cpu.averageUtilization }}
  behavior:
    scaleDown:
      stabilizationWindowSeconds: {{ .Values.keycloak.hpa.stabilizationWindowSeconds }}
      policies:
        - type: Pods
          value: 1
          periodSeconds: {{ .Values.keycloak.hpa.periodSeconds }}

Вы неправильно прочитали документацию. Нет такого объекта, какbehavior таким образом ошибка, почему применение yamlи поэтому он отсутствует в справочнике Api.

Здесь у вас есть подробная информация об алгоритме, который используется для масштабирования.

Но я думаю, вы думаете об этой поддержке перезарядки / задержки

--horizontal-pod-autoscaler-downscale-stabilization: Значение этого параметра - это продолжительность, которая указывает, как долго автомасштабатор должен ждать, прежде чем другая операция масштабирования может быть выполнена после завершения текущей. Значение по умолчанию - 5 минут (5m0s).

Примечание. При настройке значений этих параметров оператор кластера должен знать о возможных последствиях. Если значение задержки (перезарядки) установлено слишком большим, могут возникать жалобы на то, что горизонтальный автомат масштабирования модулей не реагирует на изменения рабочей нагрузки. Однако, если значение задержки установлено слишком маленьким, масштаб набора реплик может продолжать работать как обычно.

Doc обновил его v1.18 начинает поле поведения

Поддержка настраиваемого масштабирования. Начиная с v1.18, v2beta2 API позволяет настраивать масштабируемое поведение через поле поведения HPA. Поведение указывается отдельно для масштабирования вверх и вниз в разделе scaleUp или scaleDown под полем поведения. Окно стабилизации может быть указано для обоих направлений, что предотвращает колебание количества реплик в цели масштабирования. Аналогичным образом определение политик масштабирования контролирует скорость изменения реплик при масштабировании.

Другие вопросы по тегам