Resource Quota

Обратитесь к официальной документации Kubernetes: Resource Quotas

Содержание

Понимание Resource Requests и Limits

Используются для ограничения ресурсов, доступных для конкретного namespace. Общее использование ресурсов всеми Pod в namespace (за исключением тех, что находятся в состоянии Terminating) не должно превышать квоту.

Resource Requests: Определяют минимальные ресурсы (например, CPU, память), необходимые контейнеру, помогая Kubernetes Scheduler разместить Pod на узле с достаточной емкостью.

Resource Limits: Определяют максимальные ресурсы, которые контейнер может потреблять, предотвращая исчерпание ресурсов и обеспечивая стабильность кластера.

Квоты

Resource Quotas

Если ресурс отмечен как Unlimited, явная квота не применяется, но использование не может превышать доступную емкость кластера.

Resource Quotas отслеживают суммарное потребление ресурсов (например, лимиты контейнеров, новые Pod или PVC) внутри namespace.

Поддерживаемые типы квот

ПолеОписание
Resource RequestsОбщие запрошенные ресурсы для всех Pod в namespace:
  • CPU
  • Память
Resource LimitsОбщие лимиты ресурсов для всех Pod в namespace:
  • CPU
  • Память
Number of PodsМаксимальное количество Pod, разрешенное в namespace.

Примечание:

  • Квоты namespace формируются из выделенных проекту ресурсов кластера. Если доступная квота по любому ресурсу равна 0, создание namespace не удастся. Обратитесь к администратору.
  • Unlimited означает, что namespace может использовать оставшиеся ресурсы проекта для данного типа ресурса.

Пример YAML файла

# example-resourcequota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
  name: example-resourcequota
  namespace: <example>
spec:
  hard:
    limits.cpu: "20"
    limits.memory: 20Gi
    pods: "500"
    requests.cpu: "2"
    requests.memory: 2Gi

Создание resource quota через CLI

Создать через YAML файл

kubectl apply -f example-resourcequota.yaml

Создать напрямую через командную строку

kubectl create resourcequota example-resourcequota --namespace=<example> --hard=limits.cpu=20,limits.memory=20Gi,pods=500

Storage Quotas

Типы квот:

  • All: Общая емкость хранилища PVC в namespace.
  • Storage Class: Общая емкость хранилища PVC для конкретного storage class.

Примечание: Убедитесь, что storage class предварительно назначен проекту, содержащему namespace.

Extended Resources Quotas

Расширенные квоты ресурсов определяются через ConfigMap. Если ConfigMap отсутствует, категория ресурса не отображается.

Описание полей ConfigMap

ПолеОписание
data.dataTypeТип данных (например, vGPU).
data.defaultValueЗначение по умолчанию (пусто = без значения по умолчанию).
data.descriptionEnТекст подсказки на английском (отображается при наведении на поле).
data.descriptionZhТекст подсказки на китайском (отображается при наведении на поле).
data.excludeResourcesВзаимоисключающие ресурсы (через запятую).
data.groupГруппа ресурсов (например, MPS).
data.groupI18nНазвание группы на английском/китайском для выпадающих списков UI.
data.keyОпределяет значение ключа. Словарь конфигурации может описывать только один ключ.
data.labelEn/data.labelZhНазвание ресурса на английском/китайском, которое можно просматривать и выбирать в выпадающих списках, соответствующих типам квот. Это поле выполняет ту же функцию, что и data.groupI18n, но применяется только когда у одного ресурса одно значение, обеспечивая совместимость с устаревшей версией словаря конфигурации (ConfigMap).
data.limitsУказывает, нужно ли настраивать лимиты для ресурсов. Допустимые значения: disabled — лимиты не настраиваются, required — обязательный ввод, optional — необязательный ввод.
data.requestsУказывает, нужно ли настраивать requests для ресурсов. Допустимые значения: disabled — requests не настраиваются, required — обязательный ввод, optional — необязательный ввод, fromLimits — использовать такую же конфигурацию, как для limits.
data.relatedResourcesСвязанные ресурсы. Поле зарезервировано и в настоящее время не используется.
data.resourceUnitЕдиница ресурса (например, cores, GiB). Ввод на китайском не поддерживается.
data.runtimeClassNameКласс runtime (по умолчанию: nvidia для GPU).
metadata.labelsОбязательные метки:
  • features.cpaas.io/type: CustomResourceLimitation
  • features.cpaas.io/group: <groupName>
  • features.cpaas.io/enabled: true или false, метка обязательна и указывает, включена ли функция, по умолчанию true.
metadata.nameФормат: cf-crl-<*groupName*>-<*name*>, где
  • cf-crl — фиксированное поле, менять нельзя.
  • groupName — имя соответствующей группы ресурсов, например gpu-manager, galaxy и т.д.
  • name — имя ресурса:
    • Имя ресурса может быть стандартным типом ресурса, например cpu, memory, pods и т.д. Стандартные имена должны соответствовать правилам квалифицированных имен Kubernetes и существовать среди определённых стандартных типов ресурсов Kubernetes.
    • Имя ресурса также может быть специальным типом ресурса, начинающимся с определённых префиксов, например: hugepages- или requests.hugepages-.
metadata.namespaceДолжен быть kube-public

Другие квоты

Формат имен пользовательских квот должен соответствовать следующим требованиям:

  • Если имя пользовательской квоты не содержит слэш (/): оно должно начинаться и заканчиваться буквой или цифрой, может содержать буквы, цифры, дефисы (-), подчеркивания (_) или точки (.), формируя квалифицированное имя длиной не более 63 символов.
  • Если имя пользовательской квоты содержит слэш (/): имя делится на две части — префикс и имя, в форме: prefix/name. Префикс должен быть допустимым DNS поддоменом, а имя должно соответствовать правилам квалифицированного имени.
  • DNS поддомен:
    • Метка: должна начинаться и заканчиваться строчными буквами или цифрами, может содержать дефисы (-), но не может состоять только из дефисов, максимальная длина — 63 символа.
    • Поддомен: расширяет правила метки, позволяя соединять несколько меток точками (.) для формирования поддомена, максимальная длина — 253 символа.