Maintenance d'un serveur

Mise à jour

Les serveurs sont basés sur Debian pour l’essentiel. Les mises à jour sont déployées via apt :

apt update
apt upgrade

Avant chaque validation de mise à jour, les paquets causant des redémarrages du démon Docker ou d’un démon crucial dont l’objet d’une revue. Les utilisateurs sont avertis avant mise à jour.

Nettoyage Docker

Docker conserve plusieurs types d’éléments par défaut : les conteneurs qui n’ont pas été explicitement supprimés, idem pour les réseaux et les volumes. Egalement, Docker ne supprime pas par défaut les images non utilisées.

Une partie des éléments consomment de l’espace et complexifient la base de données interne de Docker, le ralentissant. En outre, les conteneurs et images consomment des subvolumes btrfs, ralentissant globalement le système de fichiers.

Il est nécessaire d’exécuter au moins mensuellement un nettoyage de ces élément. Docker dispose d’une commande nettoyage tous les éléments non utilisés (attention, quelques secondes de forte charge sur le système sont à prévoir) :

docker system prune

Toutefois, Docker ne supprime pas les images taggées mais non utilisées. A cette fin, on force la suppression de toutes les images non utilisées :

docker images -q | xargs docker rmi

Balance des disques

Les données sont stockées sur des partitions btrfs, qui présentent de multiples avantages (snapshots, raid, etc.) mais également un inconvénient notable : les métadonnées et le stockage sont organisés en arbre.

Il convient d’effectuer des opérations de balance régulièrement sur l’arbre. Ces opérations sont toutefois très coûteuses en performances et de nature à détériorer voire interrompre les services.

Avant de lancer une balance, il est primordial de limiter le nombre de subvolumes en effectuant le nettoyage Docker. Ensuite, la balance peut être démarrée avec l’une des commandes suivantes, pour balancer respectivement les données ou métadonnées :

btrfs balance start --bg -dusage=50 /srv
btrfs balance start --bg -musage=50 /srv

Puis on supervise la balance, en l’interrompant et la rétablissant si des écritures sont bloquées trop longtemps et pénalisent les services :

btrfs balance status /srv
btrfs balance pause /srv
btrfs balance resume /srv