Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 440новых вакансий за сутки·54 706вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 625
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти
←К подготовке по вакансии←К теме KubernetesВсе вопросы
KubernetesMiddleПроектирование систем

Что такое KEDA и зачем он нужен, если есть HPA?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

KEDA добавляет event-driven autoscaling поверх HPA: масштабирует workload по очередям (Redis, Kafka, SQS), Prometheus-метрикам и cron-расписанию, умеет опускать replicas до нуля, чего стандартный HPA не поддерживает.

Пример ScaledObject для Redis-очереди

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: worker
  namespace: production
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: worker
  pollingInterval: 15        # опрос каждые 15 секунд
  cooldownPeriod: 60         # ждать 60 секунд перед scale-to-zero
  minReplicaCount: 0
  maxReplicaCount: 30
  triggers:
    - type: redis
      metadata:
        address: redis-master.default.svc:6379
        listName: job_queue
        listLength: "5"      # 1 реплика на каждые 5 сообщений
      authenticationRef:
        name: redis-secret

Что такое KEDA и чем отличается от HPA

HPA (Horizontal Pod Autoscaler) умеет масштабировать по CPU, памяти и custom metrics через Metrics API. Но он не знает о длине очереди RabbitMQ, Kafka consumer lag, числе сообщений в Azure Service Bus или произвольном Prometheus-запросе как единственном источнике истины. KEDA (Kubernetes Event-Driven Autoscaling) закрывает этот пробел: он добавляет ScaledObject / ScaledJob CRD, набор scalers (встроенных интеграций с внешними источниками) и собственный Metrics Server, который публикует значения через External Metrics API. HPA при этом остаётся исполнителем масштабирования — KEDA просто кормит его нужными метриками.

Архитектура

Оператор KEDA состоит из нескольких компонентов:

  • keda-operator — следит за ScaledObject/ScaledJob, управляет HPA-объектами, реализует scale-to-zero.
  • keda-metrics-apiserver — реализует external.metrics.k8s.io и отдаёт значения scalers в HPA.
  • ScaledObject — привязывает Deployment/StatefulSet к одному или нескольким triggers.
  • ScaledJob — вместо масштабирования Deployment создаёт Job-объекты под каждый event (батчевая обработка).

Цикл работы: scaler читает внешний источник каждые pollingInterval секунд → вычисляет метрику → KEDA обновляет HPA targetAverageValue → HPA меняет replicas. Если все scalers возвращают 0 и minReplicaCount: 0, KEDA удаляет HPA и выставляет replicas=0 напрямую, обходя HPA (тот не умеет в ноль).

Пример ScaledObject для Kafka

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: kafka-consumer
spec:
  scaleTargetRef:
    name: kafka-consumer
  minReplicaCount: 1
  maxReplicaCount: 50
  triggers:
    - type: kafka
      metadata:
        bootstrapServers: kafka.default.svc:9092
        consumerGroup: my-group
        topic: events
        lagThreshold: "100"   # 1 реплика на каждые 100 сообщений лага
        offsetResetPolicy: latest

TriggerAuthentication для секретов

apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
  name: redis-secret
spec:
  secretTargetRef:
    - parameter: password
      name: redis-credentials
      key: password

Когда KEDA необходим, а когда достаточно HPA

HPA с custom metrics адаптера достаточно, если метрика уже есть в Prometheus и Prometheus Adapter настроен. KEDA оправдан когда: нужен scale-to-zero, источник — очередь / event bus, не хочется настраивать Prometheus Adapter вручную, или используются cloud-native источники (SQS, Azure Queue, GCP Pub/Sub).

