Неизвестное поле 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 под полем поведения. Окно стабилизации может быть указано для обоих направлений, что предотвращает колебание количества реплик в цели масштабирования. Аналогичным образом определение политик масштабирования контролирует скорость изменения реплик при масштабировании.