Capensis.fr
Support professionnel

Nouveautés, installation et configuration de Proxmox 5.2

kvm
proxmox
lxc

#1

Sommaire

1 Contexte
2 ProxMox, qu’est-ce que c’est ?
3 Fonctionnalités
4 En bref, quoi de neuf ?
5 Téléchargement
6 Installation
7 Configuration post-installation
8 Utilisation de Proxmox
9 L’interface et ses différentes options :
… 9.1 - Les différents volets
… 9.2 - Le réseau
… 9.3 - Le stockage
10 Les VMs en émulation complète
11 Les VMs en paravirtualisation
12 Les nouveautés plus en détail :
… 12.1 - Généralités
… 12.2 - Stockage distribué et SaMBa
… 12.3 - Let’s Encrypt
… 12.4 - Cloud Init
… 12.5 - Le Clustering et la Haute Disponibilité
13 Conclusion


1. Contexte

Comme vous le savez sans doute déjà, il existe (dans les grandes lignes) deux types de virtualisation:

  • L’émulation, aussi appelée “Virtualisation complète”.
    Dans ce cas de figure, on émule complètement une machine via un logiciel sur son ordinateur. La machine virtuelle n’aura pas “conscience” d’être virtualisée, car elle utilisera son propre matériel et toutes ses couches logiciels de manière indépendante.
    L’isolation est très bonne, et si la VM plante, l’hôte ne sera pas impacté. En revanche, la consommation de ressources est conséquente puisque l’hôte doit tout émuler : carte réseau, contrôleur de disque, dans certains cas le CPU, etc. .
    Les logiciels pour faire de l’émulation sont par exemple : Virtualbox, Vmware Workstation …

  • Les containers :
    Il s’agit d’une technologie essentiellement linuxienne, dans laquelle on partage le même kernel entre l’hôte et les VMs, et le reste de l’environnement est séparé du système hôte par un chroot amélioré.
    Les performances sont très bonnes car on réutilise le matériel et on fait l’économie davoir à exécuter un kernel supplémentaire par VM, néanmoins si une VM “s’emballe” (consomme trop de ressources, plante, fait un kernel panic …), alors toutes les autres VMs, voire l’hôte seront potentiellement impactés.

Les logiciels permettant la “conteneurisation” sont par exemple: OpenVZ, LXC, LXD, BSD Jail …
Dans les deux cas décrits ici, les VMs doivent s’exécuter sur une machine hôte.
Si cet hôte est dédié à l’hébergement de VMs, on le désigne alors comme un hyperviseur.

Parmi les hyperviseurs du marché, citons VMware Vsphere, KVM, et … Proxmox !

NOTA BENE : Docker fonctionne sur des containers mais il s’agit d’un cas particulier, que nous évoquerons plutôt lors d’un prochain billet de blog.

2. Proxmox, qu’est-ce que c’est ?

Proxmox Virtual Environment (c’est son nom complet, généralement abrégé en PVE) est une solution de virtualisation libre (un hyperviseur), basée sur Debian GNU/Linux. Le code source est publié sous licence GNU GPL v3.
C’est une solution de type “bare-metal”, c’est-à-dire qu’elle s’installe directement sur le matériel, par opposition aux solutions logicielles nécessitant une couche d’abstraction par rapport au matériel.
Les machines virtuelles gérées par Proxmox sont indifféremment des émulations KVM et des conteneurs Linux LXC.

Proxmox VE est intégralement libre (donc open-source) et administrable à l’aide d’une interface web sans avoir besoin d’installer de client spécifique sur les machines des administrateurs.
Ici comme ailleurs, notez bien que ‘libre’ ne veut pas forcément dire ‘gratuit’ : "it’s free as in ‘free speech’, not free as in ‘free beer’ :wink: . Les développeurs chez Proxmox VE doivent bien gagner leur vie eux aussi, c’est pourquoi vous êtes invités une fois l’installation finalisée de leur produit gratuit, à bien vouloir souscrire un contrat de support, qui lui est payant à l’instar de ce qui se pratique chez RedHat .
Il reste donc tout à fait possible d’installer un hyperviseur Proxmox gratuitement -et c’est ce que nous allons faire. Si néanmoins vous envisagez ultérieurement d’en faire un usage professionnel, il sera toujours possible de souscrire un contrat de support et d’en entrer le n° dans votre hyperviseur.

C’est un produit autrichien: leur communication se fait donc de préférence en anglais, voire en allemand.

3. Fonctionnalités :

Proxmox VE dispose de fonctionnalités avancées, alliant puissance et souplesse d’utilisation :

  • Système bare-metal basé sur Debian (actuellement en version 9.4)
  • Administration complète via une interface Web
  • Support de Linux KVM et Linux LXC
  • Mode clustering avec haute disponibilité
  • Console VNC intégrée en HTML5
  • Support de stockages locaux (ext4, ZFS, LVM, LVM-thin)
  • Support de stockages distants et/ou partagés (NFS, CIFS, iSCSI, GlusterFS, Ceph … )
  • Snapshots et migrations à chaud des machines virtuelles
  • Fonctionnalités de sauvegarde des machines virtuelles
  • Gestion des permissions (utilisateurs, groupes, pools)
  • Support de LDAP et Active Directory
  • Support réseau avancé (Bonding, VLAN, …)
  • Firewall intégré

Les fonctionnalités sont très nombreuses, les énumérer toutes ici ne servirait pas à grand-chose.
Je vous invite à aller consulter le site internet de Proxmox pour plus de détails :
https://www.proxmox.com/en/proxmox-ve

… Mais pour résumer brièvement les nouveautés de cette version de Proxmox VE :

