Ограничение использования ресурсов

Обновлена 15 апреля 2024 г. в 08:50

Ограничение использования ресурсов

Любой ресурс, относящийся к рабочей нагрузке (workload) Kubernetes, при работе создает и запускает некоторое количество контейнеров. Эти контейнеры имеют требования к объему вычислительных ресурсов worker-узлов кластера. Планировщик Kubernetes (scheduler) учитывает требования рабочей нагрузки к вычислительным ресурсам, чтобы разместить ее на наиболее подходящих worker-узлах.

Следует ограничивать потребление ресурсов для любой рабочей нагрузки, которая запускается в кластере. Тогда контейнеры рабочей нагрузки не смогут исчерпать все доступные ресурсы worker-узла (например, если есть утечка памяти).

Хотя кластеры Kubernetes сервиса Cloud Containers уже содержат преднастроенные лимиты, хорошей практикой является ограничение ресурсов вручную. Например, предустановленные ограничения могут не подходить для ресурсоемкой рабочей нагрузки.

Для контейнера в Kubernetes можно задать:

resources.requests: желаемые вычислительные ресурсы.

Контейнер может использовать больше вычислительных ресурсов, чем было запрошено, если worker-узел готов выделить дополнительные ресурсы. Нижний порог выделяемых контейнеру ресурсов всегда ограничен значениями, указанными в resources.requests.

Например, пусть для контейнера memory задан желаемый объем оперативной памяти 256M (256 МБ). Если этот контейнер находится в поде, размещенном на узла с 8 ГБ оперативной памяти, то контейнер может попытаться использовать больше оперативной памяти, если у узла есть свободная память.

resources.limits: ограничение на вычислительные ресурсы.

Контейнеру не будет позволено использовать больше вычислительных ресурсов, чем указано в этом параметре.

Параметрами requests и limits можно ограничить следующие вычислительные ресурсы:

cpu: количество vCPU.

Задается либо в целых ядрах (например, для 3 vCPU — resources.requests.cpu: 3), либо в сотых долях от одного ядра с использованием суффикса m (например, для 0,25 vCPU — resources.requests.cpu: 250m).

memory: объем оперативной памяти.

Объем задается в байтах, но для удобства можно использовать:

Десятичные суффиксы: k, M, G, T, P, E. Например, 1k будет эквивалентен 1000 байтов.
Суффиксы, соответствующие степени двойки: Ki, Mi, Gi, Ti, Pi, Ei. Например, 1Ki будет эквивалентен 1024 байтам.