Lorsque vous déployez des applications sur un cluster Kubernetes, il est essentiel de gérer les ressources de calcul pour garantir une utilisation efficace et équitable des ressources.
Les quotas CPU sont un élément clé de cette gestion, et il est important de comprendre comment ils fonctionnent et comment ils peuvent impacter les performances de vos applications.
La période CPU : un paramètre clé
Cette valeur définit la période de temps en microsecondes (us) pendant laquelle la consommation de CPU d'un groupe de tâches (cgroup) est évaluée et régulée.
En d'autres termes, c'est l'intervalle de temps à l'intérieur duquel le système vérifie et ajuste la quantité de temps CPU allouée aux tâches d'un cgroup.
La valeur par défaut d'une période CPU est de 100 ms, ce qui signifie que chaque conteneur a accès au processeur pendant 100 ms avant d'être interrompu.
Par exemple, si cpu.cfs_period_us
est défini à 100000 (soit 100 millisecondes), le système évaluera et régulera la consommation de CPU toutes les 100 millisecondes.
Qu'est-ce qu'un quota CPU ?
Cette valeur représente le quota de temps CPU en microsecondes (us) que les tâches d'un cgroup peuvent utiliser pendant la période définie par cpu.cfs_period_us
.
Si le quota est dépassé, les tâches du cgroup sont limitées (throttled) pour le reste de la période, ce qui signifie qu'elles ne pourront pas utiliser plus de CPU jusqu'à la fin de la période actuelle et le début de la suivante.
Par exemple, si cpu.cfs_quota_us
est défini à 50000 (soit 50 millisecondes) et cpu.cfs_period_us
à 100000 (100 millisecondes), les tâches du cgroup pourront utiliser jusqu'à 50 millisecondes de temps CPU toutes les 100 millisecondes.
Les quotas CPU sont implémentés à l'aide de cgroups (control groups) et du CFS (Completely Fair Scheduler), qui sont des mécanismes de planification qui garantissent une allocation équitable des ressources CPU entre les conteneurs.
Le throttling : comprendre comment les quotas CPU peuvent impacter les performances
Lorsqu'un container utilise plus de CPU que ce qui est alloué, il peut être throttled pour ne pas dépasser la limite de CPU.
Le throttling signifie que le container est limité à utiliser au maximum la quantité de CPU allouée pendant la période de planification, même s'il en demande plus.
Cela peut impacter les performances de l'application, car elle ne pourra pas utiliser plus de CPU que ce qui est alloué.
Exemple de configuration de quotas CPU
Voici un exemple de configuration de quotas CPU pour un conteneur :
apiVersion: v1
kind: Pod
metadata:
name: exemple-cpu
spec:
containers:
- name: exemple-ctr
image: exemple/image
resources:
requests:
cpu: 250m
limits:
cpu: 500m
Dans cet exemple, le conteneur exemple-ctr
a une demande CPU de 250 mCPU, soit 0.25 CPU et une limite CPU de 500 mCPU, soit 0.5 CPU.
Si le conteneur utilise plus de 500 mCPU pendant une période de planification, il sera throttled pour ne pas dépasser la limite de 500 mCPU.
Un petit dessin vaut parfois mieux qu’un long discours ↴
Sur le diagramme plus haut, le container utilise entièrement son quota CPU qui lui est alloué sur la moitié de la seconde période CPU de 100ms, le kernel ne lui fournira donc plus de CPU supplémentaire jusqu’au démarrage de la période CPU suivante.
Conclusion
Les quotas CPU sont un élément clé de la gestion des ressources de calcul sur Kubernetes.
Il est important de comprendre comment les quotas CPU fonctionnent et comment ils peuvent impacter les performances de vos applications.
En configurant les quotas CPU de manière appropriée, vous pouvez garantir une utilisation efficace et équitable des ressources de calcul sur votre cluster Kubernetes.