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 :

  1. Connaître l’id complet du conteneur

  2. 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.