Подводные камни

  • Scale-to-zero требует внешней точки активации; если scaler не видит источник (network issue, wrong credentials), он может ошибочно вернуть 0 и убрать все реплики.
  • pollingInterval не равен latency реакции: при коротком spike в очереди реплики могут не успеть подняться до начала timeout сообщений.
  • Credentials к внешним системам надо хранить в TriggerAuthentication + Secret, а не в metadata в открытом виде — иначе они попадут в etcd незашифрованными.
  • ScaledJob создаёт новый Job на каждый event batch; без TTL-after-finished контроллера завершённые Jobs копятся и засоряют namespace.
  • При наличии нескольких triggers KEDA берёт максимальное значение из всех — агрегация не настраивается. Это может приводить к неожиданно высокому числу реплик.
  • KEDA управляет HPA-объектом; ручные изменения HPA будут перезаписаны оператором на следующем reconcile-цикле.
  • minReplicaCount: 0 вместе с длинным cooldownPeriod может привести к тому, что реплики уйдут в ноль во время ночного затишья, а утренний burst встретит cold-start задержку контейнеров.
  • После обновления KEDA CRD (upgrade оператора) существующие ScaledObject могут требовать миграции схемы — проверяйте CHANGELOG перед обновлением.

Типичные ошибки

  • Говорить, что KEDA только для Kafka
  • Не знать ScaledObject
  • Игнорировать auth к scaler

Что проверяет интервьюер

  • Объясняет event-driven scaling
  • Понимает связь с HPA
  • Приводит внешний metric use case

Как вы знаете этот вопрос?

Проверить себя по теме Kubernetes →

Источники

  • https://keda.sh/docs/2.19/concepts/
  • https://keda.sh/docs/2.19/scalers/
  • https://kubernetes.io/docs/concepts/workloads/autoscaling/horizontal-pod-autoscale/

Связанные темы

KubernetesHPAPrometheusQueuesworkers

Вакансии с этим навыком

Kubernetes вакансии
  • DevOps Engineer (KUMA XDR)
  • Lead Cloud Engineer (Azure) — Interview Experts Needed (#5499)
  • Full-stack Technical Lead (Java+React) (#5710)
  • Middle AI/ML Engineer (#5827)
  • Senior DataOps Engineer (#5858)

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 397 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python8 748
  • Облачные технологии6 616
  • QA вакансии2 169
  • Android1 320
  • Инженер данных872
  • Продакт-менеджер302

Разработка

  • iOS1 232
  • Backend вакансии1 204
  • AI вакансии543
  • Fullstack вакансии497
  • Frontend вакансии417
  • Mobile вакансии28

По стеку

  • Go5 212
  • Java3 116
  • Kotlin1 090
  • Node.js995
  • Rust845
  • .NET661
  • PHP320
  • C++271
  • C#208

DevOps и инфраструктура

  • Kubernetes3 913
  • Linux-инфраструктура2 852
  • DevOps вакансии2 678
  • Terraform / IaC2 167
  • Мониторинг и Observability1 066
  • CI/CD923
  • SRE301
  • Кибербезопасность26

Аналитика и данные

  • Аналитик данных533
  • Data Scientist436
  • Бизнес-аналитик400
  • Системный аналитик68

Другие направления

  • Проджект-менеджер90
  • UI/UX дизайн70
  • Ручное тестирование14

По регионам

  • Вакансии в США26 186
  • Вакансии в Европе10 369
  • Работа в России3 628
  • Вакансии в Канаде2 306

По формату

  • Удалённые вакансии43 484
  • Релокация в США26 186
  • Гибридная работа5 597
  • Офисная работа4 383

По уровню

  • Senior вакансии22 724
  • Middle вакансии11 726
  • Junior вакансии3 874

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab135 вакансий
  • Celonis45 вакансий
  • Spotify37 вакансий
  • Infobip28 вакансий
  • Adyen26 вакансий
  • Monzo19 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка

Частые вопросы на собеседовании

  • Зачем нужны requests и limits для CPU и памяти? Что будет, если их не задать или задать только limits?
  • Что такое ServiceAccount, Role, ClusterRole, RoleBinding и ClusterRoleBinding? Как они связаны?
  • Сервис не доступен, хотя поды Running и Ready. Как найдёшь, где разрыв?
  • Что такое securityContext? Зачем нужны runAsNonRoot, readOnlyRootFilesystem и drop capabilities?