Администратор кластера kubernetes должен позаботиться о том, что бы пользователи (devops инженеры) случайно не сломали кластер.
Например, у devops дрогнула рука (ошибся в скрипте деплоя). И вместо двух подов в deployment он написал 100500. Kubernetes честно попытается запустить указанное количество подов. Разумеется затребованных ресурсов не хватит и администратора кластера догонят суровые будни.
Или, ваше хранилище имеет общий размер 1Tb, а пользователь запросил 1,5Tb.
Или… много еще чего может придумать пользователь…
Что бы такого не случилось, админ должен явно определить квоты на используемые ресурсы. Для этого в kubernetes существуют ResourceQuota.
ResoqurceQuota определяет ограничения на namespace.
Квоты работаю следующим образом:
Если в namespace включена квота на вычислительные ресурсы: cpu и memory. В создаваемых пользователем ресурсах должны быть явно описаны лимиты. Если лимиты не описаны, система отклонит создание новых ресурсов. Для избегания подобной ситуации администратор должен устанавливать LimitRanger на namespace.
Пример ResourceQuota:
---
apiVersion: v1
kind: ResourceQuota
metadata:
name: q-test-quota
namespace: q-test
spec:
hard:
# Вычислительные квоты
requests.cpu: "0.2"
requests.memory: 200Mi
limits.cpu: "2"
limits.memory: 2Gi
# Квоты на количество объектов
pods: "2"
services: "2"
services.nodeports: "0"
# Квоты хранения
persistentvolumeclaims: "2"
managed-nfs-storage.storageclass.storage.k8s.io/requests.storage: 8Gi
managed-nfs-storage.storageclass.storage.k8s.io/persistentvolumeclaims: "1"