Комментарии 8
А как там, на Кубе, дела, как Кастро поживает?
Поэтому предложенное мной решение отличается от описанного в статье.
И дополнительной вишенкой является работа самого планировщика. По-умолчанию он планирует поды по limits, а не по requests. И если установить поду/контейнерам RAM request в 100Mb, а limit в 16Gb, то этот под «зарезервирует» ноду целиком.
Плюс есть какая-то странность в том, что поды в статусе Completed всё ещё учитываются в квотах по namespace (тут вероятно тоже могут быть отличия в более новых версиях). В итоге квоты приходится раздувать.
Про планировщик — он же вроде по реквестам планирует? Откуда информация про планирование по лимитам? Если поду выставить реквест в 100 МБ, а лимит в 16 ГБ, то поду выделится 100 метров. Если под начнет есть память дальше, то при нехватке памяти будет убит. Никакого резервирования 16 гигов я никогда не видел.
Это уже у меня смешались в кучу конелюди. Планирует он по requests, это я некорректно сформулировал свою мысль. Была какая-то проблема, с которой я боролся пару месяцев назад. Вспомню, вернусь.
Дефолтный планировщик определенно использует реквесты, вот как раз фраза про это из документации:
PodFitsResources filter checks whether a candidate Node has enough available resource to meet a Pod’s specific resource requests
По-моему чтобы планировщик учитывал лимиты, его нужно кастомизировать.
Квоты в целом очень мощный инструмент, который остался за скоупом статьи как раз по причине своей мощности. Я думаю что применять их надо вместе — LimitRange и ResourceQuota отлично дополняют друг друга. С использованием первого мы позволяем работать любым подам, даже созданным на скорую руку, в рамках второй. Квоты это следующий шаг регулирования кластера после настройки ресурсов и стабилизации работы в целом.
Застрахуй ресурсы в Кубе