GERBELOTBARILLON.COM

Parce qu'il faut toujours un commencement...

Proxmox

Clustering Proxmox Disques réseau partagés Gestion du stockage Cluster ZFS Haute disponibilité Cluster Hyper Convergé Effacer des disques

Introduction


La virtualisation n'est plus aujourd'hui réservée à une infrastructure à base de Microsoft Hyper-V ou VMWare Vsphere. Il en existe beaucoup d'autres, dont celui que je vais déployer dans les pages qui suivent : Proxmox.

Proxmox est un hyperviseur de type 1, pouvant être utilisé en mode bare-metal donc directement installable sur une infrastructure matérielle et capable de la piloter. A contrario, les systèmes de virtualisation orientés utilisateurs comme VirtualBox ou VMWare Player/Workstation, requièrent pour leur part un système d'exploitation sur lequel s'appuyer pour fournir des solutions de virtualisation, certes fonctionnelles, mais moins efficaces car devant être traduite par l'OS qui les supporte.

Proxmox est basé sur un noyau Debian embarquant les systèmes Qemu pour la virtualisation, ainsi que KVM, la gestion des containers, une interface de gestion, la possibilité de réaliser des sauvegardes directement depuis cet environnement, ainsi que beaucoup d'autres choses telles que les clusters et le passthrough pour améliorer la gestion des accès disques et la sécurité des données et des accès.

Proxmox est un système extrêmement complet, mis à disposition sous forme de kit d'installation communautaire, donc sans support autre que l'Internet. Il existe évidement une autre solution d'usage, faisant appel à un mode de licence et de support payant, garants de réactivité importante dans les résolutions de problèmes et le suivi des évolutions de version.

Pour nos besoins généraux, la solution communautaire est largement suffisante et nous permet de réaliser absolument tout ce dont nous avons besoin, voire même plus encore.

Clustering Proxmox


Création du cluster

Une fois que Proxmox est installé, il est relativement simple de créer un cluster hyper convergé avec cet hyperviseur. Pour la suite des opérations, nous appellerons noeud tout serveur physique composant le cluster.

Depuis le serveur qui va être le premier noeud du cluster, cliquez sur le menu Datacenter, puis Cluster et Create a cluster.

Renseignez le nom du cluster et l'IP avec laquelle vous souhaitez communiquer avec le cluster, cliquez sur le bouton Create

Toujours dans la rubrique Cluster, cliquez sur le bouton Join Information pour obtenir la clé de connexion au cluster et appuyez sur le bouton Copy information pour la stocker dans le presse papier.

ATTENTION : pour joindre un cluster, le serveur que vous allez ajouter doit être vierge de toute VM ou de tout container.

Maintenant, depuis le deuxième serveur, celui qui va être intégré au cluster que nous venons de mettre en place, toujours depuis son menu Datacenter, cliquez sur la rubrique Cluster et sur le bouton Join a cluster.

Copiez la clé obtenue lors de l'étape précédente, saisissez le mot de passe du premier serveur et cliquez sur le bouton Join en bas à droite de cette fenêtre. Le bouton portera le nom que vous aviez défini pour le cluster au départ des opérations.

A la fin des opérations, après probablement une déconnexion de l'interface de gestion de Proxmox, les deux noeuds du cluster devraient apparaître dans la liste des serveurs.

Migration des VMs

L'intérêt du cluster est de pouvoir déplacer les machines virtuelles - ou les containers - d'un noeud sur l'autre pour réaliser des opérations de maintenance par exemple. Pour cela il suffit de cliquer sur une VM, de choisir le noeud de destination et de cliquer enfin sur le bouton Migrate.

Suppression du cluster

Sur le noeud à conserver, ouvrir un shell et saisir les commandes suivantes :

$ pvecm nodes
Affichage de la liste des noeuds disponibles dans le cluster

$ pvecm delnode <node>
Supprime la référence du noeud du cluster

$ pvecm expected 1
Informe le noyau qu'il n'y a pas de quorum restant

$ systemctl stop pve-cluster
Provoque l'arrêt du cluster

$ pmxcfs -l
Démarre le cluster en mode local

$ rm -f /etc/pve/cluster.conf /etc/pve/corosync.conf
Suppression des fichiers de configuration du cluster

$ rm -f /etc/cluster/cluster.conf /etc/corosync/corosync.conf
Suppression des fichiers de configuration du cluster

