À propos de cgroup v2
Sur Linux, les groupes de contrôle limitent les ressources allouées aux processus.
Le kubelet et le runtime de conteneur sous-jacent doivent interagir avec les cgroups pour appliquer la gestion des ressources pour les pods et les conteneurs, ce qui inclut les demandes et les limites de CPU/mémoire pour les charges de travail conteneurisées.
Il existe deux versions de cgroups sur Linux : cgroup v1 et cgroup v2. cgroup v2 est
la nouvelle génération de l'API cgroup
.
Qu'est-ce que cgroup v2 ?
Kubernetes v1.25 [stable]
cgroup v2 est la prochaine version de l'API cgroup
de Linux. cgroup v2 offre un
système de contrôle unifié avec des capacités de gestion des ressources améliorées.
cgroup v2 propose plusieurs améliorations par rapport à cgroup v1, telles que :
- Conception d'une hiérarchie unifiée unique dans l'API
- Délégation plus sûre des sous-arbres aux conteneurs
- Nouvelles fonctionnalités telles que Pressure Stall Information
- Gestion améliorée de l'allocation des ressources et de l'isolation sur plusieurs ressources
- Comptabilité unifiée pour différents types d'allocations de mémoire (mémoire réseau, mémoire du noyau, etc.)
- Comptabilité des modifications de ressources non immédiates, telles que les écritures de cache de pages
Certaines fonctionnalités de Kubernetes utilisent exclusivement cgroup v2 pour une gestion des ressources et une isolation améliorées. Par exemple, la fonctionnalité MemoryQoS améliore la QoS de la mémoire et repose sur les primitives cgroup v2.
Utilisation de cgroup v2
La manière recommandée d'utiliser cgroup v2 est d'utiliser une distribution Linux qui active et utilise cgroup v2 par défaut.
Pour vérifier si votre distribution utilise cgroup v2, consultez Identifier la version de cgroup sur les nœuds Linux.
Exigences
cgroup v2 a les exigences suivantes :
- La distribution OS active cgroup v2
- La version du noyau Linux est 5.8 ou ultérieure
- Le runtime de conteneur prend en charge cgroup v2. Par exemple :
- containerd v1.4 et ultérieur
- cri-o v1.20 et ultérieur
- Le kubelet et le runtime de conteneur sont configurés pour utiliser le driver cgroup systemd
Prise en charge de cgroup v2 par les distributions Linux
Pour une liste des distributions Linux qui utilisent cgroup v2, consultez la documentation cgroup v2
- Container Optimized OS (depuis M97)
- Ubuntu (depuis 21.10, 22.04+ recommandé)
- Debian GNU/Linux (depuis Debian 11 bullseye)
- Fedora (depuis 31)
- Arch Linux (depuis avril 2021)
- RHEL et les distributions similaires à RHEL (depuis 9)
Pour vérifier si votre distribution utilise cgroup v2, consultez la documentation de votre distribution ou suivez les instructions de Identifier la version de cgroup sur les nœuds Linux.
Vous pouvez également activer manuellement cgroup v2 sur votre distribution Linux en modifiant
les arguments de démarrage de la ligne de commande du noyau. Si votre distribution utilise GRUB,
systemd.unified_cgroup_hierarchy=1
doit être ajouté dans GRUB_CMDLINE_LINUX
sous /etc/default/grub
, suivi de sudo update-grub
.
Cependant, l'approche recommandée est d'utiliser une distribution qui active déjà cgroup v2 par
défaut.
Migration vers cgroup v2
Pour migrer vers cgroup v2, assurez-vous de respecter les exigences, puis mettez à jour vers une version du noyau qui active cgroup v2 par défaut.
Le kubelet détecte automatiquement si le système d'exploitation utilise cgroup v2 et agit en conséquence, sans nécessiter de configuration supplémentaire.
Il ne devrait pas y avoir de différence perceptible dans l'expérience utilisateur lors du passage à cgroup v2, sauf si les utilisateurs accèdent directement au système de fichiers cgroup soit sur le nœud, soit depuis les conteneurs.
cgroup v2 utilise une API différente de cgroup v1, donc si des applications accèdent directement au système de fichiers cgroup, elles doivent être mises à jour vers des versions plus récentes qui prennent en charge cgroup v2. Par exemple :
- Certains agents de surveillance et de sécurité tiers peuvent dépendre du système de fichiers cgroup. Mettez à jour ces agents vers des versions qui prennent en charge cgroup v2.
- Si vous exécutez cAdvisor en tant que DaemonSet autonome pour surveiller les pods et les conteneurs, mettez-le à jour vers la version 0.43.0 ou ultérieure.
- Si vous déployez des applications Java, préférez utiliser des versions qui prennent en charge pleinement cgroup v2 :
- OpenJDK / HotSpot : jdk8u372, 11.0.16, 15 et ultérieures
- IBM Semeru Runtimes : 8.0.382.0, 11.0.20.0, 17.0.8.0 et ultérieures
- IBM Java : 8.0.8.6 et ultérieures
- Si vous utilisez le package uber-go/automaxprocs, assurez-vous d'utiliser la version v1.5.1 ou supérieure.
Identifier la version de cgroup sur les nœuds Linux
La version de cgroup dépend de la distribution Linux utilisée et de la
version de cgroup par défaut configurée sur le système d'exploitation. Pour vérifier quelle version de cgroup votre
distribution utilise, exécutez la commande stat -fc %T /sys/fs/cgroup/
sur
le nœud :
stat -fc %T /sys/fs/cgroup/
Pour cgroup v2, la sortie est cgroup2fs
.
Pour cgroup v1, la sortie est tmpfs.
A suivre
- En savoir plus sur cgroups
- En savoir plus sur le runtime de conteneur
- En savoir plus sur les drivers cgroup