Gestion de ressource dynamique avec Proxmox

 

Il est intéressant sur une solution d'hébergement de machines virtuelles d'avoir une certaine souplesse sur la gestion des ressources (disque, cpu, mémoire, réseau) pour les machines virtuelles. J'utilises de plus en plus Proxmox, cependant quand on veut changer les ressources sur une machine virtuelle il faut la redémarrer.
On va voir ici comment configurer les machines virtuelles pour pouvoir gérer à chaud ces changements.

Ces modifications ont été testées et validées sur une machine virtuelle en Debian Wheezy.

 

Mettre en place un kernel récent

La gestion à chaud des ressources fonctionne sur le noyau par défaut de la Debian Wheezy, version 3.2 sauf pour la mémoire. On doit donc mettre à jour le noyau.
Pour cela il faut rajouter les dépôts Debian Backports pour avoir une version plus récente.Fichier /etc/apt/sources.list :

deb http://ftp.debian.org/debian/ wheezy-backports main non-free contrib

Puis :

# apt-get update
# apt-get -t wheezy-backports install linux-image-amd64

Ce qui permet d'avoir un kernel en version 3.16.

 

Hotplug mémoire et CPU

Dans ces deux cas là il faut faire une modification sur la vm ainsi que sur le fichier de configuration.

Modification côté VM

Il faut rajouter des règles udev pour gérer la modification des ressources. Pour cela on va créer un fichier de règle par ressource :

# vi /lib/udev/rules.d/80-hotplug-mem.rules
SUBSYSTEM=="memory", ACTION=="add", TEST=="state", ATTR{state}=="offline", ATTR{state}="online"

# vi /lib/udev/rules.d/80-hotplug-cpu.rules
SUBSYSTEM=="cpu", ACTION=="add", TEST=="online", ATTR{online}=="0", ATTR{online}="1"

Le premier pour la mémoire, le second pour le processeur.

 

Modification de la configuration de la vm

Cette fois-ci c'est dans le fichier /etc/pve/qemu-server/xxx.conf qu'il faut faire la modification :

hotplug: memory,cpu
numa: 1
cores: 2
sockets: 2
vcpus: 2

On redémarre la vm.

Test

Pour la mémoire la modification peut se faire via l'interface de Proxmox et est prise en compte en instantané.

Pour les CPU c'est un peu différent. A l'heure actuelle en version 4 il n'est pas possible de modifier à chaud le nombre de CPUs via l'interface il faut passer en ligne de commande :

qm set xxx -vcpus 4
update VM xxx: -vcpus 4

En fait l'astuce est de définir un nombre maximum de cpus alloué à la vm avec cores et sockets par exemple ici 2*2=4 et de démarrer la vm avec un nombre inférieur avec le paramètre vcpus.

Unplug

Il n'est pas possible de revenir en arrière à chaud pour la mémoire :

"memory: hotplug problem - memory unplug is not yet available"

 

Hotplug disque et réseau

Pour ces deux cas là c'est beaucoup plus simple, il suffit d'ajouter les options disk et network au paramètre hotplug dans le fichier de conf de la vm, ce qui donne :

hotplug: memory,cpu,disk,network
numa: 1
cores: 2
sockets: 2
vcpus: 2

Il est alors possible de rajouter/supprimer des disques ou des cartes réseau. Il faudra bien sur ensuite les configurer dans la vm.

On ne peut bien sur pas supprimer le disque sur lequel la vm à démarré :

"virtio0: hotplug problem - can't unplug bootdisk"