• Русский
  • 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
    • Memory
    Resource LimitsОбщие лимиты ресурсов для всех Pod в namespace:
    • CPU
    • Memory
    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 для конкретного класса хранения.

    Примечание: Убедитесь, что класс хранения предварительно назначен проекту, содержащему 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 символа.