Chapitre 815 minIntermédiaire
iSCSI : un stockage en bloc pour les VM Proxmox
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- nommer les éléments d'une liaison iSCSI : initiateur, cible, portail, LUN ;
- créer une cible iSCSI sur un zvol avec l'assistant de TrueNAS ;
- isoler le trafic de stockage dans un VLAN dédié ;
- connecter Proxmox VE et y créer un stockage LVM partagé ;
- choisir entre NFS et iSCSI pour les disques des VM.
4 exercices corrigés1 schéma
iSCSI (Internet Small Computer Systems Interface) est un protocole qui transporte des commandes de disque SCSI dans des paquets TCP/IP : un serveur, l'initiateur, accède à un disque distant fourni par une baie, la cible, comme s'il était branché en local. C'est la façon la plus répandue de construire un SAN sur un réseau Ethernet ordinaire. Ce chapitre présente le vocabulaire d'iSCSI, crée une cible sur un zvol de srv-nas, isole le trafic dans un VLAN de stockage, puis connecte le cluster Proxmox VE de Sorbier et y crée un stockage LVM partagé pour les disques des VM.
Le vocabulaire d'iSCSI
| Terme | Définition | Chez Sorbier |
|---|---|---|
| Initiateur | Le client iSCSI, qui envoie les commandes SCSI | pve1, pve2 et pve3, avec le logiciel open-iscsi |
| Cible (target) | Le serveur iSCSI qui présente un ou plusieurs disques | La cible pve-vms de srv-nas |
| IQN (iSCSI Qualified Name) | Nom unique d'un initiateur ou d'une cible : iqn. + année-mois + domaine inversé + : + nom | iqn.2005-10.org.freenas.ctl:pve-vms |
| Portail (portal) | L'adresse IP et le port TCP où la cible écoute | 192.168.10.241:3260 |
| LUN | Un disque logique présenté par la cible, numéroté à partir de 0 | LUN 0 |
| Extent | Sur TrueNAS, ce qui se cache derrière un LUN : un zvol (Device) ou un fichier (File) | Le zvol vms/pve-vms |
| Groupe d'initiateurs | La liste des initiateurs autorisés à voir une cible | Les IQN de pve1, pve2 et pve3 |
| CHAP | Authentification facultative par secret partagé entre initiateur et cible | Non utilisé : VLAN isolé (voir plus bas) |
Le préfixe iqn.2005-10.org.freenas.ctl est le nom de base par défaut des cibles TrueNAS, hérité de FreeNAS ; il se change dans la configuration globale iSCSI. Côté Debian et Proxmox, l'IQN de l'initiateur est généré à l'installation d'open-iscsi, dans /etc/iscsi/initiatorname.iscsi.
Préparer le réseau de stockage
Le trafic iSCSI est lourd et sensible à la latence : une VM qui attend son disque se fige. On l'isole dans le VLAN 80 créé au chapitre 4, non routé, avec une carte réseau dédiée sur chaque hôte.
| Hôte | Interface de stockage | Adresse |
|---|---|---|
srv-nas | Port 10 GbE n° 2 | 192.168.10.241/28 |
pve1 | Port 10 GbE dédié, pont ou interface simple | 192.168.10.242/28 |
pve2 | Idem | 192.168.10.243/28 |
pve3 | Idem | 192.168.10.244/28 |
Les hôtes s'administrent par leurs adresses du VLAN 99 (192.168.10.213 à .215, cours Virtualisation) ; leur carte de stockage n'a pas de passerelle. Proxmox Backup Server (192.168.10.245) partage ce VLAN pour recevoir les sauvegardes, mais il n'est pas un initiateur de la cible.
Les trames jumbo. Un MTU de 9000 octets réduit le nombre de paquets et la charge des processeurs pour les gros transferts. Il faut que tous les équipements du chemin l'acceptent : les cartes du NAS et des hyperviseurs, et les ports du switch (sur un Catalyst, system mtu jumbo 9198 en configuration globale, selon le modèle). Vérifie de bout en bout depuis pve1, en interdisant la fragmentation (8972 octets de données ICMP + 28 octets d'en-têtes = 9000) :
ping -M do -s 8972 -c 3 192.168.10.241
Si un équipement du chemin est resté à 1500, la commande échoue avec un message du type « message too long » : mieux vaut rester à 1500 partout qu'avoir un MTU incohérent, qui produit des blocages difficiles à diagnostiquer.
Pourquoi pas de CHAP ? CHAP authentifie l'initiateur par un secret partagé (12 à 16 caractères sur TrueNAS), mais ne chiffre rien, et l'interface de Proxmox ne le gère pas : il faut le configurer dans /etc/iscsi/iscsid.conf sur chaque nœud. Dans un VLAN de stockage isolé où seuls le NAS et les hyperviseurs sont branchés, le groupe d'initiateurs suffit à filtrer. Dès que le réseau de stockage est partagé avec d'autres machines, active CHAP (voire CHAP mutuel, où la cible s'authentifie aussi).
Créer la cible sur TrueNAS
Relever les IQN des hyperviseurs. Sur chaque nœud :
cat /etc/iscsi/initiatorname.iscsi
## DO NOT EDIT OR REMOVE THIS FILE!
## If you remove this file, the iSCSI daemon will not start.
## If you change the InitiatorName, existing access control lists
## may reject this initiator. The InitiatorName must be unique
## for each iSCSI initiator. Do NOT duplicate iSCSI InitiatorNames.
InitiatorName=iqn.1993-08.org.debian:01:5f3a2b1c9d8e
L'assistant de TrueNAS. Shares, widget Block (iSCSI) Shares Targets, bouton Wizard :
- Target : Create New, nom
pve-vms(minuscules, chiffres, points, tirets et deux-points ; 64 caractères au plus). - Extent : nom
pve-vms, Extent Type Device, Device Create New ; choisir le dataset parentvms, nommer le zvolpve-vms, Size 1.5 TiB. Pour la plateforme, choisir celle d'un système moderne (blocs de 4 Kio), adaptée à Linux et donc à Proxmox. - Protocol Options : créer un portail avec l'adresse
192.168.10.241seulement (pas l'interface du VLAN 20), port 3260 par défaut. - Initiator : saisir les trois IQN de
pve1,pve2etpve3, en validant chacun par Entrée. Laisser ce champ vide autoriserait tous les initiateurs. - Save, puis accepter le démarrage du service iSCSI (System > Services, iSCSI, Start Automatically).
L'écran Configure du même widget détaille ensuite chaque élément créé : la configuration globale (nom de base des cibles), les portails, les groupes d'initiateurs, les accès autorisés (CHAP), les cibles, les extents et les associations entre cibles et extents.
Connecter Proxmox VE
Étape 1 : le stockage iSCSI. Datacenter > Storage > Add > iSCSI :
| Champ | Valeur |
|---|---|
| ID | nas-iscsi |
| Portal | 192.168.10.241 |
| Target | iqn.2005-10.org.freenas.ctl:pve-vms (proposée dans la liste après lecture du portail) |
| Nodes | Tous |
| Use LUNs directly | Décoché |
En ligne de commande, la découverte se teste avec pvesm scan iscsi 192.168.10.241. Une fois le stockage ajouté, chaque nœud ouvre une session vers la cible :
iscsiadm -m session
tcp: [1] 192.168.10.241:3260,1 iqn.2005-10.org.freenas.ctl:pve-vms (non-flash)
Le LUN apparaît comme un nouveau disque sur chaque nœud (lsblk affiche un disque de 1.5T, c'est-à-dire 1,5 TiB, soit environ 1,65 To, de modèle iSCSI Disk).
Étape 2 : le groupe de volumes LVM partagé. On n'utilise pas le LUN directement : la documentation de Proxmox recommande d'y créer un groupe de volumes LVM, dans lequel chaque disque de VM devient un volume logique. Datacenter > Storage > Add > LVM :
| Champ | Valeur | Rôle |
|---|---|---|
| ID | nas-lvm | Nom du stockage des disques de VM |
| Base storage | nas-iscsi | Le stockage iSCSI de l'étape 1 |
| Base volume | Le LUN 0 proposé dans la liste | Le disque sur lequel créer le groupe de volumes |
| Volume group | vg_nas | Nom du groupe de volumes créé sur le LUN |
| Content | Disk image, Container | Disques de VM et de conteneurs |
| Shared | Coché | Indispensable : les trois nœuds voient le même groupe de volumes |
| Wipe Removed Volumes | Selon la politique | Efface un volume supprimé avant de libérer sa place (lent) |
Le fichier /etc/pve/storage.cfg contient alors :
iscsi: nas-iscsi
portal 192.168.10.241
target iqn.2005-10.org.freenas.ctl:pve-vms
content none
lvm: nas-lvm
vgname vg_nas
base nas-iscsi:0.0.0.scsi-36589cfc000000a1b2c3d4e5f60718293
content images,rootdir
shared 1
La ligne base désigne le LUN par son identifiant, généré par la baie : le tien sera différent. content none sur le stockage iSCSI signifie qu'on ne range rien directement dessus.
Pourquoi LVM « partagé » ne casse rien ? Le chapitre 1 l'a dit : deux serveurs qui écrivent sur le même disque le détruisent. Ici, chaque disque de VM est un volume logique distinct, utilisé par un seul nœud à la fois, celui où tourne la VM ; et c'est le cluster Proxmox qui verrouille les modifications du groupe de volumes (création, suppression, redimensionnement d'un volume). Les nœuds partagent le disque sans jamais écrire au même endroit.
Ce qu'on gagne. Une VM dont le disque est sur nas-lvm peut migrer à chaud de pve1 vers pve2 sans copier son disque, en quelques secondes ; et si pve1 tombe, la haute disponibilité de Proxmox la redémarre sur pve2 ou pve3. Elle le peut parce que les deux nœuds restants gardent la majorité des votes du cluster, le quorum (2 sur 3). Avec deux nœuds seulement, il faut un troisième vote (QDevice) pour garder le quorum ; sans lui, la HA ne redémarre rien (cours Haute disponibilité et Virtualisation).
Les limites. Le LVM partagé est « épais » : chaque disque de VM occupe toute sa taille dès sa création. Les snapshots de VM sur LVM existent depuis Proxmox VE 9 sous forme de chaînes de volumes (option Allow Snapshots as Volume-Chain du stockage), mais la fonction est toujours en aperçu technologique dans Proxmox VE 9.2 : ne la mets pas en production. Pour protéger les VM, on s'appuie sur les sauvegardes de Proxmox Backup Server et sur les snapshots du zvol, côté TrueNAS (chapitre 9).
Plusieurs chemins : le multipath
Avec une seule carte et un seul switch, la panne du câble, du port ou du switch coupe l'accès des VM à leurs disques. Le multipath (MPIO) utilise deux chemins indépendants, deux cartes sur chaque hôte, deux switchs, deux adresses de portail sur le NAS, et bascule de l'un à l'autre, voire répartit la charge entre eux. Sur Proxmox VE, il s'appuie sur le paquet multipath-tools. C'est l'étape suivante de la redondance du stockage, une fois le reste en place ; la redondance du NAS lui-même relève de la haute disponibilité (deux contrôleurs, dans l'édition Enterprise) ou de la réplication.
NFS ou iSCSI pour les disques des VM ?
| Critère | NFS | iSCSI + LVM partagé |
|---|---|---|
| Mise en place | Simple : un export, un stockage | Plus de pièces : cible, extent, initiateurs, groupe de volumes |
| Format des disques | qcow2 (ou raw) dans des fichiers | Volumes logiques bruts |
| Snapshots de VM dans Proxmox | Oui, avec qcow2 | Aperçu technologique seulement (chaînes de volumes) |
| Provisionnement fin | Oui | Non (volumes épais) |
| Visibilité côté NAS | Chaque disque est un fichier qu'on voit et restaure | Un seul gros zvol opaque |
| Performances | Bonnes ; sensibles aux écritures synchrones (vdev log conseillé) | Très bonnes, latence faible |
| Multipath | Possible avec NFSv4.1 (sessions), plus rare | Natif et éprouvé |
Les deux sont des choix défendables à l'examen, à condition de les justifier. Chez Sorbier, Antoine choisit iSCSI pour les disques des VM (performances sur SSD, chemin vers le multipath) et NFS pour les ISO, les modèles et la copie de secours des sauvegardes (fichiers, simplicité). Le cours Virtualisation part de l'autre choix, les disques des VM en qcow2 sur NFS : les deux stockages coexistent sans difficulté sur le même TrueNAS, et la comparaison ci-dessus sert justement à défendre l'un ou l'autre.
Exercices
Exercice 1 sur 4 Le vocabulaire en situation Réussi À revoir
Dans la phrase suivante, nomme chaque élément souligné entre crochets : « [pve2] se connecte à [192.168.10.241:3260] pour atteindre [iqn.2005-10.org.freenas.ctl:pve-vms], qui lui présente [le disque n° 0], adossé à [vms/pve-vms]. »
Voir la réponseMasquer la réponse de l'exercice 1
pve2 : l'initiateur ; 192.168.10.241:3260 : le portail ; iqn.2005-10.org.freenas.ctl:pve-vms : l'IQN de la cible ; le disque n° 0 : le LUN 0 ; vms/pve-vms : le zvol qui sert d'extent (de type Device).
Tu avais trouvé ?
Exercice 2 sur 4 Le nœud qui ne voit rien Réussi À revoir
Après l'ajout du stockage iSCSI, pve1 voit le LUN mais pve2 ne voit rien, et iscsiadm -m session n'y affiche aucune session. Le ping de pve2 vers 192.168.10.241 fonctionne. Donne la cause la plus probable et la correction.
Voir la réponseMasquer la réponse de l'exercice 2
Le groupe d'initiateurs de la cible ne contient sans doute que l'IQN de pve1 (ou celui de pve2 a été mal recopié). La cible refuse alors la connexion de pve2, bien que le réseau fonctionne.
Correction : lire l'IQN exact de pve2 dans /etc/iscsi/initiatorname.iscsi, l'ajouter au groupe d'initiateurs de la cible dans TrueNAS (Shares > Block (iSCSI) Shares Targets > Configure, onglet des initiateurs), puis relancer la connexion (désactiver et réactiver le stockage, ou iscsiadm -m discovery -t sendtargets -p 192.168.10.241 suivi de iscsiadm -m node --login).
Tu avais trouvé ?
Exercice 3 sur 4 Les trames jumbo Réussi À revoir
Moussa a réglé un MTU de 9000 sur srv-nas et sur pve1, mais pas sur le switch. Les sessions iSCSI s'ouvrent, puis les VM se figent dès qu'elles écrivent beaucoup. Explique, et donne la commande qui l'aurait montré.
Voir la réponseMasquer la réponse de l'exercice 3
Les petits paquets (ouverture de session, commandes courtes) passent ; les gros paquets de 9000 octets sont rejetés par le switch, resté à 1500 : les transferts de données échouent ou se répètent sans fin, et les VM attendent leurs écritures. C'est le symptôme typique d'un MTU incohérent sur le chemin.
ping -M do -s 8972 192.168.10.241 depuis pve1 aurait échoué. Correction : passer les ports du switch en trames jumbo (ou revenir à 1500 partout), puis refaire le test.
Tu avais trouvé ?
Exercice 4 sur 4 Défendre un choix Réussi À revoir
Le jury d'E6 te demande pourquoi tu as choisi iSCSI plutôt que NFS pour stocker les disques des VM, et quelles limites tu connais à ton choix. Rédige une réponse de quelques lignes.
Voir la réponseMasquer la réponse de l'exercice 4
Exemple de réponse : « J'ai choisi iSCSI parce que les disques des VM demandent surtout des IOPS et une latence faible : iSCSI fournit un accès en mode bloc, sans couche de système de fichiers côté NAS, et ouvre la voie au multipath. Avec un groupe de volumes LVM partagé, les trois nœuds Proxmox voient le même stockage, ce qui permet la migration à chaud et la haute disponibilité. Les limites : les volumes LVM sont épais, il n'y a pas de snapshots de VM en production côté Proxmox (la fonction est encore en aperçu), et le zvol est opaque côté NAS. Je compense par des sauvegardes quotidiennes sur Proxmox Backup Server et par des snapshots du zvol toutes les quatre heures sur TrueNAS, répliqués à Marseille. »
Tu avais trouvé ?