4. En bref, quoi de neuf ? :

  • Basée sur Debian Stretch 9.4.
  • Kernel 4.15.17, assez récent puisqu’on en est actuellement au 4.18.5 .
  • Ceph 12.2.5 (Luminous LTS, stable), packagé spécifiquement par Proxmox.
  • ZFS 0.7.8
  • Support de Cloudinit via l’interface graphique. Cloudinit est un mécanisme universel sous Linux permettant de configurer votre VM dès son instanciation .
  • Administration du cluster et de ses nœuds via l’interface graphique.
  • Gestion des certificats SSL/TLS, y compris Let´s Encrypt, via l’interface graphique.
  • Plugin de stockage SMB/CIFS (Pour les sauvegardes, les images, les templates,
    les iso et les containers).
  • QEMU 2.11.1
  • Affichage de l’IP pour chaque VM (via qemu-guest-agent)
  • LXC 3.0.0 : templates et clones, déplacement de volume ou de disque.
  • Création et édition de nouveaux rôles via l’interface graphique.
  • Limitation des entrées/sorties et de la bande passante pour les opérations de
    restauration (globalement, par stockage ou par tâche de restauration).
  • Nouvelle intégration améliorée de xterm.js, incluant une routine de reconnection (lors des reboots de containers ou de redémarrages après migrations)
  • Interface utilisateur Basique ou Avancée.
  • Support de ebtables (filtrage réseau dès la couche arp).
  • Documentation de référence améliorée.
  • D’innombrables bug fixes et mises à jour de paquetages.
    Proxmox VE étant basé sur Debian GNU/Linux, cette solution peut s’installer sur un nombre très varié de configurations matérielles, allant du simple PC de bureau aux serveurs professionnels utilisés dans les datacenters, la seule vraie contrainte étant de disposer de microprocesseur(s) 64 bits.

5. Téléchargement et préparation du média :

Proxmox est téléchargeable directement sur le site internet de l’éditeur :

https://www.proxmox.com/en/downloads/

Sélectionnez « Proxmox VE x.x ISO Installer », x.x étant la dernière version en date (5.2 à l’heure où j’écris ces lignes). Cliquez sur « Download », et patientez quelques instants.

L’image téléchargée est hybride, c’est-à-dire que vous pourrez l’utiliser tout aussi bien pour graver un CD/DVD que pour générer une clef usb permettant l’installation.
Dans ce dernier cas, il suffit de flasher l’image précédemment téléchargée sur une clef de taille suffisante.
Sous Windows, vous pouvez par exemple utiliser WinFLASHTool .

Sous Linux, dd suffit amplement :

sudo dd if="{image-iso}" of="{peripherique-usb}" bs=1M

Dans tous les cas, veillez à bien identifier le périphérique représentant la clef USB. Une erreur étant très vite arrivée, pour pourriez corrompre l’un de vos disques, si ce n’est tout le disque contenant votre système d’exploitation.
Vous voilà prévenus.

6. Installation :

Notez que l’installation de Proxmox VE effacera complètement le disque dur de la machine cible. Il n’est pas possible d’installer Proxmox en multiboot à côté d’un autre système, à moins d’utiliser deux disques distincts. Veillez donc à lui dédier au moins un disque physique. L’installation proprement dite du système dure moins de cinq minutes montre en main, saisies comprises.

Insérez le média préalablement préparé dans la machine, mettez-la sous tension, et sélectionnez le périphérique de démarrage. Selon le constructeur de la machine, le BIOS, l’UEFI, la combinaison de touches peut varier. Une fois ceci fait, vous obtenez l’écran de démarrage suivant :

setup1

L’option « Install Proxmox VE (Debug mode) » permet de démarrer l’installeur dans un mode verbeux, au cas où vous rencontreriez des difficultés.

L’option « Rescue Boot » permet de démarrer en mode secours au cas où vous auriez fait une mauvaise manipulation lors d’une précédente installation.

L’option « Test memory » permet de lancer memtest, un programme pour tester la mémoire vive et vérifier que vos barettes n’ont pas de dysfonctionnement. C’est une option qui peut être utile, mais pour laquelle il faut prévoir du temps.

Pour installer, validez le choix « Install Proxmox VE ».

Laissez l’installeur reconnaître le matériel et obtenir une adresse IP si vous êtes dans un réseau géré par DHCP. Vous arrivez sur la page suivante sur laquelle vous êtes invité à valider la licence du logiciel (« End User Licence Agreement »).

setup2

Validez la licence en cliquant sur « I agree » si vous êtes d’accord avec les termes de la GPL v3.
Sinon, déclinez-la en cliquant sur « Abort ». Dans le dernier cas, l’installation s’interrompra et la machine s’arrêtera.
Une fois la licence validée, il vous est demandé de sélectionner le disque dur sur lequel Proxmox sera installé.

setup3

Le bouton « Options » permet de choisir le système de fichiers. Comme stipulé précédemment, le disque dur sélectionné sera intégralement repartionné et formaté lors de l’installation.
Là encore évidemment, assurez-vous que vous installez bien sur le bon périphérique, afin de ne pas perdre de données.

Parmi les systèmes de fichiers proposés grâce au bouton “Options”, il vous est proposé d’installer avec le système de fichiers ZFS.
A moins que vous n’ayez une contrainte technique qui vous empêcherait de faire ce choix, je ne saurais trop vous conseiller de préférer ce système de fichiers ! ZFS autorise la vérification de l’intégrité des données, permet le stockage de grande capacité, la réplication à haute performance, la compression au niveau du système de fichiers, la réplication, les snapshots, le clonage en mode copy-on-write et a des fonctionnalités d’auto-réparation qui font de lui un choix à privilégier pour le stockage des données.

  • ZFS est gratuit, mais sous licence Oracle et non sous GPL. C’est la raison pour laquelle les distributions Linux classiques ne proposent pas de s’installer nativement sur un système de fichiers ZFS.
    Il est évidemment possible, une fois un système installé, de télécharger les modules et binaires ZFS, et de l’utiliser pour gérer un stockage, mais installer un système Linux en lui-même directement en ZFS n’est pas prévu par les installeurs des grandes distributions, et si ce n’est pas impossible, cela requiert de l’astuce et de solides connaissances de Linux.
  • Proxmox VE a fait le choix d’intégrer directement ZFS dans le noyau qui équipe son hyperviseur. L’installation en ZFS est donc très simple, profitez-en !
  • A l’installation, ZFS crée un “pool” de périphériques sur lequel il va installer le système de fichiers. On peut lui demander d’englober plusieurs périphériques en un seul filesystem, à l’instar de ce que proposerait RAID. C’est pour cette raison que l’installeur vous propose plusieurs modes d’installation, qui sont des correspondances aux différents types de RAID existants.
    Si vous installez sur un seul disque, vous pouvez vous contenter de la première option ( ZFS ( RAID 0 )).
  • ZFS gère directement les périphériques, il n’est pas nécessaire de partitionner.
  • A l’instar de LVM, il sera possible ultérieurement de rajouter un disque du à votre pool, pour étendre votre système de fichiers.

