Ограничения VPA

Перед использованием вертикального масштабирования (VPA) необходимо учитывать ряд ограничений:

  • Перезапуск подов при изменении ресурсов:
    • Обновление запрашиваемых ресурсов — экспериментальная функция, каждый раз при изменении ресурсов VPA пересоздаёт под, и он может быть назначен на другой узел;
    • Поды могут пересоздаваться на других узлах.
  • Совместимость с HPA:
    • VPA не рекомендуется использовать совместно с HPA по CPU и памяти;
    • VPA можно использовать с HPA с custom/external метриками.
  • Проблемы с большими кластерами — VPA может работать и в больших кластерах, но нагрузка на VPA возрастает при росте числа подов.

  • Проблемы с Pending-подами — VPA может рекомендовать ресурсы выше доступных в кластере, из-за чего поды могут застрять в статусе Pending.

  • Проблемы при удалении VPA — если удалить VPA или отключить его (режим Off), ресурсы останутся в последнем измененном значении. Это может привести к путанице, когда в Helm указаны одни ресурсы, в контроллере — другие, а у подов — третьи.

  • Использование нескольких VPA-ресурсов на один под — может привести к непредсказуемому поведению.

При использовании VPA рекомендуется настроить Pod Disruption Budget.

VPA состоит из 3 компонентов:

  • Recommender — мониторит настоящее (делая запросы в Metrics API, который реализован в модуле prometheus-metrics-adapter) и прошлое потребление ресурсов (делая запросы в Trickster перед Prometheus) и предоставляет рекомендации по CPU и памяти для контейнеров.
  • Updater — проверяет, что у подов с VPA выставлены корректные ресурсы, если нет — убивает эти поды, чтобы контроллер пересоздал поды с новыми запрашиваемыми ресурсами.
  • Admission Plugin — задает запрашиваемые ресурсы при создании новых подов (контроллером или из-за активности Updater’а).

При изменении ресурсов компонентом Updater это происходит с помощью Eviction API, поэтому учитываются Pod Disruption Budget для обновляемых подов. Архитектура VPA