Aide-mémoire CKAD

exemple YAML ResourceQuota k8s

Un Quota refuse le create si le namespace dépasserait. Un LimitRange mute le Pod si les requests manquent.

Deux croiseurs, un grillage, un seul couloir encore ouvert. Deux croiseurs, un grillage, un seul couloir encore ouvert.
Créer
kubectl create quota app --hard=pods=5,cpu=2,memory=2Gi -n app
ResourceQuota
apiVersion: v1
kind: ResourceQuota
metadata:
  name: app
  namespace: app
spec:
  hard:
    pods: "5"
    requests.cpu: "2"
    requests.memory: 2Gi
    limits.cpu: "4"
    limits.memory: 4Gi
LimitRange
apiVersion: v1
kind: LimitRange
metadata:
  name: app
  namespace: app
spec:
  limits:
    - type: Container
      default:
        cpu: "200m"
        memory: 256Mi
      defaultRequest:
        cpu: "100m"
        memory: 128Mi
      max:
        cpu: "500m"
        memory: 1Gi

Champs

hard
Plafond pour tout le namespace. pods, cpu, memory, requests.cpu, limits.memory.
default
LimitRange. Injecté comme limit du conteneur si le Pod l’a omise.
defaultRequest
Injecté comme request si le Pod l’a omise. Le Quota en a souvent besoin.
max
Plafond par conteneur. Au-delà, le Pod est rejeté.
kubectl create quota
--hard=pods=5,cpu=2,memory=2Gi. 2Gi et 2G sont la même quantité.

Pièges

  • Un Quota sur requests.cpu refuse un Pod sans request CPU. Poser un LimitRange defaultRequest à côté.
  • LimitRange default = limit, defaultRequest = request. max est par conteneur, pas le namespace.
  • 2Gi et 2G sont la même chose. Ne pas se battre avec kubectl sur le suffixe.

Doc officielle Resource Quotas Limit Ranges

S’entraîner sur un cluster réel →