setup-zfs

Une fois les différents choix effectués, cliquez sur « Next ».

Le disque dur de destination étant sélectionné, vous pouvez choisir votre pays, votre timezone ainsi que la disposition du clavier. L’installeur termine la frappe pour vous : dès que vous tapez “fr”, vous serez orienté vers les préférences locales françaises.

setup4

L’écran suivant vous demande de renseigner le mot de passe administrateur, ainsi que son adresse e-mail.
Le mot de passe demandé étant celui du compte root, veillez à ce qu’il soit suffisamment robuste, sinon vous risqueriez d’exposer votre hyperviseur (ainsi que les VMs qu’il va héberger) à des risques de sécurité potentiels.

Notez également que le compte root est le seul qui soit renseigné lors de l’installation de votre hyperviseur, c’est donc le seul compte du système lors du premier redémarrage. Une bonne pratique élémentaire dès le système installé consistera donc à créer un compte utilisateur, et à restreindre les accès root, notamment via ssh.
Nous y reviendrons.

Le champ e-mail ne peut être laissé tel quel. vous devez renseigner un mail, qu’il soit simplement local ou valide sur internet. Il peut être suffisant de remplacer le .invalid final par un .com, par exemple.
Une fois les champs renseignés, cliquez sur « Next ».
L’écran suivant vous demande de spécifier les informations réseau de votre machine.

setup5

Il vous est demandé de renseigner le nom de domaine pleinement qualifié de la machine (FQDN), son adresse IP, le masque de sous-réseau, la passerelle ainsi que le serveur DNS. Veillez à renseigner correctement ces champs.
L’adresse IP de la machine est fixe et ne peut pas être dynamique (DHCP) du fait qu’elle devra héberger d’autres systèmes, et que l’hyperviseur est éventuellement voué à être mis en cluster, ce qui est incompatible avec un adressage dynamique.

Cet écran est le dernier avant l’installation proprement dite.
Cliquez sur « Next » pour démarrer l’installation.

Le disque est alors préparé (partitionnement et formatage), le système s’installe puis est configuré.
Cette configuration est finalisée, puis le système est rendu amorçable (Grub).
Et voilà ! Proxmox VE est désormais installé, vous n’avez plus qu’à cliquer sur le bouton « Reboot ».

setup6

Il vous faut ensuite retirer le support d’installation (CD/DVD ou clé USB), puis redémarrer la machine.
Le menu grub de démarrage vous est proposé.
Validez le choix « Proxmox Virtual Environment GNU/Linux » ou patientez cinq secondes.

setup7-grub

Le système démarre, puis vous donne un prompt de connexion : votre machine sous Proxmox VE est maintenant démarrée et opérationnelle !

7. Configuration post-installation :

L’écran de login vous indique à quelle adresse vous connecter avec un navigateur.
Un peu de configuration à la console est cependant nécessaire avant de vous connecter pour la première fois à l’interface web de votre Proxmox.

Si vous n’avez notamment pas souscrit de contrat de support chez Proxmox GmbH et que vous souhaitez utiliser gratuitement Proxmox VE, il va vous falloir modifier le fichier responsable des mises à jour du système; quelques menues modifications à apporter à l’installation de base sont également souhaitables.
Pour cela, logguez-vous en tant que “root” à l’invite de commande, et entrez le mot de passe que vous avez renseigné lors de l’installation.

setup8-login

Une fois connecté, éditez (avec nano, pour l’instant le seul éditeur du système) le fichier
/etc/apt/sources.list.d/pve-enterprise.list .

Là, remplacez la ligne suivante :

deb https://enterprise.proxmox.com/debian/pve stretch pve-enterprise

… par celle-ci :

deb http://enterprise.proxmox.com/debian/pve stretch pve-no-subscription

(Notez bien que vous passez en http, et non plus en httpS ! )

Maintenant que cette modification est faite, vous pouvez mettre à jour votre système :

apt update && apt full-upgrade -y

Ceci peut éventuellement prendre quelques minutes.

Installez ensuite quelques utilitaires usuels plus ou moins indispensables, qui vous faciliteront nettement l’administration. Je vous en propose une liste non exhaustive :

apt install sudo net-tools dnsutils ntp htop glances strace most netcat vim tree telnet tmux screen lynx nmap tcpdump

Dans cette liste, sudo est indispensable, pour gérer les élévations de privilèges d’un utilisateur simple. Souvenez-vous, l’installeur n’a créé aucun compte à part celui de root. Nous allons remédier à cela.

Personnellement je crée un compte ‘admin’. Vous êtes évidemment libres de choisir un nom d’utilisateur qui vous convienne, du moment que vous créez un compte en plus du compte root.

adduser admin
Adding user admin' ... Adding new groupadmin’ (1000) …
Adding new user admin' (1000) with groupadmin’ …
Creating home directory /home/admin' ... Copying files from/etc/skel’ …
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for admin
Enter the new value, or press ENTER for the default
Full Name [ ]: ProxMox Administrator
Room Number [ ]:
Work Phone [ ]:
Home Phone [ ]:
Other [ ]:
Is the information correct? [Y/n]

Pour que l’utilisateur en question ait le droit de passer des commandes d’administration via sudo, tapez :

usermod -aG sudo admin
usermod -aG adm admin

Enfin, modifiez la configuration par défaut de votre serveur ssh -trop permissive, en éditant
/etc/ssh/sshd_config :
Remplacez-y :

