Skip to content

Seeing your allocation

Two kubectl commands answer the “how much have I used” question:

Terminal window
kubectl get resourcepool

This returns the ResourcePool backing your tenant. The ResourcePool is cluster-scoped — there is one pool per tenant, shared across every namespace the tenant owns. Because it is cluster-scoped, the command takes no namespace; passing -n is ignored.

Terminal window
kubectl describe resourcepool <pool-name>

The output shows your quota and current usage broken out by resource type:

Spec:
Hard:
limits.cpu: 8
limits.memory: 16Gi
requests.cpu: 8
requests.memory: 16Gi
requests.storage: 50Gi
Status:
Used:
limits.cpu: 3
limits.memory: 6Gi
requests.cpu: 2
requests.memory: 4Gi
requests.storage: 20Gi
  • Hard is the ceiling — the maximum your tenant’s workloads can claim across all namespaces.
  • Used is the sum of what your running workloads currently claim (the sum of all Pod requests and limits plus all PVC sizes) across the whole tenant.

To see usage scoped to a single namespace rather than the whole tenant, describe the ResourceQuota in that namespace:

Terminal window
kubectl describe resourcequota -n <your-tenant>-<a-namespace>

The ResourcePool resource is Capsule-managed: you can read it but you cannot edit it. Quota changes go through an RCS ticket — see Requesting quota changes.

A Grafana view of the same numbers, with trend lines per namespace, is available through the cluster monitoring stack. See Monitoring for how to access the Grafana dashboards and which panels map to tenant quota.

Common “why is my quota used up” scenarios

Section titled “Common “why is my quota used up” scenarios”

Kubernetes Jobs that have finished (Completed status) still have their Pods present until the Job’s ttlSecondsAfterFinished expires or you delete them manually. Those Pods’ requests and limits count against your ResourcePool even though they are not running.

Terminal window
kubectl get pods -n <your-tenant>-<any-namespace> --field-selector=status.phase=Succeeded

Delete completed Job Pods to reclaim quota:

Terminal window
kubectl delete job <job-name> -n <your-tenant>-<any-namespace>

A Pod in Pending state has its requests reserved by the scheduler but is not actually running. If you have Pods stuck pending due to a scheduling constraint (node affinity, resource shortage, etc.), they are consuming quota without doing work.

Terminal window
kubectl get pods -n <your-tenant>-<any-namespace> --field-selector=status.phase=Pending

Check why the Pod is pending:

Terminal window
kubectl describe pod <pod-name> -n <your-tenant>-<any-namespace>

The Events section tells you what the scheduler is waiting for.

PersistentVolumeClaims count against requests.storage even if the volume is not mounted by any Pod. Orphaned PVCs from deleted Deployments or Jobs can silently eat your storage budget.

Terminal window
kubectl get pvc -n <your-tenant>-<any-namespace>

Delete PVCs you no longer need — but check the reclaim policy first. The default storage class (csi-cinder-sc-delete) uses Delete reclaim, so deleting the PVC destroys the backing volume. Use csi-cinder-sc-retain if you need the backing volume to survive PVC deletion.

If your Pods set requests and limits much higher than what they actually use, you are reserving quota you do not need. Review your workloads’ actual resource consumption (via kubectl top pod or Grafana) and right-size the requests and limits in your manifests.

If kubectl describe resourcepool shows numbers that do not add up — for example, Used exceeds the sum of your visible Pods’ requests — open a ticket with RCS. The most common cause is a namespace you have forgotten about (remember, all namespaces under your tenant prefix share the pool):

Terminal window
kubectl get ns | grep <your-tenant>

This lists every namespace in your tenant. Check each one for running workloads.