La Mémoire
Allocation
La mémoire, une fois allouée à un processus ou conteneur, ne peut pas être récupérée par le noyau. Le processus stocke ses résultats de calcul, fichiers et ressources nécessaires dans cet espace mémoire. Un processus ne peut pas perdre une partie de sa mémoire et continuer à fonctionner correctement.
Paramétrage
Il est recommandé de définir les limits mémoire égales aux requests. Si un node manque de mémoire, le processus sera le premier à être tué par kubelet pour libérer la mémoire.
Le CPU
Allocation
Le CPU est plus flexible et peut être récupéré sans nécessairement tuer un processus. Le CPU est une ressource partagée, divisée en tranches de temps. Le Completely Fair Scheduler (CFS) divise le temps en périodes de 100ms. Chaque processus se voit allouer un quota de temps CPU dans cette période.
Paramétrage
La meilleure pratique est de spécifier les requests et d’éviter de définir des limits. Les limits CPU s’appliquent par période de 100ms.
Exemple de configuration :
resources:
requests:
cpu: "1"
limits:
cpu: "1"
CPU Throttling
Sur une machine single-core, cela équivaut à 100% du temps CPU. Sur une machine multi-core, c’est divisé proportionnellement. Le throttling peut impacter les performances, même si ce n’est pas toujours visible dans le monitoring.
Métriques Utiles
- container_cpu_cfs_throttled_seconds_total
- container_cpu_cfs_periods_total
TLDR
- Mémoire : requests égales aux limits
- CPU : utiliser les requests, éviter les limits

Quand tu réalises que le CPU throttling sabotait tes performances en silence depuis tout ce temps 😅
Points clés à retenir
- ✓ Mémoire : requests = limits toujours (protection contre OOMKilled)
- ✓ CPU : spécifier les requests, éviter les limits (prévention du throttling)
- ✓ CPU throttling invisible dans monitoring standard mais impacte performances
- ✓ CFS divise le temps CPU en périodes de 100ms avec quotas par processus
- ✓ Métriques essentielles : container_cpu_cfs_throttled_seconds_total