PermitRootLogin yes

… par :

PermitRootLogin no

Enregistrez cette modification, puis rechargez le service ssh pour la faire prendre en compte :

systemctl restart sshd

Et voilà, votre serveur est raisonnablement sécurisé, mis à jour et prêt à l’emploi ! Vous pouvez désormais l’utiliser et le configurer à l’aide de l’interface web de ProxMox.

8. Utilisation de Proxmox :

Ouvrez votre navigateur favori (Firefox, Chrome, …), entrez l’adresse de votre machine en https sur le port 8006 :

https://<IP_de_mon_Serveur>:8006/

Acceptez le certificat TLS (il est forcément auto-signé, il vous faut donc confirmer que vous l’acceptez).
Choisissez la langue dans laquelle vous voulez voir s’afficher l’interface,
puis entrez le login « root » (vous avez créé un utilisateur dans le système mais il vous faut encore lui attribuer des droits dans Proxmox :wink: ),
et le mot de passe préalablement défini lors de l’installation, et enfin cliquez sur « login ».

9

Un message de mise en garde s’affiche :

10

Si vous n’avez pas souscrit de contrat de support valide chez Proxmox et que vous n’avez pas renseigné celui-ci dans le système, ce message s’affichera à chaque fois que vous vous authentifierez sur cette interface.
Il n’y a donc pas lieu de s’alarmer; cliquez simplement sur OK, et vous voilà connecté à l’interface de votre hyperviseur !

9. L’interface et ses différentes options :

L’interface est en HTML 5, sur Ajax / ectJS, ce qui la rend à la fois dynamique et ergonomique :
les modifications que vous entrez sont prises en compte directement, vous n’avez pas besoin d’actualiser la page.

9.1 Les différents volets :

Le volet de gauche est celui du Datacenter. C’est le niveau le plus haut.
Si vous mettez plusieurs hyperviseurs Proxmox en cluster (3 minimum), les autres serveurs viendront s’afficher ici. Il seront du coup administrables via une seule et même interface.
Selon que vous avez sélectionné le niveau le plus haut (Datacenter), ou un nœud Proxmox (vous n’en avez qu’un à ce stade de l’installation, il est marqué par une pastille verte) ou encore un stockage (local ou distant),
les options que vous verrez apparaître dans le second volet vertical ne seront pas les mêmes, ni bien sûr celles de la fenêtre principale, dans laquelle vous pouvez manipuler en détail les différentes options.
Le volet du bas vous montre un historique des différentes commandes et événements de votre hyperviseur.

Une bonne pratique pour l’administration de Proxmox consiste à aller du général au particulier :

Sélectionnez “Datacenter” à gauche, puis passez en revue toutes les options disponibles dans le volet vertical immédiatement à côté du premier.
Les options que vous paramétrerez à ce niveau seront valables pour l’ensemble du Datacenter. Ceci prend évidemment tout son sens dès lors que l’on travaille en cluster, mais il est utile d’avoir aussi cette notion à l’esprit lorsque l’on paramètre par exemple les règles d’accès du firewall : plus on les paramètre à un niveau élevé, plus elles seront générales (et feront le cas échéant consommer moins de ressources que si elles sont précisées individuellement pour chaque VM).
Les stockages définis au niveau du Datacenter seront également vus et gérés indifféremment par chaque nœud (et incidemment, par chaque VM) de votre Datacenter.

Puisque vous avez créé un utilisateur non privilégié, il est utile de le déclarer dans Proxmox, afin que celui-ci puisse administrer votre hyperviseur. Allez dans “Utilisateurs” dans le second volet, cliquez en haut sur le bouton “Ajouter”, et sélectionnez le nom de l’utilisateur que vous avez créé (dans mon cas, c’était ‘admin’).
Une fois ceci fait, cliquez sur l’option “Permissions”, puis grâce au bouton '“Ajouter”, sélectionnez "Permissions de l’utilisateur. Là, vous pourrez définir pour lui les chemins auxquels l’utilisateur aura accès et son niveau d’habilitation.
Dans un premier temps, mieux vaut donner des autorisations élevées au premier utilisateur, pour pouvoir configurer l’hyperviseur confortablement sans être cependant obligé de s’y connecter en tant que root. Il sera possible ensuite d’ajouter différents utilisateurs, avec une granularité des droits d’accès et d’exécution qui garantira la bonne sécurité de votre hyperviseur. Une authentification via un serveur LDAP ou Active Directory est bien sûr possible, sinon souhaitable.

Si vous sélectionnez votre serveur dans le volet de gauche, les options qui s’afficheront dans le volet d’à côté seront spécifiques à ce nœud.
L’option “Résumé” vous donne une vue globale de la santé de votre serveur.
L’option “Shell” vous permet d’accéder directement à une interface de commande sur le serveur : bien que l’interface web soit assez complète, certaines options avancées nécessiteront d’être paramétrées via la console, et cette otion vous permet d’accéder immédiatement à un terminal virtuel. C’est rapide et confortable, mais quelques particularités -telles que le copier-coller par exemple- restent encore perfectibles, et il reste plus confortable dans certains cas d’ouvrir simplement une connexion ssh sur le serveur pour certaines manipulations.

9.2 Le réseau

L’option “Réseau” vous permet de paramétrer les accès réseau de votre hyperviseur, aussi bien internes qu’externes.
Par défaut, Proxmox crée un bridge virtuel vmbr0, auquel il assigne votre interface réseau principale. Ceci vous permettra lorsque vous créerez des VMs de leur fair accéder de plein pied au réseau local, en assignant leur carte réseau au même bridge virtuel.
Un second bridge virtuel -interne- peut aussi s’avérer utile. Proxmox propose des fonctionnalités résau avancées (bonding d’interface, bridges, load balancing, filtrage …), mais les options paramétrées ici sont transmises au système dans les fichiers de configuration standards de Debian ( /etc/network/interfaces* ).
Pour cette raison, il sera nécessaire de rebooter le serveur pour lui faire prendre en compte certaines modifications, notamment lors de la création de nouvelles interfaces.
L’ajout de règles de firewall peut se faire directement à l’aide de l’interface web. Au niveau le plus haut, elles seront stockées dans :
/etc/pve/firewall/cluster.fw .

