Obiectul ResourceQuota în Kubernetes (kubectl)

Limitează totalul de CPU, memorie, Pod-uri sau alte obiecte pe care le poate consuma un namespace.

Sintaxă comandă
apiVersion: v1
kind: ResourceQuota

Ce face Obiectul ResourceQuota

Într-un cluster folosit de mai multe echipe, ResourceQuota pune un plafon pe namespace: de exemplu „echipa magazin poate cere în total cel mult 4 CPU, 8 GiB memorie și 20 de Pod-uri”. Când o creare ar depăși plafonul, API-ul o refuză cu eroarea exceeded quota.

Atenție la o consecință: dacă cota limitează requests.cpu sau limits.memory, fiecare Pod nou din namespace trebuie să declare acele valori, altfel este refuzat. De aceea cotele se folosesc de obicei împreună cu un LimitRange, care completează valori implicite. Cotele numără și obiecte: pods, services, persistentvolumeclaims, count/deployments.apps.

Parametri

Parametru Descriere
spec.hard.requests.cpu / requests.memory Totalul resurselor cerute (requests) de toate Pod-urile.
spec.hard.limits.cpu / limits.memory Totalul limitelor (limits).
spec.hard.pods Numărul maxim de Pod-uri care nu s-au terminat.
spec.hard.requests.storage Totalul spațiului cerut de PersistentVolumeClaim-uri.
spec.hard.count/<resursă>.<grup> Numărul maxim de obiecte de un anumit tip (de exemplu count/secrets).

Exemple

Exemplul 1: Cota echipei magazin

Plafoane pentru resurse și pentru numărul de obiecte.

apiVersion: v1
kind: ResourceQuota
metadata:
  name: cote-magazin
  namespace: magazin
spec:
  hard:
    requests.cpu: "4"
    requests.memory: 8Gi
    limits.cpu: "8"
    limits.memory: 16Gi
    pods: "20"
    persistentvolumeclaims: "5"

Exemplul 2: Cât s-a consumat din cotă

Coloana Used arată consumul actual, iar Hard plafonul.

kubectl describe resourcequota cote-magazin -n magazin

Ieșire în terminal

Name:                   cote-magazin
Namespace:              magazin
Resource                Used   Hard
--------                ----   ----
limits.cpu              2      8
limits.memory           3Gi    16Gi
persistentvolumeclaims  1      5
pods                    6      20
requests.cpu            1200m  4
requests.memory         7Gi    8Gi

Exemplul 3: Un Pod care ar depăși cota

Mai sunt disponibili doar 1 GiB din requests.memory, iar Pod-ul cere 2 GiB.

kubectl apply -f raport.yaml -n magazin

Ieșire în terminal

Error from server (Forbidden): error when creating "raport.yaml": pods "raport" is forbidden: exceeded quota: cote-magazin, requested: requests.memory=2Gi, used: requests.memory=7Gi, limited: requests.memory=8Gi

Greșeli frecvente

  • Căutarea erorii doar în Pod-uri când un Deployment nu pornește: Pod-urile refuzate de cotă nu apar deloc. Mesajul este în evenimentele ReplicaSet-ului (kubectl describe rs sau kubectl events -n magazin).
  • Introducerea unei cote pe CPU/memorie fără valori implicite: Pod-urile existente merg în continuare, dar orice Pod nou fără resources este refuzat. Adaugă un LimitRange în același timp.

Comenzi înrudite

  • Obiectul LimitRange: Stabilește valori implicite și limite minime/maxime de CPU și memorie pentru fiecare container dintr-un namespace.
  • Obiectul ReplicaSet: Menține în funcțiune un număr fix de Pod-uri identice; este creat și gestionat automat de Deployment.