Kill Them All

Durant nos tribulations sur des phases de troubleshooting, nous avons rencontré un cas intéressant qui nous a mis face à un casse-tête (ça tombe bien, c’est le genre de chose que nous aimons 🙂 ).

homer-thinking

Pour résumer, nous avions un serveur ESXi dont le processus hostd ne répondait plus, son état dans le vCenter était donc en Not Responding (bien évidement, au bout de quelques instants, les VM qui étaient hébergées dessus ont été redémarrées normalement par HA sur d’autres serveurs ESX du cluster, jusque-là rien de bizarre).

En se connectant en console HP ILO sur le serveur ESX (le daemon SSH ne répondait plus non plus), nous nous sommes rendu compte qu’il y avait un souci avec le pilote des cartes réseaux (un fameux problème connu de pilote ELXNET sur ESX 5.5 lié au Native Driver), faisant perdre toute connectivité des vmnic (lien down, ce qui explique la perte de connexion de l’ESX).

Cette perte de connexion a laissé le serveur ESX sans accès au stockage NFS (forcement) et avec des instances de VM qui tournent dans le vide (puisqu’il n’y avait plus de réseaux/stockage).

Le cas intéressant qui nous a donné envie de faire ce billet a découlé de notre volonté de passer le serveur en maintenance dans cet état.

Nous voulions mettre le serveur en maintenance, mais les instances VMM tournaient encore sur le serveur ESX donc pas possible de mettre en maintenance. Nous avons donc entrepris de killer ces instances, au début via l’option ‘k’ de esxtop en spécifiant le world-id. Cependant, la connexion ILO ne permettait pas de faire du copier/coller, et en plus, nous étions sur une connexion VPN avec une latence digne des années 1980, donc effectuer cette opération sur quelques 70 instances allaient prendre beaucoup trop de temps (surtout à 3h du matin…).

minitel

En feignants que nous sommes, nous avons donc voulu automatiser cela, en minimisant les commandes à taper du fait du copier/coller non fonctionnel (nous vous avons prévenu, le maitre mot ici est ‘feignant’).

Nous sommes donc arrivés à ce petit script bash qui utilise le namespace esxcli vm process kill. Ce script va killer toutes les instances VMM (en mode hard, donc trash direct attention !!!) présent sur un serveur ESX:

for vmid in esxcli vm process list | grep "World" | cut -f2 -d: 
do 
esxcli vm process kill --type hard --world-id $vmid
done

Une fois cela fini, nous avons pu mettre le serveur en maintenance et continuer notre troubleshooting pour aller se coucher quelques heures plus tard 🙂

C’est bien entendu à utiliser en dernier recours, mais cela nous a bien rendu service 🙂

Laisser un commentaire

Required fields are marked *.