NOTA BENE : Les cartes réseau émulées pour les VMs seront gérées au mieux par Proxmox si vous choisissez le modèle “Virt IO”.

9.3 Le stockage

L’option “Stockage” vous permet de paramétrer les stockages sur lesquels s’appuiera votre hyperviseur.
Une fois déclarés, il s’affichent dans le volet de gauche en-dessous de votre serveur.
Avec le bouton “Ajouter”, vous pouvez ajouter différents types de stockage, et en sélectionnant chacun d’eux dans la fenêtre principale, vous pouvez éditer le contenu auquel vous destinez chaque type de stockage.
Par défaut, le stockage ‘local-lvm’ contiendra les images de vos VMs KVM, et vos conteneurs LXC. Le stockage ‘local’, lui, est destiné aux images iso (pour installer les systèmes de VM), les templates de conteneurs et les fichiers de sauvegardes.
Si vous destinez votre hyperviseur à être membre d’un cluster, il sera bien sûr pertinent de se doter d’un stockage en réseau, accessible indifféremment par les différents nœuds du cluster. Chaque stockage doit être édité, afin de déclarer les types de contenu qu’il sera amené à stocker.

Par défaut, Proxmox stocke le contenu utile dans /var/lib/vz , dans une arborescence déterminée :

├── dump
├── images
└── template

        ├── cache
        ├── iso
        └── qemu

Hint : dans le répertoire ‘iso’, il peut s’avérer très pratique de stocker un fichier iso tel que celui de netboot.xyz : une fois téléchargé, il permet d’accéder via le site netboot.xyz à un menu PXE, qui permettra l’installation directe d’un grand nombre de distributions !

10. Les VMs en émulation complète :

Si c’est possible, préférez la création de VM au format qcow2, bien supporté nativement par qemu et permettant les snapshots et l’allocation dynamique. Cette dernière caractéristique est très intéressante, car elle permet de disposer d’images disque qui ne pèsent que le poids réel des données qu’elle contiennent.

Pour créer une VM, cliquez tout simplement en haut à droite sur le bouton “Créer VM”, et laissez-vous guider par l’installeur.
Chaque VM est identifiée par un n°, de 100 à 99999. On peut bien sûr lui adjoindre un nom plus explicite, mais le sytème identifiera les systèmes hôte par leur n°.
Pour installer le système, il vous est proposé de démarrer sur une image iso que vous devez avoir préalablement stockée dans le répertoire idoine : c’est là que l’utilisation de l’image netboot.xyz.iso prend tout son sens !

  • Si vous installez un système windows, il sera utile d’adjoindre au système hôte les “Qemu Guest Agents”, pour optimiser l’échanges des signaux systèmes entre la VM et son hôte, tels que l’arrêt / redémarrage du système, entre autres.
    Hint : Sous Windows, la version 64 bits dysfontionne. La version 32 bits à installer est qemu-ga-x86.msi .

  • Si vous installez un système linux, installez simplement les “Qemu Guest Agents” dans le système de la VM avec la commande :

apt-get install qemu-guest-agent ( pour Debian / Ubuntu )

ou :

yum install qemu-guest-agent ( pour RedHat / Fedora / CentOS)

suivi de :

systemctl enable qemu-guest-agent
systemctl start qemu-guest-agent

NOTA BENE : pour héberger des systèmes sous linux, préférez là où c’est possible les VMs en paravirtualisation : elles consommeront nettement moins de ressources et d’espace disque.

11. Les VMs en paravirtualisation :

Les premières versions de Proxmox proposaient des containers OpenVZ. Ils ont été abandonnés au profit du format LXC, plus souple et désormais éprouvé.

En paravirtualisation, la VM partage le noyau et la RAM avec son hôte, et le reste du système est indépendant, dans une sorte de chroot amélioré. Le système de fichiers se résume à un fichier en .raw, ou un LV (Logical Volume) dans du LVM.

Avant de créer un container, il faut commencer par récupérer un ou plusieurs templates à partir desquels on créera les VMs. Pour cela, sélectionnez dans le volet de gauche le stockage pour lequel vous avez indiqué qu’il stockerait les “Templates de Conteneurs” dans le paramétrage du datacenter.
Un bouton ‘Templates’ apparaît en haut de la fenêtre principale. Cliquez-le, et choisissez parmi la liste les types de conteneurs que vous souhaitez installer.
Chaque template sera télécharge localement depuis linuxcontainers.org.

Une fois ceci fait, vous pouvez alors cliquer sur le bouton “Create CT” en haut à droite de l’interface, et vous laisser guider par l’installeur qui vous proposera d’installer à partir des templates que vous venez de télécharger.

Les templates sont stockées dans /var/lib/vz/template/cache.
Il est évidemment possible de créer ses propres templates, une fois un container bien configuré.

Hint :
Connectez-vous à un terminal sur votre serveur, soyez root, puis tapez la commande :

pveam update

Celle-ci met à jour la liste des templates disponibles pour vos conteneurs LXC. Si par conséquent vous retournez sur votre stockage ‘local’ dans le volet de gauche, que vous sélectionnez ‘contenu’ dans le second volet, puis que vous cliquez le bouton ‘Templates’, vous vous apercevrez qu’une section supplémentaire est apparue :
En plus de la section ‘System’, qui vous propose une vingtaine d’environnements linux issus des distributions les plus populaires, vous avez désormais une section 'TurnKey Linux’, qui vous fournit plus de cent templates de serveurs pré-installés avec les produits logiciels les plus courus du moment !

12-turnkey

Les serveurs viennent préconfigurés, avec des interfaces d’administration et de prise de contrôle à distance par défaut telles que Webmin, et vous feront gagner un temps précieux lors de mises en service d’environnements virtualisés. Essayez !

12. Les nouveautés plus en détail :