$ rm /var/lib/pve-cluster/.pmxcfs.lockfile
Suppression du fichier qui contenait la clé de jonction au cluster

$ systemctl stop pve-cluster
Arrêt du cluster

$ reboot
		
!une fois le système redémarré, cliquez sur le lien Datacenter en haut à gauche du menu, puis sur Cluster. Il ne devrait plus y avoir d'information relative au cluster.

Disques réseau partagés


Pour Container Linux

Durant la création du container, il faut décocher la case Unprivileged container . Dans notre exemple nous partons sur une installation Ubuntu standard, template que nous avions au préalable chargé dans le repository local de notre serveur Proxmox. . Tout le reste a été paramétré basiquement pour les besoins de la démonstration.

Une fois le container créé (en quelques secondes si vous avez une machine convenable), et avant de démarrer le container, allez dans Options > Features puis appuyez sur le bouton Edit. . Cochez ensuite les options de partage que vous souhaitez prendre en compte. Dans notre cas, nous n'avons qu'un partage Samba donc nous ne prenons que SMB/CIFS. . Cela modifier les Features en précisant que vous allez disposer d'un montage de type CIFS. .

Pour environnement Linux, VM ou container

Cependant, pour pouvoir utiliser un montage de disque différent de ceux généralement rencontrés sur les environnements Linux/Unix (NFS et FUSE par exemple), il faudra disposer du helper mount.cifs pour utiliser le partage SAMBA/CIFS. Si vous n'en disposez pas, et donc vous n'avez pas le fichier /sbin/mount.cifs, il vous faut l'installer par

$ sudo apt get update
$ sudo apt get install cifs-utils

Commencez par créer un répertoire pour accueillir le point de montage du partage.

$ sudo mkdir /mnt/sharedir
. Pour réaliser le montage, lancez la commande en tant que root
$ sudo mount -t cifs -o username=share_user //windows_share_ip/share_name /mnt/sharedir
Durant l'exécution, vous devriez recevoir une demande de mot de passe.

Vous pouvez également fournir le mot de passe dans le commande mount par

$ sudo mount -t cifs -o username=share_user,password=share_password //windows_share_ip/share_name /mnt/sharedir

Pour accéder à un partage sur un domaine :

$ sudo mount -t cifs -o username=share_user,domain=windows_domain,password=share_password //windows_share_ip/share_name /mnt/sharedir

Pour des raisons de sécurité, fournir des mots de passe sur une ligne de commande est peu recommandé. Il est conseillé de passer par un fichier contenant les credentials que vous seul pouvez lire. Le format est le suivant (en supposant que le fichier s'appelle /etc/wincreds) : username=share_user password=share_password domain=windows_domain Enregistrez le fichier et changez ses droits par

$ sudo chown root: /etc/wincreds
$sudo chmod 600 /etc/wincreds
Pour utiliser le fichier avec le montage il reste à faire
$ sudo mount -t cifs -o credentials=/etc/wincreds //windows_share_ip/share_name /mnt/sharedir

ATTENTION : par défaut le montage est propriété de root et les droits des fichiers sont de 0777. Les options dir_mode et file_mode de la commande mount permettent de gérer ces droits d'accès

$ sudo mount -t cifs -o credentials=/etc/wincreds,dir_mode=0755,file_mode=0755 //windows_share_ip/share_name /mnt/sharedir

Pour automatiser le montage, il faut inscrire l'équivalent de la ligne de commande de montage dans le fichier /etc/fstab. Pour cela,

$ sudo nano /etc/fstab
//windows_share_ip/share_name /mnt/sharedir cifs credentials=/etc/wincreds,file_mode=0755,dir_mode=0755 0 0
Pour activer l'accès au partage, soit il faut redémarrer le serveur soit il faut lancer la commande de montage à la main par
$ sudo mount -a

Une fois que le point de montage n'est plus utile, il est possible de le démonter en faisant

$ sudo umount /mnt/sharedir
Si la commande n'arrive pas à s'exécuter, avec
$ sudo fuser -m /mnt/sharedir
vous pouvez connaître le pid qui bloque et le supprimer par kill -9 pid.

Gestion du stockage


Stockage local sur le serveur Proxmox

Si vous avez Proxmox alors vous disposez d'un espace de stockage. Celui-ci peut être amené à évoluer en ajoutant des disques et Proxmox sait bien se débrouiller dans ce genre de situation. Il suffit juste de savoir comment faire...et cette page est là pour vous aider justement (c'est bien fait le hasard tout de même...)

