Resource quotas
← Documentation · Welcome
Your namespace has quotas for CPU, memory, and storage. They're set when you're onboarded, sized to what you ordered, and enforced by Kubernetes: anything that would exceed them is rejected at creation time - existing workloads keep running.
Set requests and limits on every container
Because the namespace is quota-limited, every container must declare what it needs:
resources:
requests: # what your app typically uses - reserved for you
cpu: 100m
memory: 128Mi
limits: # the hard ceiling - the container is throttled (CPU)
cpu: 500m # or killed (memory) beyond this
memory: 256Mi
Pods without requests/limits are rejected in a quota-enforced namespace. Set
requests to realistic typical usage (that's what counts against the quota and what
the scheduler reserves), and limits as the safety ceiling.
Autoscaling counts too: an HPA can only scale as far as the quota allows -
maxReplicas × requestsmust fit within it.
Check your quota and usage
kubectl get resourcequota -n <your-namespace>
kubectl describe resourcequota -n <your-namespace> # per-resource: used vs. hard limit
When you hit the quota
- New or restarted pods stay
Pendingor are rejected outright (exceeded quotain the event log / ArgoCD sync error). - New PVCs are rejected if the requested storage doesn't fit.
- Nothing running is touched - quotas only gate new consumption.
Free up headroom (lower over-generous requests, remove unused PVCs), or request a
raise.
Local disk (ephemeral storage)
Everything a pod writes outside a PVC lands on the node's local disk: files in the
container filesystem, its logs, and emptyDir volumes. Each container may use up to
2Gi of it - you don't have to configure anything, the limit is set for you (an
emptyDir needs no sizeLimit).
If a pod goes over, that pod is evicted and replaced by a fresh one. The old pod
stays visible in ArgoCD as Failed / Evicted with a message like
Pod ephemeral local storage usage exceeds the total limit of containers 2Gi. If you
see that:
- data that should survive or grow belongs on a PVC or in S3, not on local disk;
- if your app really needs more local scratch space, that's a ticket to support@inf.ethz.ch (see Requesting more).
An emptyDir with medium: Memory is RAM, not disk - it counts against the
container's memory limit instead.
Requesting more
Every limit on this page - CPU, memory, total PVC storage, local disk - is set by the platform; you can't change it from your repo. Changes are a quick ticket to support@inf.ethz.ch (what to include) - state the cluster, your namespace, the new value (e.g. "raise memory quota to 8Gi", "raise PVC storage to 100Gi"), and one line on why.