[Документация Yandex Cloud](../../../index.md) > [Yandex Cloud Stackland](../../index.md) > [Пошаговые инструкции](../index.md) > [Проекты](index.md) > Установить квоты в пространствах имен

# Установить квоты в пространствах имен

Квоты ограничивают потребление ресурсов в пространствах имен проекта. Квоты задаются на уровне пространства имен и позволяют контролировать использование CPU, памяти, хранилища и GPU.

## Перед началом работы {#before-you-begin}

Убедитесь, что:

* У вас есть роль администратора кластера или администратора проекта.
* Проект и пространство имен уже созданы. Если нет, [создайте проект](create-project.md) и [пространство имен](manage-namespaces.md).

## Поддерживаемые типы квот {#quota-types}

На уровне пространства имен можно установить следующие квоты:

* `requests.cpu` — cуммарный запрос CPU для подов в пространстве имен.
* `requests.memory` — суммарный запрос памяти для подов в пространстве имен.
* `limits.cpu` — суммарный лимит CPU для подов в пространстве имен.
* `limits.memory` — суммарный лимит памяти для подов в пространстве имен.
* `requests.storage` — суммарный объем хранилища для всех PVC в пространстве имен.
* `requests.nvidia.com/gpu` — суммарное количество GPU для подов в пространстве имен.

Если для некоторого типа ресурса квота не указана, потребление этого ресурса не ограничивается.

## Создать квоту {#set-quotas}

Квоты задаются на уровне пространства имен проекта.

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В левом меню выберите **Проекты**.
  1. Выберите нужный проект из списка.
  1. На боковой панели проекта нажмите **Пространства имен**.
  1. Выберите нужное пространство имен.
  1. Перейдите на вкладку **Квоты**.
  1. Нажмите **+ Добавить квоту**.
  1. Укажите параметры квоты:

      * **Имя квоты** — уникальное имя квоты в пространстве имен. Обязательное поле.

  1. В разделе **Ресурсные квоты** добавьте ограничения:

      * Выберите тип ресурса в выпадающем списке **Ресурс** (например, `limits.cpu`, `requests.cpu`).
      * Укажите значение в поле **Значение**.
      * Чтобы добавить ещё одно ограничение, нажмите **Добавить**.
      * Чтобы удалить строку, нажмите значок корзины.

  1. При необходимости раскройте раздел **Дополнительно** и укажите **Scope** — YAML-описание селектора области применения квоты (например, для ограничения по классу приоритета подов).
  1. Нажмите **Сохранить**.


- CLI {#cli}

  Создайте файл манифеста, например `quota.yaml`:

  ```yaml
  apiVersion: v1
  kind: ResourceQuota
  metadata:
    name: my-quota
    namespace: team-alpha-backend
  spec:
    hard:
      limits.cpu: "20"
      requests.cpu: "10"
      limits.memory: "64Gi"
      requests.memory: "32Gi"
    scopeSelector:
      matchExpressions:
        - scopeName: PriorityClass
          operator: In
          values:
            - middle
  ```

  Где:

  * `metadata.name` — имя квоты. Обязательное поле.
  * `metadata.namespace` — пространство имен проекта, в котором создается квота. Обязательное поле.
  * `spec.hard` — словарь ресурсов и их лимитов. Обязательное поле.
  * `spec.scopeSelector` — селектор области применения квоты. Необязательное поле.

  Примените манифест:

  ```bash
  kubectl apply -f quota.yaml
  ```

{% endlist %}

## Просмотреть текущее использование квот {#view-usage}

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В левом меню выберите **Проекты**.
  1. Выберите нужный проект из списка.
  1. На боковой панели проекта нажмите **Пространства имен**.
  1. Выберите нужное пространство имен.
  1. Перейдите на вкладку **Квоты**.
  1. Нажмите на имя нужной квоты.

  На странице квоты отображается:

  * **Информация о квоте** — имя, пространство имен, область применения (Scope), дата создания.
  * **Квоты** — таблица с колонками **Ресурс**, **Requests (использ./лимит)**, **Limits (использ./лимит)**, **Effective**.


- CLI {#cli}

  Чтобы просмотреть список квот в пространстве имен:

  ```bash
  kubectl get resourcequota -n team-alpha-backend
  ```

  Пример ответа:

  ```bash
  NAME         REQUEST             LIMIT             AGE
  my-quota     requests.cpu: 0/2   limits.cpu: 0/4   20m
  ```

  Чтобы просмотреть детали квоты с текущим использованием:

  ```bash
  kubectl describe resourcequota my-quota -n team-alpha-backend
  ```

  Пример ответа:
  
  ```bash
  Name:         my-quota
  Namespace:    team-alpha-backend
  Resource      Used  Hard
  --------      ----  ----
  limits.cpu    1     4
  requests.cpu  1     2
  ```


{% endlist %}

## Изменить квоту {#update-quotas}

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В левом меню выберите **Проекты**.
  1. Выберите нужный проект из списка.
  1. На боковой панели проекта нажмите **Пространства имен**.
  1. Выберите нужное пространство имен.
  1. Перейдите на вкладку **Квоты**.
  1. В строке нужной квоты нажмите значок **⋯** и выберите **Редактировать**.
  1. Внесите изменения и нажмите **Сохранить**.


- CLI {#cli}

  Отредактируйте квоту напрямую:

  ```bash
  kubectl edit resourcequota my-quota -n team-alpha-backend
  ```

{% endlist %}

{% note info %}

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

{% endnote %}

## Удалить квоту {#delete-quotas}

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В левом меню выберите **Проекты**.
  1. Выберите нужный проект из списка.
  1. На боковой панели проекта нажмите **Пространства имен**.
  1. Выберите нужное пространство имен.
  1. Перейдите на вкладку **Квоты**.
  1. В строке нужной квоты нажмите значок **⋯** и выберите **Удалить**.
  1. Подтвердите удаление.


- CLI {#cli}

  ```bash
  kubectl delete resourcequota my-quota -n team-alpha-backend
  ```

{% endlist %}

## Примеры {#examples}

### Квота для окружения разработки {#dev-example}

```yaml
apiVersion: v1
kind: ResourceQuota
metadata:
  name: dev-quota
  namespace: development-main
spec:
  hard:
    requests.cpu: "10"
    requests.memory: "32Gi"
    requests.storage: "200Gi"
    limits.cpu: "20"
    limits.memory: "64Gi"
```

### Квота для production-пространства имен с GPU {#prod-example}

```yaml
apiVersion: v1
kind: ResourceQuota
metadata:
  name: ml-prod-quota
  namespace: ml-production-main
spec:
  hard:
    requests.cpu: "100"
    requests.memory: "512Gi"
    requests.storage: "5Ti"
    limits.cpu: "200"
    limits.memory: "1Ti"
    requests.nvidia.com/gpu: "8"
```

## Что дальше {#what-is-next}

* [Настроить роли проекта](project-roles.md)
* [Управлять пространствами имен в проекте](manage-namespaces.md)