--- title: Configure Quotas for API Objects --- {% 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/api-reference/{{page.version}}/#resourcequota-v1-core) object. {% endcapture %} {% capture prerequisites %} {% include task-tutorial-prereqs.md %} {% endcapture %} {% 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: {% include code.html language="yaml" file="quota-objects.yaml" ghlink="/docs/tasks/administer-cluster/quota-objects.yaml" %} Create the ResourceQuota: ```shell kubectl create -f https://k8s.io/docs/tasks/administer-cluster/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: {% include code.html language="yaml" file="quota-objects-pvc.yaml" ghlink="/docs/tasks/administer-cluster/quota-objects-pvc.yaml" %} Create the PersistentVolumeClaim: ```shell kubectl create -f https://k8s.io/docs/tasks/administer-cluster/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: {% include code.html language="yaml" file="quota-objects-pvc-2.yaml" ghlink="/docs/tasks/administer-cluster/quota-objects-pvc-2.yaml" %} Attempt to create the second PersistentVolumeClaim: ```shell kubectl create -f https://k8s.io/docs/tasks/administer-cluster/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:
String | API Object |
---|---|
"pods" | Pod |
"services | Service |
"replicationcontrollers" | ReplicationController |
"resourcequotas" | ResourceQuota |
"secrets" | Secret |
"configmaps" | ConfigMap |
"persistentvolumeclaims" | PersistentVolumeClaim |
"services.nodeports" | Service of type NodePort |
"services.loadbalancers" | Service of type LoadBalancer |