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.
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.
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.
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.
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. .
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.
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).
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.
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.
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.
Il vous faut tout d'abord disposer d'un environnement avec 3 noeuds proxmox, de préférence avec chacun deux cartes réseau :
Pour monter le cluster, procédez comme suit. Sur chaque noeud devant participer au cluster, cliquez sur Datacenter > Cluster, puis :
Le NOM utilisé pour le stockage ZFS DOIT ETRE LE MEME sur toutes les machines
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.
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.
Datacenter > HA > Add et ajoutez la ou les VM créées pour que les réplications s'effectuent sur les serveurs concernés.
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.
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 :
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
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 :
pvs
et supprimez le groupe de volumes
présent sur le disque avec la commande vgremove
dmsetup ls
et supprimez le
mapping avec la commande dmsetup remove <id du mapping>