Pour utiliser un disque, une fois inséré dans votre serveur, il faut que celui-ci soit vierge. Commencez par aller dans l'interface graohique pour voir si votre disque est bien reconnu et cliquez sur le noeud Proxmox > Disks. Cela va vous afficher la liste des disques et partitions pris en charge par Proxmox. Dans mon cas, un seul disque dur pour supporter l'OS et le stockage des VMs.

Commencez par trouver le disque physiquement dans la liste des disques disponibles. Lancez un shell et faîtes une commande d'initialisation de disque (remplacez /dev/sdb par le device de votre périphérique)

$ sudo fdisk /dev/sdb
. Pour supprimer la totalité des éléments de ce disque, faire g (pour une nouvelle partition gpt) et w pour écrire la table de partition. Revenez ensuite sur la page de la GUI de Proxmox, rechargez la page des disques pour le noeud en cours et vous devriez disposer d'un nouvel espace disque. Pour l'utiliser, vous pouvez créer un espace nommé Directory depuis Disks > Directory et validez quelques options de configuration comme le fait que le support est vierge... (obligatoire avec Proxmox pour presque toutes les opérations liées au stockage).

Stockage géré par un équipement externe de type NAS

Depuis le menu DataCenter de Proxmox, allez sur Storage et Add. Prenez l'option SMB/CIFS pour utiliser un partage réseau de type NAS. Identifiez-vous et sélectionnez le contenu que va gérer ce partage. Pour faire simple nous allons supposer que ce NAS va nous permettre de stocker l'intégralité des formats de stockage proposés (Disk image, ISO image, Container templates...). Le stockage ainsi défini pourra être utilisé depuis n'importe lequel des serveurs faisant partie d'un cluster par exemple.

Réaffectation de l'espace disque

Si vous supprimez un disque pour réaffecter l'espace disque à Proxmox (par exemple le disque local-lvm qui est dédié par défaut au thin provisionning pour les VMs), il faut exécuter les commandes de gestion du LVM depuis le shell du serveur en question. Nous allons supprimer le disque, puis redimensionner l'espace alloué au gestionnaire LVM et enfin redimensionner la partition.

$ lvremove /dev/pve/data
$ lvresize -l +100%FREE /dev/pve/root
$ resize2fs /dev/mapper/pve-root
En fonction du type de disque que vous avez supprimé, il ne faut pas oublier de préciser à Proxmox quels types de données peuvent être stockées sur cet espace agrandi. Pour cela aller sur Datacenter > Storage, sélectionner le storage à modifier et faire Edit. Dans la zone Content, choisir les types à autoriser sur ce storage.

Cluster ZFS


Le stockage ZFS peut être mis en High Availability et fonctionner comme le réplica d'Hyper-V. C'est ce que nous allons faire ici.

Mise en cluster

Il vous faut tout d'abord disposer d'un environnement avec 3 noeuds proxmox, de préférence avec chacun deux cartes réseau :

Chaque noeud doit également disposer d'au moins deux disques :

Pour monter le cluster, procédez comme suit. Sur chaque noeud devant participer au cluster, cliquez sur Datacenter > Cluster, puis :

Création du stockage ZFS

Le NOM utilisé pour le stockage ZFS DOIT ETRE LE MEME sur toutes les machines

Configurer le stockage

Faire Datacenter > Storage et choisir le stockage ZFS précédemment créé. Dans la combobox Nodes, sélectionner tous les noeuds disposant de ce stockage.

VM et Réplication

Lors de la création de VM, bien penser à affecter le stockage de cette VM sur le stockage ZFS que nous avons mis en place. Une fois la VM prête à l'emploi, il est possible de procéder à la gestion de sa réplication. Il faut aller sur VM > Replication > Add. Dans la fenêtre de paramétrage, vous pouvez spécifier le rythme de la réplication. Répétez l'opération autant de fois qu'il y a de VM et de serveurs à faire participer à la réplication.

Haute disponibilité

Datacenter > HA > Add et ajoutez la ou les VM créées pour que les réplications s'effectuent sur les serveurs concernés.

Haute disponibilité


Sur un cluster Proxmox, une VM peut être mise en mode haute-disponibilité. Ce que cela signifie ? Simplement que si jamais un noeud s'arrête, les VM qu'il exécute seront reprise en charge par un autre noeud du cluster. Le temps d'indisponibilité sera réduit au strict minimum, à savoir le transfert de la partie RAM des VM puisque normalement le stockage est censé se situer sur un espace partagé.

