23 Nov 2017

Attention à vos Docker/Rancher

Utilisant depuis quelques semaines un environnement sous Rancher (à base de Docker donc), j’ai installé récemment sur un de mes serveurs un kernel backporté, celui-ci tournant sous Debian Jessie. Après un redémarrage en bonne et due forme, mon docker a tout simplement refusé de démarrer.

Ni une ni deux, je cherche dans les logs et tente de comprendre le pourquoi du comment.

La fin du support aufs dans les kernel les plus récents

Lorsqu’on passe d’un kernel Debian 3.16 vers la version backportée 4.9, le kernel ne supporte plus aufs. Si cela m’avait déjà posé des problèmes pour mes live-build, je regarde qu’il n’en est pas moins avec Docker. Une petite recherche confirme qu’il faut repartir de 0, je me dis finalement c’est l’occasion de tester un peu mon infra et la reprise d’activité après un crash.

Un serveur qui héberge Rancher Server

Evidemment, mon serveur n’est pas juste un noeux, mais héberge également rancher server. Mais avant de pouvoir se lancer dans la réinstallation, il va falloir réparer Docker, ce qui est chose relativement aisée lorsqu’on sait comment faire.

mv /var/lib/docker/aufs /var/lib/docker/aufs.old
service docker start

Attention, à partir de là, vous repartez avec une configuration de Docker neuve. Vous remarquerez que Docker créé automatiquement le dossier /var/lib/docker/overlay2 qui stoquera désormais tous les conteneurs. Si vous souhaitez finalement faire marche arrière et repasser sur le noyau 3.16, vous devrez supprimer ou renommer ce dossier, sinon Docker refusera de nouveau de démarrer en mode aufs.

Il ne reste maintenant plus qu’à redémarrer Rancher Server, ce qui se fait presque facilement.

docker run -d -v /storage/docker/rancher-mysql:/var/lib/mysql --restart=unless-stopped -p 8080:8080 rancher/server

Vous noterez que j’avais correctement déporté le volume contenant mysql, du coup, toute la configuration de Rancher est récupéré. Sauf que je remarque que mon Rancher ne démarre pas, et pour cause, Rancher détecte que le serveur a été reconfiguré, de plus je suis passé sur une version plus récente, la base doit être mise à jour. Mais pas de panique, tout est documenté à cette adresse :

http://rancher.com/docs/rancher/v1.6/en/faqs/server/

Il suffit donc de faire un petit

docker exec -it <rancher_server_container_ID> mysql

Puis de lancer les commandes Mysql suivantes :

use cattle;
select * from DATABASECHANGELOGLOCK;
update DATABASECHANGELOGLOCK set LOCKED="", LOCKGRANTED=null, LOCKEDBY=null where ID=1;

Et voila, votre Rancher serveur devrait de nouveau être rapidement joinable sur le port 8080 de votre serveur. Il faudra enfin réinstaller également l’agent sur votre serveur afin que celui-ci rejoigne votre environnement.

docker run --rm -e CATTLE_AGENT_IP=xx.xx.xx.xx --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.7 http://abcde:8080/v1/scripts/xx:xx:xx

Et s’armer de patience … car toutes les images doivent se télécharger à nouveau, pour ma part, tout s’est bien déroulé ensuite.

En espérant toujours que ça dépanne quelqu’un un jour.


Tags: