TP - Explorer les limitations volontaires de ressources dans les conteneurs
Objectif
Comprendre comment Linux limite et mesure les ressources utilisées par un conteneur grâce aux cgroups.
Préparer l’environnement
Dans votre répertoire /home/lab/docker, créez un sous-répertoire cnt_ressources_limits et créez un nouveau fichier dockerfile.
Le contenu de ce dockerfile est le suivant :
FROM ubuntu:24.04
RUN apt-get update && apt-get install -y stress
Vous construirez ensuite l’image du conteneur exo3-tp à l’aide de la commande suivante :
docker build -t exo3-tp .
Lancer un conteneur avec des limites
Créez un conteneur à partir de l’image exo3-tp limité à 256 Mo de RAM et 0.5 CPU :
docker run -dit --name cnt-exo3-tp -m 256m --cpus 0.5 exo3-tp
Observer les limites appliquées
Les informations des cgroup sont présents dans le répertoire cgroup.
ls /sys/fs/cgroup/
Pour observer les limites appliquées à un conteneur, il est nécessaire de :
Connaître l’id complet du conteneur
Ouvrir la feuille correspondant au cgroup associé au conteneur
# On recherche le process id du conteneur (PID) en inspectant le conteneur
# La synthaxe variable=$(fonction) permet d'enregistrer le retour de la fonction.
# /!\ Attention à ne pas mettre d'espace avant et après le signe égal (=)
dockerPID=$(docker inspect --format '{{.State.Pid}}' cnt-exo3-tp)
# On recherche le cgroup associé au PID
cat /proc/$dockerPID/cgroup
# Cela nous retourne 0::/system.slice/docker-xxxxxxxx.scope (xxxxxxxx doit être remplacé par le cgroup retrouvé dans votre propre shell)
# Depuis là, on connait la sous-arborescence pour retrouver les limites appliquées au processus de notre conteneur.
cd /sys/fs/cgroup/system.slice
ls
cd docker-xxxxxxxx.scope
# Maintenant on peut obtenir plein d'information sur les ressources allouées et consommées par notre conteneur.
ls
cat memory.max
cat cpu.max
Tester la limite CPU
Dans un autre terminal, surveillez l’utilisation CPU :
docker stats cnt-exo3-tp
Lancez un stress CPU dans le conteneur :
Tester la limite mémoire
Lancez un test pour consommer 100 Mo :
docker exec -it cnt-exo3-tp stress --vm 1 --vm-bytes 100M --vm-hang 0
Lancez un test pour consommer plus que 256 Mo :
docker exec -it cnt-exo3-tp stress --vm 1 --vm-bytes 300M --vm-hang 0
→ Observez : le processus sera tué par l’OOM killer.
Nettoyage
docker rm -f cnt-exo3-tp
Résultats attendus
Vous savez trouver à quel cgroup appartient un processus.
Vous pouvez lire les limites appliquées dans
/sys/fs/cgroup.Vous comprenez comment observer et tester ces limites sur un conteneur.