Florent Peterschmitt

LXC Autostart / lxc-autostart / lxc.conf

Démarrer ses conteneurs LXC

Je ferai peut-être un jour un article plus conséquent sur la configuration complète d’un conteneur LXC, mais pour le moment on va s’intéresser à ceci : le démarrage automatique des conteneurs.

Ici, c’est LXC 1.0 qui est utilisé.

La commande lxc-autostart

Cette commande va permettre de démarrer tous les conteneurs ayant été configurés pour démarrer automatiquement. Les autres seront ignorés.

On pourra déjà utiliser cette commande pour voir l’état de notre configuration :

lxc-autostart -L # liste les conteneurs restant à démarrer, avec leur ordre

Et pour démarrer les conteneurs restant à démarrer automatiquement :

lxc-autostart # zatsaul bro'

La configuration de nos conteneurs

Ici, rien de magique, juste un peu de de RTF^W lecture attentive du manuel :

man lxc.conf
man lxc.container.conf

Et voici les options qui nous intéressent :

lxc.start.auto = 0|1
lxc.start.order = num relatif
lxc.start.delay = num secondes

Et voici comment les utiliser :

Pour lxc.start.auto, tout va bien, 0 indique qu’on ne démarrera pas automatiquement ce conteneur, et un 1 fera l’inverse.

Et maintenant, un peu d’ordre : lxc.start.order. Plus le nombre est grand, plus votre conteneur démarrera tôt. Pour faire simple, celui qui a la plus grosse gagne. Pour des numéros égaux, ça démarrera en "même temps".

Enfin, on complète notre série avec lxc.start.delay. Cette variable va intercaller un délais avant le démarrage du prochain conteneur sur la liste.

Exemple pratique

J’ai trois conteneurs, disons dns, postgresql et prosody.

Comme j’adresse tous mes conteneurs entre eux via le DNS, il vaut mieux qu’il fonctionne. Donnons lui une conf qui va lui permettre, par rapport aux autres, de démarrer le premier, et on s’assurera que les conteneurs suivants auront le DNS directement accessible lors de leur démarrage respectif avec un petit délais :

# lxc.name = dns
lxc.start.auto = 1
lxc.start.order = 9000
lxc.start.delay = 20

On démarre dns, puis on attend 20 secondes avant de démarrer le prochain.

Ensuite, on aura remarqué que prosody dans sa branche 0.9.x ne réessaye pas de se connecter à sa base SQL configurée. Du coup, on va horriblement contourner le problème de la sorte :

# lxc.name = postgresql
lxc.start.auto = 1
lxc.start.order = 1000
lxc.start.delay = 30
# lxc.name = prosody
lxc.start.auto = 1
lxc.start.order = 100
lxc.start.delay = 0

Et voilà qui est fait. Le conteneur prosody ayant une priorité plus basse que le conteneur postgresql, et comme nous avons configuré un délais de 30 secondes entre les conteneurs de priorité 1000 et ceux de priorité inférieure, PostgreSQL aura le temps de démarrer correctement et prosody d’avoir une base lancée à laquelle se connecter.