12.1 Généralités

  • Dans Proxmox VE en version 5.2, il devient possible de déplacer des conteneurs LXC d’un volume de stockage à un autre. En outre, il devient possible de faire des templates de conteneurs au même titre qu’il était déjà possible de faire des templates de VM (KVM).
    Cliquez du bouton droit sur l’icone d’un conteneur dans le volet de gauche, et choisissez l’option “Convert to template”.

13

NOTA BENE : Pour réaliser un template il ne faut pas avoir de snapshots en cours sur ce conteneur.
Par ailleurs, le template ainsi créé ne pourra pas être démarré : il sert désormais de base au clonage de conteneurs qui eux, seront bootables.

  • L’intégration de xterm.js comme console en plus de noVNC et SPICE : celle-ci peut être paramétrée par défaut, ce qui vous permettra de faire des copier-coller vers et depuis cette console, et aussi de la redimensionner, toutes choses qui n’étaient pas possibles auparavant.

  • Lors de la restauration de VM et de conteneurs, ainsi que lors des réplications en Haute Disponibilité, il est désormais possible également de limiter le débit afin d’éviter les engorgements de bande passante lors de cette tâche. Cette option peut être paramétrée pour toutes les restaurations, ou être surchargée pour chaque restauration individuelle.

12.2 Stockage distribué et SaMBa

  • Ajout des partages SMB/CIFS comme support de stockage officiel (backups, images, templates, iso et containers).
    Il est désormais possible d’adosser un hyperviseur Proxmox VE à un serveur de fichiers Windows ou à un serveur SaMBa directement depuis l’interface d’admnistration.

  • L’intégration de Ceph a été simplifiée.
    S’il vous est possible de dédier un disque sur chacun des trois hyperviseurs de votre cluster, vous pouvez déployer sur ceux-ci un volume distrubé géré par Ceph, qui vous donnera l’équivalent en sécurité d’un stockage en réseau de ce que vous donnerait une architecture en RAID 5 en stockage local.

La condition principale est de se trouver sur un réseau proposant des débits moyens autour de 10 Gb/s.
Sur chacun des trois noeuds de votre cluster, exécutez le script d’installation avec un simple :

# pveceph install

Puis vous générez la configuration initiale de Ceph sur un premier noeud, sur la base de votre adressage local (192.168.X.0 ici) :

# pveceph init --network 192.168.X.0/24

Ensuite, les moniteurs Ceph maintiennent une copie de la structure maître de votre cluster Ceph. Dans un contexte de Haute Disponibilité il vaous faudra au moins trois moniteurs.
Sur chacun des trois noeuds de votre cluster, exécutez par conséquent :

# pveceph createmon

La création des moniteurs entraîne l’installation du démon Manager.
La commande suivante est à passer sur au moins un noeud de votre cluster :

# pveceph createmgr

Une fois ces étapes préliminaires réalisées, il nous faut créer les OSD.
Ceci peut être fait simplement via l’interface d’administration de Proxmox VE :

14-ceph

Enfin, un -ou plusieurs- Pool Ceph est créé. C’est un groupe logique qui permet de stocker des objets de toute sorte. Etant donné que Ceph est un système de fichiers distribué, il sera visible et accessible directement depuis chaque noeud de votre cluster.

15-cephpool

Un autre système de fichiers distribué est également disponible dans Proxmox VE, il s’agit de GlusterFS.
Celui-ci sera éventuellement détaillé lors d’un prochain billet de blog :wink: .

Des interfaces de configuration pour des stockages iSCSI ou DRBD sont évidemment disponibles également, afin de pouvoir adosser vos hyperviseurs à un SAN.

12.3 - Let’s Encrypt

La nouvelle gestion des certificats autorise maintenant l’usage de certificats provenant d’autorités de certification de tierce partie, et notamment depuis Let’s Encrypt.
La gestion des certificats est désormais possible directement depuis la GUI.
Les administrateurs de Proxmox VE peuvent l’utiliser directement pour demander des certificats TLS gratuits chez Let’s Encrypt. Ils sont directement acceptés sur la plupart des systèmes d’exploitation et des navigateurs actuels.

