Администратор кластера 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"