В этом документе представлен пошаговый гид по настройке автоматического масштабирования вверх и вниз для сервисов вывода. С помощью этих настроек вы сможете оптимизировать использование ресурсов, обеспечить доступность сервиса при высокой нагрузке и освободить ресурсы при низкой нагрузке.
О Автомасштабировщике
Knative Serving поддерживает два автомасштабировщика: Knative Pod Autoscaler (KPA) и Kubernetes' Horizontal Pod Autoscaler (HPA). По умолчанию наши сервисы используют Knative Pod Autoscaler (KPA).
KPA разработан для serverless-нагрузок и может быстро масштабироваться вверх на основе количества одновременных запросов или RPS (запросов в секунду), а также может масштабировать сервисы до нуля реплик для экономии затрат. HPA более универсален и обычно масштабируется на основе метрик, таких как использование CPU или памяти. В этом руководстве основное внимание уделяется настройке сервисов через Knative Pod Autoscaler (KPA).
В этом разделе описывается, как настроить сервисы вывода для автоматического масштабирования вниз до нуля реплик при отсутствии трафика или для поддержания минимального количества реплик.
Вы можете настроить, разрешать ли сервису вывода масштабироваться до нуля реплик при отсутствии трафика. По умолчанию это значение true, что позволяет масштабироваться до нуля.
Использование параметров ресурса InferenceService
В поле spec.predictor объекта InferenceService установите параметр minReplicas.
minReplicas: 0: Разрешает масштабирование до нуля реплик.
minReplicas: 1: Отключает масштабирование до нуля реплик, поддерживая минимум одну реплику.
После отключения функции масштабирования до нуля на уровне платформы конфигурация minReplicas: 0 для всех сервисов будет игнорироваться.
Вы можете изменить глобальный ConfigMap, чтобы отключить функцию масштабирования до нуля на платформе. Эта конфигурация имеет высший приоритет и переопределит настройки во всех отдельных ресурсах InferenceService.
В ConfigMap config-autoscaler в пространстве имён knative-serving измените значение enable-scale-to-zero на "false"
Эта настройка определяет минимальное время, в течение которого последний Pod остаётся активным после того, как автомасштабировщик решил масштабироваться до нуля. Это помогает сервису быстро реагировать при возобновлении трафика. Значение по умолчанию — 0s
Вы можете настроить это для отдельного сервиса или изменить глобальный ConfigMap, чтобы сделать настройку эффективной для всех сервисов.
Метод 1: Использование аннотаций InferenceService
В spec.predictor.annotations объекта InferenceService добавьте аннотацию autoscaling.knative.dev/scale-to-zero-pod-retention-period.
Метод 2: Использование глобального ConfigMap
В ConfigMap config-autoscaler в пространстве имён knative-serving измените значение scale-to-zero-pod-retention-period на строку с длительностью неотрицательного значения, например "1m5s".
Эта настройка добавляет задержку перед удалением последней реплики после прекращения трафика, обеспечивая готовность activator/маршрутизатора и предотвращая потерю запросов во время перехода к нулю.
Это значение следует изменять только в случае потери запросов из-за масштабирования сервисов до нуля. Оно не влияет на время удержания последней реплики после отсутствия трафика и не гарантирует сохранение реплики в этот период.
Метод: Использование глобального ConfigMap
В ConfigMap config-autoscaler в пространстве имён knative-serving измените значение scale-to-zero-grace-period на строку с длительностью, например "40s".
В этом разделе описывается, как настроить сервис вывода для автоматического масштабирования вверх в ответ на увеличение трафика.
Одновременность определяет количество запросов, которые каждая реплика приложения может обрабатывать одновременно. Вы можете задать одновременность с мягким или жёстким лимитом.
100.0, что означает отсутствие ограничения.Если указаны оба лимита — мягкий и жёсткий, будет использоваться меньшее из двух значений. Это предотвращает установку автомасштабировщиком целевого значения, не допускаемого жёстким лимитом.
Вы можете настроить это для отдельного сервиса или изменить глобальный ConfigMap, чтобы сделать настройку эффективной для всех сервисов.
Метод 1: Использование параметров ресурса InferenceService
Мягкий лимит: В spec.predictor установите scaleTarget и scaleMetric в concurrency.
Жёсткий лимит: В spec.predictor установите containerConcurrency.
Метод 2: Использование глобального ConfigMap
config-autoscaler установите container-concurrency-target-default.Целевой процент использования
Это значение указывает целевой процент, к которому стремится автомасштабировщик при метрике concurrency, позволяя проактивно масштабироваться до достижения жёсткого лимита. По умолчанию: 70. Не применяется при использовании RPS.
Метод 1: Использование аннотаций InferenceService
В spec.predictor.annotations объекта InferenceService добавьте аннотацию autoscaling.knative.dev/target-utilization-percentage.
Метод 2: Использование глобального ConfigMap
В ConfigMap config-autoscaler установите container-concurrency-target-percentage.
Вы можете изменить метрику масштабирования с concurrency на запросы в секунду (RPS). Значение по умолчанию — 200.
Примечание: В режиме RPS настройка target-percentage для concurrency не используется.
Метод 1: Использование параметров ресурса InferenceService
В spec.predictor установите scaleTarget и scaleMetric в rps.
Метод 2: Использование глобального ConfigMap
В ConfigMap config-autoscaler установите requests-per-second-target-default.