Depuis la version 9, les distributions de type RedHat (RHEL, Rocky Linux, Alma Linux) ont fait évoluer leur plateforme matérielle : le processeur doit supporter le jeu d’instructions x86-64-v2 ou supérieur. Ce n’est pas vraiment un problème car cette micro-architecture est disponible sur tous les serveurs depuis 2009.
Cependant, sous Proxmox (v7.4 à ce jour), par défaut, les machines virtuelles sont créées avec un processeur virtuel nommé kvm64
qui ne supporte pas cette version : ça se traduit par un kernel panic au démarrage de la VM.
Une première solution consiste à configurer le CPU sur « host
» pour refléter le(s) processeur(s) de la machine physique. C’est d’ailleurs recommandé d’un point de vue performance si vous n’avez qu’un seul serveur physique.
Par contre, ça pose problème dans le cas d’un cluster avec des machines hétérogènes (processeurs différents) : vous risquez un plantage de la VM lors d’une migration à chaud vers un autre nœud.
Pour éviter ça, il y a deux solutions. Vous pouvez configurer le CPU sur, au minimum, Haswell ou Nehalem qui sont les premières micro-architectures x86-64v2 disponibles sous Proxmox. Ainsi, la configuration de votre VM sera la même sur tous les nœuds du cluster.
Pour la seconde solution, de loin la plus élégante, il suffit de créer le fichier cpu-models.conf
avec les lignes suivantes:
cpu-model: kvm64v2 flags +cx16;+lahf_lm;+popcnt;+sse3;+ssse3;+sse4.1;+sse4.2 hidden 0 hv-vendor-id proxmox reported-model kvm64
Cela créé un CPU custom-kvm64v2
à partir du modèle kvm64
en rajoutant les instructions manquantes. Dans une configuration cluster, le fichier est automatiquement déployé sur tous les nœuds.
Cependant, assurez-vous que tous les nœuds supportent, à minima, cette architecture avec ce petit script:
#!/bin/sh for i in cx16 lahf_lm popcnt ssse3 sse4.1 sse4.2 do grep -wq $i /proc/cpuinfo if [ $? -ne 0 ] ; then echo "Too bad : $i is not supported" exit 1 fi done echo "Instructions set is ok."
Si le script affiche une erreur, vous devriez contrôler vos procédures de décommissionnement