Pour mettre une VM en mode HA (High Availability) il suffit de sélectionner le noeud où se trouve la VM > HA et faire Add au niveau de la partie Ressources. ATTENTION : il faudra avoir signalé à Proxmox, dans la partie Datacenter > Options > HA Settings de basculer dans la policy shutdown_policy=migrate.

Cluster hyper convergé


En préambule à la configuration d'un cluster, sachez qu'il vous faut :

Nous utilisons un ensemble de 3 noeuds et le stockage s'effectue par l'intermédiaire du système de fichiers distribué Ceph. Sur le noeud 1, on clique sur Datacenter > Ceph > Install Ceph. Une fois l'installation terminée, Ceph nous propose la configuration de son environnement de réseau. Par défaut, Ceph dispose de deux réseaux :

Selon les configurations du nombre de cartes réseau disponibles, Ceph peut avoir les deux types de réseau portés par les mêmes matériels, donc les deux réseau définis logiquement de la même façon. Un cluster Proxmox lui-même peut être considéré comme un client Ceph. Enfin, dans la configuration du monitor, c'est un peu comme le quorum des autres modes de clustering, à savoir Proxmox va proposer par défaut le noeud 1 comme moniteur. C'est le seul choix valable pour le moment car Ceph n'est configuré que sur le noeud 1.

Il faut maintenant répéter les mêmes actions sur le reste des noeuds de votre cluster. Lors de la mise en place de Ceph sur les autres noeuds, il sera affiché que la configuration est déjà initialisée. C'est une bonne information car cela signale que les machines sont bien en phase avec la configuration attendue. Le warning sur la configuration de Ceph est lié au fait que le moniteur n'a pas été déclaré pour les autres noeuds. Pour cela, sur chaque noeud > Ceph > Monitor, puis bouton Create en sélectionnant le moniteur Ceph sur le noeud en cours d'installation. Le principe de Ceph est d'être son propre gestionnaire de cluster (vous libérant du principe de quorum) donc un moniteur sur chaque noeud Ceph est la bonne pratique.

Par contre, la notion de manager est différente. Son rôle est de gérer l'interface principale de la GUI Ceph et de porter l'IP d'accès. Il dispose de sa propre GUI installable depuis un shell lancé sur la machine portant le moniteur et

$ apt install ceph-mgr-dashboard
. Une fois l'installation réalisée, il faut activer le dashboard par
ceph mgr module enable dashboard
. Ensuite il faut créer un certificat autosigné par
ceph dashboard create-self-signed-cert
. Enfin il faut créer un utilisateur pour accéder à l'environnement Ceph par
echo MOT_DE_PASSE_SECURISE > passwd.txt
ceph dashboard ac-user-create admin -i passwd.txt administrator
. Il faut maintenant redémarrer le dashboard pour prendre en compte la nouvelle configuration
ceph mgr module disable dashboard
ceph mgr module enable dashboard

Effacer des disques


Lors de l'affectation de disques au stockage Proxmox, il est généralement conseillé de réaliser un effacement du disque avant son utilisation. En cliquant sur le nom de votre hyperviseur puis Disks, vous affichez la gestion des disques. Le bouton Wipe Disk se situe en haut à droite de l'interface.

Si vous obtenez une erreur du type sdx has a holder (500), cela va vous bloquer pour l'usage de ce disque. Les 3 solutions possibles à ma connaissance :

  1. Si le disque a fait partie d'un LVM, vérifiez la valeur de sortie de la commande pvs et supprimez le groupe de volumes présent sur le disque avec la commande vgremove
  2. Si le disque était plutôt un device-mapped (type Ceph par exemple), utilisez la commande dmsetup ls et supprimez le mapping avec la commande dmsetup remove <id du mapping>
  3. Si les solutions précédentes n'ont pas fonctionné, une version plus radicale existe :
    • sgdisk --zap-all /dev/sdx
    • readlink /sys/block/sdx
    • La ligne précédente va afficher un résultat du type
      ../devices/pci0000:00/0000:00:01.1/0000:01:00.0/host5/port-5:10/end_device-5:10/target5:0:10/5:0:10:0/block/sdx
    • echo 1 > /sys/block/sdx/device/delete
    • echo "---" > /sys/class/scsi_host/host5/scan
    La dernière ligne est construite à partir du hostid trouvé avec le readlink.