Выбор ответа Senior Service и Ingress обновлено
Неравномерная нагрузка на gRPC
Вопрос
После масштабирования gRPC-сервиса с 3 до 6 реплик новые поды почти не получают запросов. Почему?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: kube-proxy балансирует соединения, а gRPC держит долгие HTTP/2-соединения. gRPC мультиплексирует запросы в одном HTTP/2-соединении.
Варианты ответа
- Новые поды не прошли readiness, хотя метрики показывают их Ready
- kube-proxy балансирует соединения, а gRPC держит долгие HTTP/2-соединенияправильный ответ
- Service поддерживает максимум 3 эндпоинта, остальные поды игнорируются
- Нужно сменить тип Service на NodePort, ClusterIP не балансирует HTTP/2
Разбор
gRPC мультиплексирует запросы в одном HTTP/2-соединении. Балансировка ClusterIP выбирает под при установке соединения, и новые поды получат только новые соединения. Решения: клиентская балансировка с headless-сервисом, L7-прокси (Envoy, сервис-меш) или периодическое пересоздание соединений (MaxConnectionAge на сервере). Лимита на число эндпоинтов нет, NodePort ту же проблему не решает.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.