Documentation / Quotas

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 × requests must 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 Pending or are rejected outright (exceeded quota in 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:

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.