Redémarrer une machine virtuelle rapidement avec Kexec
Pour démarrer une machine virtuelle elle a besoin de booter sur un Bios virtuelle puis sur le Grub (pour Linux) qui démarre ensuite le système.
Dans le cadre de nos cluster de machine virtuelle avec des services qui tourne en prod, il nous faut le moins de temps possible pour redémarrer ces machines pour que l'utilisateur est le moins de dommage.
Le cas assez spécifique d'un redémarrage d'une machine virtuelle est quand on y fait des mises a jours. Quand il y'a une mise a jour de kernel Linux nous n'avons pas le choix que de redémarrer pour qu'il soit pris en compte.
C'est ici qu'intervient Kexec. Il permet de redémarrer la machine sans passer par le Bios et Grub. Il fait un simple reload du système avec l'intégration de notre nouveau kernel.
Dans la pratique quand on tape dnf update dans un Rocky Linux ou un apt update dans un Debian nous voyons un nouveau Kernel.
Kernel actuelle |
Kernel qui va être installer avec la mise a jour |
Mais avant de faire la mise a jour on va installer Kexec et on lance la mise a jour du système après.
dnf install kexec-tools
et on lance cette commande pour que Kexec redémarre la machine avec le même kernel
#Pour Rocky
kexec -l /boot/vmlinuz-$(uname -r) --initrd=/boot/initramfs-$(uname -r).img --reuse-cmdline
et on tape la commande reboot
Si on veux downgrader ou upgrade une version de kernel on lance la commande
#Pour Rocky
kexec -l /boot/vmlinuz-4.18.0-372.9.1.el8.x86_64 --initrd=/boot/initramfs-4.18.0-372.9.1.el8.x86_64.img --reuse-cmdline
puis on tape la commande reboot pour appliquer le nouveau kernel.