Ce face Obiectul LimitRange
Dacă ResourceQuota se ocupă de totalul unui namespace, LimitRange se ocupă de fiecare container (sau Pod, sau PersistentVolumeClaim) în parte. Poate completa automat requests și limits pentru containerele care nu le declară și poate refuza containerele care cer prea puțin sau prea mult.
Valorile implicite se aplică doar la crearea Pod-urilor; Pod-urile care rulează deja nu se schimbă. Dacă un container declară doar limits, Kubernetes folosește aceeași valoare și pentru requests (dacă LimitRange nu dă un defaultRequest).
Parametri
| Parametru | Descriere |
|---|---|
limits[].type |
Container, Pod sau PersistentVolumeClaim. |
default |
Limita (limits) pusă containerelor care nu o declară. |
defaultRequest |
Cererea (requests) pusă containerelor care nu o declară. |
min / max |
Valorile minime și maxime permise. |
maxLimitRequestRatio |
Raportul maxim dintre limită și cerere. |
Exemple
Exemplul 1: Valori implicite pentru namespace-ul magazin
Un container fără resources primește 100m CPU și 128Mi cerere, cu limite de 500m și 256Mi.
apiVersion: v1
kind: LimitRange
metadata:
name: implicite
namespace: magazin
spec:
limits:
- type: Container
defaultRequest:
cpu: 100m
memory: 128Mi
default:
cpu: 500m
memory: 256Mi
min:
cpu: 50m
memory: 64Mi
max:
cpu: "2"
memory: 2Gi
Exemplul 2: Limitele active și efectul lor asupra unui Pod
Pod-ul test a fost creat fără resources; vedem valorile completate automat.
kubectl describe limitrange implicite -n magazin
kubectl run test --image=nginx:1.27-alpine -n magazin
kubectl get pod test -n magazin -o jsonpath='{.spec.containers[0].resources}'
Ieșire în terminal
Name: implicite
Namespace: magazin
Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
---- -------- --- --- --------------- ------------- -----------------------
Container cpu 50m 2 100m 500m -
Container memory 64Mi 2Gi 128Mi 256Mi -
pod/test created
{"limits":{"cpu":"500m","memory":"256Mi"},"requests":{"cpu":"100m","memory":"128Mi"}}
Greșeli frecvente
- Așteptarea ca un LimitRange nou să schimbe Pod-urile existente: valorile se aplică doar la creare. Repornește Deployment-urile (
kubectl rollout restart) ca să le preia. - Valori implicite de memorie prea mici pentru aplicații Java sau Node.js: containerele sunt oprite cu
OOMKilled. Aplicațiile cu nevoi mari își declară propriileresources.
Comenzi înrudite
Obiectul ResourceQuota: Limitează totalul de CPU, memorie, Pod-uri sau alte obiecte pe care le poate consuma un namespace.