--- title: Configure Quotas for API Objects content_template: templates/task --- {{% capture overview %}} This page shows how to configure quotas for API objects, including PersistentVolumeClaims and Services. A quota restricts the number of objects, of a particular type, that can be created in a namespace. You specify quotas in a [ResourceQuota](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#resourcequota-v1-core) object. {{% /capture %}} {{% capture prerequisites %}} {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} {{% /capture %}} {{% capture steps %}} ## Create a namespace Create a namespace so that the resources you create in this exercise are isolated from the rest of your cluster. ```shell kubectl create namespace quota-object-example ``` ## Create a ResourceQuota Here is the configuration file for a ResourceQuota object: {{< codenew file="admin/resource/quota-objects.yaml" >}} Create the ResourceQuota: ```shell kubectl apply -f https://k8s.io/examples/admin/resource/quota-objects.yaml --namespace=quota-object-example ``` View detailed information about the ResourceQuota: ```shell kubectl get resourcequota object-quota-demo --namespace=quota-object-example --output=yaml ``` The output shows that in the quota-object-example namespace, there can be at most one PersistentVolumeClaim, at most two Services of type LoadBalancer, and no Services of type NodePort. ```yaml status: hard: persistentvolumeclaims: "1" services.loadbalancers: "2" services.nodeports: "0" used: persistentvolumeclaims: "0" services.loadbalancers: "0" services.nodeports: "0" ``` ## Create a PersistentVolumeClaim Here is the configuration file for a PersistentVolumeClaim object: {{< codenew file="admin/resource/quota-objects-pvc.yaml" >}} Create the PersistentVolumeClaim: ```shell kubectl apply -f https://k8s.io/examples/admin/resource/quota-objects-pvc.yaml --namespace=quota-object-example ``` Verify that the PersistentVolumeClaim was created: ```shell kubectl get persistentvolumeclaims --namespace=quota-object-example ``` The output shows that the PersistentVolumeClaim exists and has status Pending: ```shell NAME STATUS pvc-quota-demo Pending ``` ## Attempt to create a second PersistentVolumeClaim Here is the configuration file for a second PersistentVolumeClaim: {{< codenew file="admin/resource/quota-objects-pvc-2.yaml" >}} Attempt to create the second PersistentVolumeClaim: ```shell kubectl apply -f https://k8s.io/examples/admin/resource/quota-objects-pvc-2.yaml --namespace=quota-object-example ``` The output shows that the second PersistentVolumeClaim was not created, because it would have exceeded the quota for the namespace. ``` persistentvolumeclaims "pvc-quota-demo-2" is forbidden: exceeded quota: object-quota-demo, requested: persistentvolumeclaims=1, used: persistentvolumeclaims=1, limited: persistentvolumeclaims=1 ``` ## Notes These are the strings used to identify API resources that can be constrained by quotas:
StringAPI Object
"pods"Pod
"servicesService
"replicationcontrollers"ReplicationController
"resourcequotas"ResourceQuota
"secrets"Secret
"configmaps"ConfigMap
"persistentvolumeclaims"PersistentVolumeClaim
"services.nodeports"Service of type NodePort
"services.loadbalancers"Service of type LoadBalancer
## Clean up Delete your namespace: ```shell kubectl delete namespace quota-object-example ``` {{% /capture %}} {{% capture whatsnext %}} ### For cluster administrators * [Configure Default Memory Requests and Limits for a Namespace](/docs/tasks/administer-cluster/memory-default-namespace/) * [Configure Default CPU Requests and Limits for a Namespace](/docs/tasks/administer-cluster/cpu-default-namespace/) * [Configure Minimum and Maximum Memory Constraints for a Namespace](/docs/tasks/administer-cluster/memory-constraint-namespace/) * [Configure Minimum and Maximum CPU Constraints for a Namespace](/docs/tasks/administer-cluster/cpu-constraint-namespace/) * [Configure Memory and CPU Quotas for a Namespace](/docs/tasks/administer-cluster/quota-memory-cpu-namespace/) * [Configure a Pod Quota for a Namespace](/docs/tasks/administer-cluster/quota-pod-namespace/) ### For app developers * [Assign Memory Resources to Containers and Pods](/docs/tasks/configure-pod-container/assign-memory-resource/) * [Assign CPU Resources to Containers and Pods](/docs/tasks/configure-pod-container/assign-cpu-resource/) * [Configure Quality of Service for Pods](/docs/tasks/configure-pod-container/quality-service-pod/) {{% /capture %}}