Управление ресурсами в Kubernetes: LimitRange и ResourceQuota

Для обеспечения стабильности и справедливого распределения ресурсов в Kubernetes предусмотрены два инструмента: LimitRange и ResourceQuota.

В этой статье мы рассмотрим, в чем их суть, чем они отличаются и как использовать на практике.


Что такое LimitRange?

LimitRange — это объект политики Kubernetes, задающий значения по умолчанию для лимитов и запросов ресурсов контейнеров.

Зачем нужен?

Чтобы избежать ситуаций, когда разработчики забывают указать лимиты, и под потребляет слишком много ресурсов.

Пример

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
  namespace: dev
spec:
  limits:
  - default:
      memory: 512Mi
    defaultRequest:
      memory: 256Mi
    type: Container

Все контейнеры в пространстве dev получат лимиты по умолчанию.


Что такое ResourceQuota?

ResourceQuota — это объект, ограничивающий общее количество ресурсов, доступных пространству имен.

Зачем нужен?

Чтобы управлять общим потреблением ресурсов (CPU, память, хранилище) на уровне команды или среды.

Пример

apiVersion: v1
kind: ResourceQuota
metadata:
  name: dev-quota
  namespace: dev
spec:
  hard:
    requests.cpu: "4"
    requests.memory: 4Gi
    limits.cpu: "8"
    limits.memory: 8Gi

Это ограничит общее потребление ресурсов в пространстве dev.


Основные отличия

ХарактеристикаLimitRangeResourceQuota
Область действияКаждый контейнерВсе пространство имен
НазначениеЗапросы и лимиты по умолчаниюОбщее потребление ресурсов
Можно вместе?ДаДа

Рекомендации

  • Используйте оба механизма для полной защиты.
  • Проверяйте kubectl describe quota и kubectl describe limitrange при отладке.
  • Подключите мониторинг (например, Prometheus + Grafana).

Заключение

Грамотное использование LimitRange и ResourceQuota помогает поддерживать надежность и управляемость кластера Kubernetes.