Pour cela, allez sur l’un des noeuds de votre Datacenter, puis dans le 2nd volet dans la Partie “Certificats” (juste sous "Réseau).

1

Là, cliquez sur le bouton “Edit Domains” dans la partie “ACME” de l’interface, et renseignez le nom de domaine pleinement qualifié ( FQDN )
pour lequel vous voulez obtenir un certificat.

tls-1

(Il va de soi que la partie DNS du domaine en question a été préalablement prise en compte).
Enregistrez, puis cliquez sur “Register Account”, conservez l’option “Let’s Encrypt V2”, cochez
“Accept TOS” et renseignez une adresse e-mail valide.

tls-2

Validez puis cliquez sur le bouton “Order Certificate” pour faire automatiquement la demande de certificat auprès de Let’s Encrypt, ainsi que l’installation du certificat une fois celui-ci obtenu.

Il vous faudra recharger la page dans votre navigateur pour le faire prendre en compte ce nouveau certificat.

Un détail très appréciable est que le renouvellement de ce certificats se fera automatiquement en arrière-plan !

12.4 Cloud Init

CloudInit est un framework permettant d’exécuter un script fourni lors de l’instanciation d’une VM.
Il est écrit en Python, à l’origine pour Ubuntu.
La mécanique qui permet d’injecter un script à l’environnement CloudInit doit être supportée par l’API
de la solution IaaS. Aujourd’hui, les APIs EC2 et OpenStack gèrent CloudInit… ainsi que Proxmox VE désormais.

Plusieurs cas d’utilisations sont possibles avec CloudInit, à commencer par l’installation/mise à jour des paquets, l’import des clés ssh, le paramétrage des variables d’environnement ou l’exécution de simples commandes. Ainsi, lorsque vous instanciez une nouvelle VM, vous faites appel à CloudInit qui va récupérer un script via une directive user-data-file, puis l’interpréter.
La récupération du script passe par un service de Metadata, qui permet de :

  • Collecter des paramètres fournis lors du lancement d’une VM, tels que le profil matériel, le groupe de sécurité ou l’image à utiliser.
  • Exposer les paramètres de lancement, ainsi que d’autres données dynamiques: identifiant de la VM, nom d’hôte, etc.

Une VM peut donc appeler le service de métadata pour récupérer les informations qui lui sont associées.
CloudInit utilise l’entrée “user-data” du service metadata pour retrouver d’éventuelles données sous forme d’un script.

Un certain nombre de distribution proposent d’ores et déjà des images Cloud-Init prêtes à l’emploi (sous forme de fichiers .qcow2).
Par exemple, pour utiliser l’image de cloud fournie par Ubuntu à
https://cloud-images.ubuntu.com/

Téléchargez l’image :

# wget https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img

Créez une nouvelle VM

# qm create 9000 --memory 2048 --net0 virtio,bridge=vmbr0

importez le disque au stockage local-lvm

# qm importdisk 9000 bionic-server-cloudimg-amd64.img local-lvm

puis rattachez le nouveau disque à la VM en tant que disque scsi

# qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9000-disk-1

Configurez et paramétrez ensuite un lecteur CD-Rom afin de de pouvoir passer les données Cloud-Init à la VM :

# qm set 9000 --ide2 local-lvm:cloudinit
# qm set 9000 --boot c --bootdisk scsi0

Vous aurez besoin aussi de l’affichage d’une console sur un port série (un pré-requis pour beaucoup d’images Cloud-Init) :

# qm set 9000 --serial0 socket --vga serial0

Enfin, convertissez la VM en un template, à partir duquel vous pourrez créez rapidement des clones liés;

# qm template 9000

Pour cloner :

# qm clone 9000 123 --name ubuntu2

Vous pouvez cependant utiliser tout type de VM. Sur les systèmes Debian/Ubuntu, il vous suffit de taper :

# apt install cloud-init

Le script d’initialisation dépend ensuite plus de Cloud Init lui-même que de Proxmox VE.

Exemple de syntaxe de script Cloud-Init :

Le contenu du champ user-data peut comporter différentes syntaxes.
Ces syntaxes sont indiquées par la première ligne du fichier.
Les plus courantes sont:

#cloud-config :
packages :
- git-core ----(résultera en)----> sudo apt install git-core
apt-update:true ----(résultera en)----> sudo apt update

NOTA BENE : Les syntaxes cloud-config se font en YAML.

  • include :

Spécifie des fichiers à télécharger, puis à exécuter en précisant leur URL dans un dépôt (Github, apt, …)
Ce fichiers peuvent être compressés (gzip), MIME ou binaires.
Par exemple, pour installer oh-my-bash :

#include
https://github.com/ohmybash/oh-my-bash/archive/master.zip

  • #! :

Spécifie un script bash, à exécuter à la fin du premier boot de la VM.
Par exemple, pour une installation de chef :

#!
curl -L http://www.opscode.com/chef/install.sh | sudo bash

Des exemples de scripts sont aussi fournis sur le site officiel de CloudInit.

Pour plus d’infos (en anglais), je vous invite à consulter le site de Proxmox sur ce sujet, ainsi que la documentation officielle de Cloud Init .

12.5 Le Clustering et la Haute Disponibilité

Proxmox a de tout temps proposé de fonctionner en cluster.
La mise en cluster est basée sur Corosync / Pacemaker, et l’interface de Proxmox a évolué
jusqu’à permettre désormais de réaliser cette opération sans avoir à passer par le terminal.

Les pré-requis sont :

  • Deux serveurs physiques au minimume (en réalité, le support Proxmox en exige trois, ce qui est indispensable pour avoir accès aux fonctionnalités de haute disponibilité, et exploiter ensuite par ailleurs des fonctionnalités de système de fichiers distribué telles que Ceph ou GlusterFS.
  • Les serveurs doivent être accessibles pour configuration (ports 8006 et/ou 22 ) pour configurer le cluster.
  • La latence entre serveurs doit être inférieure à 2ms.
  • Ils doivent pouvoir dialoguer librement entre serveurs en UDP sur les ports 5404 et 5405, et en TCP sur les ports 2224, 3121 et 5403, ainsi qu’en multicast.
  • Les serveurs doivent se connaître par leurs noms via des entrées dans /etc/hosts sur chacun d’entre eux.

Pour s’assurer que tout fonctionne normalement, vous pouvez autoriser temporairement la réponse à l’ICMP sur multicast (normalement désactivée). La commande à passer est :

# sysctl net.ipv4.icmp_echo_ignore_broadcasts=0

Un simple ping permettra de s’assurer que les serveurs se voient bien.

root@serveur1:/etc/pve# ping 224.0.0.1
PING 224.0.0.1 (224.0.0.1) 56(84) bytes of data.
64 bytes from 10.1.0.1: icmp_seq=1 ttl=64 time=0.019 ms

Une fois les tests terminés, vous pourrez désactiver le ping en multicast avec la commande :

# sysctl net.ipv4.icmp_echo_ignore_broadcasts=1

NOTA BENE :
Si votre -ou vos- serveur(s) sont déjà en production, il est indispensable de sauvegarder toutes les VMs et conteneurs avant la mise en cluster, puis de supprimer leurs instances actives. Une fois en cluster, vous pourrez alors les restaurer et les relancer.
Cette manipulation est indispensable pour accéder aux fonctionnalités de Haute Disponibilité sur vos VMs.
De même, si par la suite vous comptez configurer le fencing de vos VM en haute disponibilité, il est nécessaire de prévoir pour elles un espace de stockage en réseau, accessible indifféremment par tous les noeuds de votre cluster (NFS, SaMBa, ou préférablement Ceph ou GlusterFS).

Ces pré-requis étant vérifiés et validés, vous pouvez cliquer dans le volet de gauche sur “Datacenter”, pusi dans le volet attenant sur “Cluster”. Sur le premier serveur, cliquez sur “Create Cluster”. Donnez un nom unique à votre cluster (attention, il ne sera plus possible d’en changer ensuite !)

cluster1

Une fois le processus de création terminé, le bouton “Join Information” vous affichera les infos nécessaires pour ajouter le(s) serveur(s) suivant(s) au cluster.
Affichez-les, et copiez dans le presse-papier le contenu du champ “Join Information” (ou utilisez le bouton “Copy Information”).

Sur le serveur suivant, rendez-vous également dans l’option “Cluster” du Datacentre, et choisissez cette fois l’option “Join CLuster” (!).
Collez les informations recueillies sur le premier serveur. Puis renseinez dans le champo “Password” le mot de passe root du serveur qui a créé le cluster;
Cliquez enfin sur le bouton “Join”.

C’est tout !

Il vous faut recharger la page de votre navigateur, parce que le certificat TLS a été régénéré pour permettre l’accès au cluster plutôt qu’à un seul hôte.
Une fois reconnecté, vous devez voir apparaître à gauche dans Datacenter non plus un mais deux serveurs, que vous pouvez administrer complètement à partir de cette seule interface d’administration.

cluster2

Si vous avez un troisième serveur -ce qui est vivement recommandé par le support Proxmox VE -, répétez ces opérations sur ce dernier.

Une fois en cluster, vous pouvez alors créer -et/ou restaurer- vos VMs et vos containers, et les migrer manuellement d’un noeud de cluster à un autre avec le bouton “Migrate” en haut à droite de l’interface lorsque vous sélectionnez votre VM.

cluster3

Il reste évidemment toujours possible de commander Proxmox via la console, et dans ce cas précis de lui demander de migrer une VM comme ça :

# qm migrate <N°_de_VM> <Mon_noeud_de_Cluster> --online --with-local-disks

Si vos VMs sont stockées sur un stockage local et non pas sur un stockage en réseau accessible par tous les noeuds de votre cluster, vous pouvez mettre en place des réplications de VMs cycliques d’un noeud de cluster vers un autre.

Pour cela, sélectionnez la VM en question dans le volet de gauche, puis cliquez l’option “Réplication” dans le volet suivant.
Vous pouvez alors paramétrer le noeud cible vers lequel répliquer votre VM, la fréquence de réplication (avec des fréquences pré-programmées disponibles).

cluster4

Nouveauté de Proxmox 5 : il est également possible de limiter la bande passante pour chaque processus de réplication (ou pour toutes les rpélications en général),
afin de ne pas obérer la bande passante des services de production.

L’idéal étant évidemment que ces VMs puissent migrer automatiquement d’un noeud à l’autre en cas de défaillance de l’un d’entre eux. C’est le principe du fencing, qui est une fonctionnalité de la Haute Disponibilité dans Proxmox VE.

Sous Proxmox 5, il n’est plus nécessaire de configurer le fencing car il est pris en charge directement par le système.
Si votre système dispose cependant d’un watchdog matériel (voyez à ce sujet le BIOS de votre système ou la manuel de votre carte mère),

bios

La configuration se fait au niveau du Datacenter, dans la partie HA (représentée par un coeur).
Vous commencez par définir les groupes de Haute Disponibilité :

cluster6

De tels groupes vont vous permettre de définir ensuite quelles VMs doivent être migrées vers quels noeuds du cluster, en fonction de leur appartenance à un groupe et des paramètres qui y auront été appliqués.
Cochez pour chaque groupe que vous créez les noeuds de cluster concernés, et attribuez-leur une priorité, qui correspondra à la préférence que vous avez de voir une VM s’exécuter d’bord sur tel noud plutôt que sur tel autre.

Une fois ceci fait, vous pouvez alors remonter dans la partie HA, et Dans le volet Ressources, vous ajoutez des ressources pour chaque VM et/ou chaque conteneur, en l’assignant à un groupe vous lui appliquez la préférence d’exécution sur tel noeud de cluster ou tel autre que vous avez définie auparavant. Le request state correspond à l’état dans lequel vous voulez voir la VM lorsqu’elle est migrée d’un noeud à un autre (démarrée, arrêtée, ignorée ou désactivée).

cluster-7

La valeur du “nombre maximum de redémarrages” et du “Max. relocate” permet de cadrer des effets de bord indésirables, tels que le fait qu’une VM passe continuellement d’un noeud de cluster à un autre lorsque les conditions de réseau sont dégradées par exemple.

Une fois tous ces paramètres renseignés, vous pourrez alors tester le fencing de VM d’un hyperviseur vers un autre, selon vos critères.
Notez pour ces tests que le comportement d’un hyperviseur sera différent selon que l’on lui demande un reboot ou un poweroff, ou bien que l’on simule un arrêt brutal en déconnectant son câble réseau, ou en désactivant sèchement son interface réseau avec ifdown. Dans le cas d’un arrêt/reboot propre, les appels systèmes envoyés à proxmox lui indiqueront de transmettre le signal d’arrêt à ses systèmes hôtes, mais pas forcément de les migrer sur un autre noeud de réseau, alors que ce comportement sera appliqué si une ressource devien brusquement inaccessible comme c’est le cas lors d’un crash … ou lorsque l’on déconnecte le câble ou l’interface réseau :wink: .

Pour plus d’information, je vous invite une fois encore à consulter les ressources disponibles sur le site de Proxmox !

13 Conclusion

Nous n’avons fait ici qu’effleurer la surface des choses. Les possibilités d’un hyperviseur Proxmox VE sont extrêmement vastes, et dépassent largement le contexte d’un simple billet de blog.

Si vous souhaitez aller plus loin dans l’exploration des nombreuses possibilités de Proxmox VE, je vous invite à vous rendre sur le site de l’éditeur et à y télécharger la documentation (en anglais et en allemand, mais néanmoins très bien fournie) :

https://pve.proxmox.com/pve-docs/

De nombreuses ressources secondaires sont également disponibles sur le serveur Git de l’éditeur :

https://git.proxmox.com/

Les forums Proxmox sont également une aide précieuse et active, et le wiki est assez exhaustif.

Pour aller plus loin, je vous invite à nous contacter directement !

À bientôt !

Guillaume Delanoy
Formateur / Ingénieur Systèmes chez Capensis