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 rssaukubectl 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ă
resourceseste refuzat. Adaugă unLimitRangeî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.