Docker devicemapper

Sur les serveurs Kubernetes, il y a un volume monté particulier : docker-metadata.

Ce volume sert à plusieurs choses dont:

  • Stocker les informations sur les pods
  • Stocker les sorties standard des pods
  • Stocker les images des containers.
  • Stocker les volumes temporaires des containers.

Ce volume peut prendre de plus en plus de place en fonction notamment du nombre de pods et de la verbosité des pods sur leur sortie standard.

Le volume est monté généralement sur le dossier /var/lib/docker.

Il peut parfois devenir nécessaire de faire un nettoyage. Dans un premier temps nous allons rechercher quel container prend le plus de place. Nous pouvons nous baser sur la commande du.

du -hs /var/lib/docker/containers/*

Il est possible de trier les résultats par taille.

du -hs /var/lib/docker/containers/*/*-json.log | sort -h
Attention, les commandes détruiront la sortie d'un container. Ce qui a été effacé ne pourra pas être restauré.

Puis nous pouvons réduire la taille en utilisant la commande truncate.

Exemple :

truncate /var/lib/docker/containers/09874390ab3984cd98723e9fbb2398a29c24/09874390ab3984cd98723e9fbb2398a29c24-json.log -s 0 -c
Si tout est bien fait dans le cluster, il est aussi possible de détruire le pod concerné. Le pod sera recréé suivant la politique en vigueur (ReplicaSet / DaemonSet) avec une fenêtre de log vide.

Il peut être nécessaire d'identifier à quel pod appartient un container donné. Il est possible d'utiliser la commande suivante :

kubectl get pods --all-namespaces -o jsonpath="{range .items[*]}{@.metadata.name}{' '}{@.status.containerStatuses[*].containerID}{'\\n'}{end}" --all-namespaces | column -t | grep 09874390ab3984cd98723e9fbb2398a29c24