Выбор ответа Senior Service и Ingress обновлено

Неравномерная нагрузка на gRPC

Вопрос

После масштабирования gRPC-сервиса с 3 до 6 реплик новые поды почти не получают запросов. Почему?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: kube-proxy балансирует соединения, а gRPC держит долгие HTTP/2-соединения. gRPC мультиплексирует запросы в одном HTTP/2-соединении.

Варианты ответа

  1. Новые поды не прошли readiness, хотя метрики показывают их Ready
  2. kube-proxy балансирует соединения, а gRPC держит долгие HTTP/2-соединенияправильный ответ
  3. Service поддерживает максимум 3 эндпоинта, остальные поды игнорируются
  4. Нужно сменить тип Service на NodePort, ClusterIP не балансирует HTTP/2

Разбор

gRPC мультиплексирует запросы в одном HTTP/2-соединении. Балансировка ClusterIP выбирает под при установке соединения, и новые поды получат только новые соединения. Решения: клиентская балансировка с headless-сервисом, L7-прокси (Envoy, сервис-меш) или периодическое пересоздание соединений (MaxConnectionAge на сервере). Лимита на число эндпоинтов нет, NodePort ту же проблему не решает.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме