Connexion
Abonnez-vous

Proxmox VE 7.0 : comment ajouter du stockage via NVMe/TCP

À quand les baies full flash abordables ?

Proxmox VE 7.0 : comment ajouter du stockage via NVMe/TCP

Le 02 novembre 2021 à 17h08

Un serveur permettant de virtualiser des systèmes peut embarquer des périphériques de stockage, mais ce n'est pas toujours le cas ou ils ne sont pas toujours assez nombreux. Il est donc courant d'en ajouter via le réseau et iSCSI. Mais comment faire de même avec NVMe/TCP ? Faisons le test avec Proxmox VE 7.0.

Qu'il s'agisse d'un petit serveur personnel, d'un « Home Lab » ou d'une installation professionnelle, la virtualisation exige des ressources diverses et parfois nombreuses. En effet, il faut avoir assez de cœurs CPU, de mémoire, de périphériques mais aussi de stockage pour équiper l'ensemble des machines virtuelles (VM).

NVMe/TCP : ajoutez des SSD PCIe distants à vos serveurs

Certaines sont forcément locales comme le CPU ou la mémoire (pour le moment), d'autres peuvent déjà être déportées sur le réseau comme le stockage. Historiquement, tous les hyperviseurs permettent de gérer différents « datastore », des HDD/SSD où l'on place les images système des VM, parfois depuis un partage réseau local. 

Pour des raisons de performances et de simplicité, iSCSI est très utilisé. Il s'agit d'un protocole réseau en mode bloc, permettant de mettre à disposition un périphérique de stockage sur le réseau, de l'ajouter à votre hyperviseur et de le gérer comme s'il s'agissait d'un composant local. Dans le monde professionnel, certains ont également recours à des technologies plus avancées telles que Ceph, qui dispose de son propre block storage (RBD).

Mais lorsque l'on veut profiter des débits élevés de SSD PCIe (NVMe), on passe le plus souvent par NVMe-oF. Une solution qui nécessitait encore récemment du matériel coûteux et était donc réservée aux entreprises. Mais cela n'est plus le cas via NVMe/TCP qui est accessible à tous, géré par de nombreuses distributions Linux

Nous avons donc tenté notre chance avec notre serveur HPE ProLiant DL365 Gen10 Plus v2 sous Proxmox VE 7.0.

Proxmox VE 7.0 : NVMe/TCP géré, mais pas via l'interface

Ce système peut utiliser de nombreuses solutions de stockage distantes. Dans la section Storage du « Datacenter » on peut ainsi ajouter des partages CIFS/Samba, NFS, mais aussi des périphériques via iSCSI, dont ZFS/iSCSI :

Proxmox Datastore

Mais comme vous pouvez le voir dans la capture ci-dessus, aucune solution NVMe-oF n'est clairement mise en avant ou proposée, pas plus dans la documentation. Il faut donc passer par le shell du serveur (nommé proxmoxve dans notre cas). S'il est à jour, vous pourrez vérifier que les modules nécessaires sont actifs :

cat /boot/config-`uname -r` | grep NVME

Si c'est le cas vous verrez apparaître les lignes suivantes :

CONFIG_NVME_CORE=m
CONFIG_NVME_TCP=m

Il suffit ensuite de les charger et d'installer l'outil de gestion des périphériques NVMe (retirez sudo si vous êtes root) :

sudo apt update && sudo apt full-upgrade -y && sudo apt autoremove
sudo apt install nvme-cli

sudo modprobe nvme
sudo modprobe nvme-tcp

Pour vérifier que tout fonctionne tapez la commande suivante :

sudo nvme list

Connexion aux SSD PCIe (NVMe)

Vous verrez apparaître la liste des SSD PCIe (NVMe) de votre machine. Elle sera vide si vous n'en avez pas. Pour la suite, lancez le serveur contenant vos SSD PCIe (NVMe) et partagez-les sur le réseau via NVMe/TCP. Nous ne reviendrons pas sur ce sujet, qui a déjà fait l'objet d'un article contenant un script facilitant sa mise en place.

Dans notre cas, nous avons monté une machine équipée d'un processeur Ryzen 5 5600X avec 64 Go de mémoire sur une carte mère Gigabyte X570 Aorus Master, le tout fonctionnant sous Debian 11. Une carte Hyper M.2 d'ASUS y est configurée avec quatre SSD Samsung 970 EVO de 256 Go, chacun partagé individuellement via NVMe/TCP.

Nous y avons installé une carte réseau Intel X520-DA2 à 10 Gb/s que l'on trouve pour 150 euros environ, fonctionnant sur un port PCIe 2.0 x8 ou un PCIe 3.0 x4. Une installation permise par l'utilisation d'une carte graphique GeForce GT 710 PCIe 2.0 x1 pour profiter pleinement du  réseau et du PCIe x16 pour nos SSD.

Pour ajouter un SSD via NVMe/TCP, rien de plus simple, une commande suffit :

sudo nvme connect -t tcp -a 192.168.0.42 -s 4420 -n nvme.server.0n1

Si vous voulez simplement vérifier ceux qui sont disponibles depuis un serveur :

sudo nvme discover -t tcp -a 192.168.0.42 -s 4420

Pensez à adapter cette commande à votre IP, port et NQN (le nom qui désigne le SSD sur le réseau). Faites-le autant de fois que vous avez de SSD. Vous pouvez aussi tous les connecter d'un coup :

sudo nvme connect-all -t tcp -a 192.168.0.42 -s 4420

Une fois terminé, vous devriez voir les SSD apparaître :

sudo nvme list
sudo nvme list-subsys

Si vous voulez déconnecter un SSD ou tous ceux qui sont connectés :

sudo nvme disconnect -n nvme.server.0n1
sudo nvme disconnect-all

Gérer les SSD depuis Proxmox VE 7.0

Si tout s'est bien passé, de nouveaux SSD seront visibles dans la section consacrée aux périphériques de stockage du serveur (Disks) dans l'interface de Proxmox VE 7.0. Il pourra être géré comme n'importe quel autre, formaté pour être utilisé individuellement ou dans un pool ZFS, pouvant stocker des images de VM, de conteneurs, ISO, etc.

C'est d'ailleurs tout l'intérêt d'un partage de type bloc comme le permet NVMe/TCP. Mais il y a ici une limite : ces SSD sont considérés comme des périphériques de stockage locaux, mais pas comme des périphériques PCIe locaux. Ainsi, ils ne peuvent pas être ajoutés à une machine virtuelle en passthrough par exemple.

Si c'est ce que vous souhaitiez faire, la solution est simple : connectez le SSD via NVMe/TCP depuis le système de la machine virtuelle. Cela suppose néanmoins qu'il soit compatible et exclut Windows pour le moment. 

NVMe/TCP Proxmox VE 7.0

Automatiser la connexion des SSD au démarrage du système

Bien entendu, ajouter manuellement les SSD à chaque (re)démarrage du serveur peut être fastidieux. La solution est donc d'automatiser cette étape en ajoutant les lignes de commande pour la connexion à un script lancé à chaque fois que Proxmox est initialisé. Pour cela tapez la commande suivante :

sudo nano /etc/rc.local

Cela édite un script qui peut être chargé à chaque démarrage. Il suffit donc d'y ajouter les lignes de connexion (nvme connect -t ...) et enregistrez (CTRL+X). S'il est vide lors de l'édition, c'est qu'il faut le créer de toutes pièces. Il doit ainsi au final ressembler au script suivant à adapter selon vos besoins :

#!/bin/sh -e

modprobe nvme
modprobe nvme-tcp

nvme connect-all -t tcp -a 192.168.0.42 -s 4420

exit 0

Il faut ensuite s'assurer qu'il est bien accessible à l'utilisateur root, gérer ses droits en le rendant exécutable :

sudo chown root:root /etc/rc.local
sudo chmod 700 /etc/rc.local

Si le serveur contenant les SSD est actif, votre serveur de virtualisation s'y connectera à chaque lancement. Vous pouvez aussi très bien placer ces commandes dans un script de votre choix à lancer manuellement. Vous pouvez aussi aller plus loin en développant un service pour systemd afin de pouvoir (dé)connecter vos SSD.

Notez que cette méthode doit fonctionner avec d'autres systèmes et hyperviseurs sur base GNU/Linux.

Commentaires (16)

Vous devez être abonné pour pouvoir commenter.

Abonnez-vous
votre avatar

Merci pour le tuto, pas encore eu l’occasion de tester NVMe/TCP avec Proxmox.



Au niveau perf, j’ai du mal à voir l’intérêt par rapport à du iSCSI, ça à l’air juste un peu plus relou à gérer non ?

votre avatar

NVMe/TCP tu envoies tes commandes NVMe à ton périphérique en direct (modulo l’encapsulation). iSCSI, tu as aussi toute la couche de conversion du protocole qui n’est pas natif au périphérique donc de la latence en plus, du débit en moins. Et iSCSI n’est pas moins relou, c’est juste plus intégré dans les interfaces en général.

votre avatar

En jetant un petit coup d’oeil j’ai pas l’impression que ce soit forcément nécessaire de trop bidouiller par rapport à iSCSI. C’est juste que le standard est encore assez jeune. Pour ce qui est des avantages, il faudra je pense qu’on attende des mesures de performances.

votre avatar

Les Optanes arrivent, le 25G est là, le 100G suivra (et les mesures qui iront avec :D)

votre avatar

Oui, quand je disais relou, je parlais du fait qu’en effet, c’était limite déjà tout prêt à l’emploi ^^
Sinon, merci pour les précisions, faudra que je teste à l’occasion, et voir le coût aussi :D

votre avatar

Tu entends quoi par le coût ? Parce que c’est gratuit :D (mais oui il faut un serveur avec les SSD NVMe à partager si c’est ça que tu voulais dire).

votre avatar

C’est ce que je voulais dire ^^ voir si cette solution, pour du gros stockage a un bon rapport cout / perf (pour 100To environ)

votre avatar

La perf dépendra essentiellement de ton réseau, mais ce sera plus facile de taper les 10 à 50 Gb/s avec du NVMe que du HDD et le fait d’être en protocole natif aide à réduire les impacts latence/débit.

votre avatar

Bonjour, c’est mon premier commentaire, soyez sympa.
Coté serveur j’avais pensé a une autre approche pour le stockage sur SSD nvme, c’est plus chère mais c’est hotplug, niveau performance ça devrait être mieux et on ne s’embête pas avec le port de la carte graphique.
Les 2 liens suffiront a comprendre mon approche :
https://icydock.fr/goods.php?id=385
https://www.asrockrack.com/general/productdetail.asp?Model=ROMED4ID-2T#Specifications
qu’en pensez vous ?

votre avatar

Oui, avec un EPYC, tout de suite il y a moins de soucis côté nombre de lignes PCIe ;) Attention par contre au coût des câbles SlimSAS/Oculink qui peut vite ne pas être négligeable. Parfois tu as plus vite fait de regarder du côté d’un serveur précâblé comme ça. Tout dépend de l’aspect pratique et des contraintes du projet (budget, format, etc.)

votre avatar

merci je ne l’avais pas vu celui là, bonne idée.

votre avatar

Pas de quoi, le catalogue ASR peut être parfois un peu labyrinthique vu qu’on a pas certains critères de tri (comme le nombre de baies S-ATA/PCIe) :transpi:

votre avatar

David_L a dit:


Les Optanes arrivent, le 25G est là, le 100G suivra (et les mesures qui iront avec :D)


Et le 40G ? Avec quel switch en 100G ? :transpi:



Déjà voir ce que ça donne en 10G et 25G, c’est un bon début

votre avatar

Perso la question que je me pose vis à vis de vos futurs tests, c’est l’importance du CPU pour votre “baie full flash maison”. Est-il nécessaire d’avoir un CPU aussi costaud, et si non, jusqu’à quel point possible de tester ?

votre avatar

(reply:61300:Rasta Knight)


C’est un sujet qu’on abordera très rapidement ;)

votre avatar

Merci !

Proxmox VE 7.0 : comment ajouter du stockage via NVMe/TCP

  • NVMe/TCP : ajoutez des SSD PCIe distants à vos serveurs

  • Proxmox VE 7.0 : NVMe/TCP géré, mais pas via l'interface

  • Connexion aux SSD PCIe (NVMe)

  • Gérer les SSD depuis Proxmox VE 7.0

  • Automatiser la connexion des SSD au démarrage du système

Fermer