Obiectul LimitRange în Kubernetes (kubectl)

Stabilește valori implicite și limite minime/maxime de CPU și memorie pentru fiecare container dintr-un namespace.

Sintaxă comandă
apiVersion: v1
kind: LimitRange

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ă propriile resources.

Comenzi înrudite

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