technique:infrastructure:hyperviseurs:install_proxmox

Installation et configuration de Proxmox à partir de Debian

Proxmox est un hyperviseur, c’est-à-dire un logiciel facilitant la création et la gestion de machines virtuelles. C’est la brique de notre infrastructure, qui nous permet de gérer l’allocation des ressources matérielles (CPU, RAM, mémoire) et les backups de nos machines virtuelles, qui font tourner les services. Cette page décrit les étapes permettant d’installer Proxmox sur des machines physiques faisant déjà tourner un Debian, comme décrit dans l'installation de base, et de configurer les disques durs.

Cette page peut être utilisée de façon plus générale. On suppose alors que la machine concernée :

  • Fait tourner un Debian
  • A un périphérique (SSD, HDD) sur lequel Debian est installé
  • A une paire de disques durs vierges, non configurés

Proxmox VE est un serveur de gestion de la virtualisation. C’est un “bare metal virtualisation environment”, ce qui signifie que c’est un serveur permettant, via l’utilisation d’hyperviseurs, de créer des machines virtuelles. Comme certains de ses concurrents tels que VMWare ESXi, par exemple, Proxmox VE repose sur KVM pour fournir un environnement de virtualisation. Cependant, Proxmox dispose de fonctionnalités qui lui sont uniques et, qui font de lui, un bon candidat pour l’infrastructure Picasoft. Entre autres Proxmox :

  • Supporte la “virtualisation légère” via les containers en utilisant LXC
  • Possède une interface en ligne de commande très complète, ainsi qu’une interface Web.
  • Supporte la “clusterisation”, ce qui fait que de multiples serveurs peuvent être accessibles depuis une unique page Web
  • Prend en charge les sauvegardes et des restaurations de façon très simple.
  • Supporte les stockages partagés.

Sources additionnelles:

Dépendant de la version de Debian, on suivra des tutoriels différents :

On exécutera uniquement les instructions de la section Install Proxmox VE.

Une fois l’installation terminée, on peut essayer de se connecter sur l’interface web avec le port 8006. Notez qu’à ce stade, l’interface web n’est pas sécurisée (elle utilise HTTP), on commencera donc par un tunnel SSH :

ssh -L 8006:localhost:8006 root@alice.picasoft.net

Dans cet exemple, on dit que le port 8006 de localhost arrive sur le port 8006 de alice.picasoft.net, via un tunnel SSH avec l’utilisateur root. Si l’authentification se fait par mot de passe ou clé SSH dépend de votre configuration SSH.

On se connecte ensuite sur localhost:8006 via un navigateur web, avec le compte root avec la méthode PAM. Si la connexion réussit, l’installation est réussie également.

Depuis l’interface, via les différents menus, on peut retrouver toutes les informations sur la machine :

  • Contenu de /etc/resolv.conf
  • Interfaces réseaux
  • Services démarrés
  • Configuration matérielle

On peut également ouvrir un shell, voir les mises à jour et les faire, etc. Se référer à la documentation officielle.

L’objectif est de faire un RAID 1 sur les disques durs, puis d’utiliser LVM sur le périphérique RAID nouvellement créé afin d’obtenir une souplesse de partitionnement.

On commence par identifier les identifiants des disques durs :

snippet.bash
$ fdisk -l | grep sd
    Disque /dev/sda : 447,1 GiB, 480103981056 octets, 937703088 secteurs
    /dev/sda1  *      2048    391167    389120  190M fd Linux raid autodetect
    /dev/sda2       391168 937701375 937310208  447G fd Linux raid autodetect
 
    Disque /dev/sdb : 447,1 GiB, 480103981056 octets, 937703088 secteurs
    /dev/sdb1         2048    391167    389120  190M fd Linux raid autodetect
    /dev/sdb2       391168 937701375 937310208  447G fd Linux raid autodetect
 
    Disque /dev/sdc : 1,8 TiB, 2000398934016 octets, 3907029168 secteurs
 
    Disque /dev/sdd : 1,8 TiB, 2000398934016 octets, 3907029168 secteurs

Les deux disques durs à combiner en RAID 1 sont /dev/sdc et /dev/sdd. On va créer une unique partition sur chaque disque, avec un type RAID Linux, prenant tout l’espace disponible.

snippet.bash
$ fdisk /dev/sdc 
 
    Commande (m pour l'aide) : n
    # Laisser les défauts (toute la partition, primaire, etc)
    Commande (m pour l'aide) : t
    Type de partition (taper L pour afficher tous les types) : fd
    Commande (m pour l'aide) : w
 
$ fdisk /dev/sdd
 
    Commande (m pour l'aide) : n
    # Laisser les défauts (toute la partition, primaire, etc)
    Commande (m pour l'aide) : t
    Type de partition (taper L pour afficher tous les types) : fd
    Commande (m pour l'aide) : w

On vérifie que tout a bien fonctionné :

snippet.bash
$ fdisk -l | grep "sd[c,d]"
Disk /dev/sdc: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors
/dev/sdc1   2048 3907029134 3907027087  1.8T Linux RAID
Disk /dev/sdd: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors
/dev/sdd1   2048 3907029134 3907027087  1.8T Linux RAID

On va ensuite créer le périphérique RAID 1. Sur notre machine, deux périphériques RAID 1 existent déjà (/dev/md0 et /dev/md1), on choisit dev/md2. Le RAID 1 est aussi appelé mirror.

snippet.bash
$ mdadm --create --verbose /dev/md2 --level=mirror --raid-devices=2 /dev/sdc1 /dev/sdd1

On vérifie que tout s’est bien passé :

snippet.bash
$ cat /proc/mdstat
[...]
    md2 : active raid1 sdd1[1] sdc1[0]
          1953382464 blocks super 1.2 [2/2] [UU]
          bitmap: 15/15 pages [60KB], 65536KB chunk
[...]
 
$ mdadm --detail /dev/md2
/dev/md2:
        Version : 1.2
  Creation Time : Fri Nov 11 16:50:43 2016
     Raid Level : raid1
     Array Size : 1953382464 (1862.89 GiB 2000.26 GB)
[...]
    Number   Major   Minor   RaidDevice State
       0       8       33        0      active sync   /dev/sdc1
       1       8       49        1      active sync   /dev/sdd1

Attention:

Le périphérique RAID met un moment à se créer. On verra alors, avec la commande précédente, une progression du style :

md2 : active raid1 sdd1[1] sdc1[0]
      1953381440 blocks super 1.2 [2/2] [UU]
      [>....................]  resync =  0.1% (2907200/1953381440) finish=167.7min speed=193813K/sec
      bitmap: 15/15 pages [60KB], 65536KB chunk

Il faudra attendre que ce soit fini avant de passer à la suite.

Pour finir, on va sauvegarder la configuration du RAID pour qu’il puisse être chargé au démarrage. On exécute la commande suivante :

snippet.bash
$ mdadm --examine --scan
ARRAY /dev/md/0  metadata=1.2 UUID=0bb5e10b:a16862ee:8221aa37:daf398cd name=alice:0
ARRAY /dev/md/1  metadata=1.2 UUID=b97b8146:772c95ad:7e0c2b3e:24f3754e name=alice:1
ARRAY /dev/md/2  metadata=1.2 UUID=7f738779:e63987a4:1cb12224:e0cd9dca name=alice:2

On récupère la ligne qui concerne notre périphérique (ARRAY /dev/md/2...) et on l’ajoute au fichier /etc/mdadm/mdadm.conf.

On met ensuite à jour l’initramfs :

snippet.bash
$ update-initramfs -u

On peut redémarrer la machine pour vérifier que tout a bien fonctionné.

On va utiliser LVM sur /dev/md2 pour pouvoir créer des partitions souples :

  • Une partition logique sera utilisée pour les disques des machines virtuelles qui n’ont pas besoin de la vitesse des SSD (ou pour toutes les machines virtuelles, si on a pas de SSD)
  • Une autre sera utilisée pour les backups des machines virtuelles

On commence par créer le volume physique :

snippet.bash
$ pvcreate /dev/md2
Physical volume "/dev/md2" successfully created
$ pvs
  PV         VG  Fmt  Attr PSize   PFree  
  [...]
  /dev/md2   hdd lvm2 a--    1.82t XXX

On voit que /dev/md2 est maintenant utilisable pour LVM.

On crée ensuite un volume group (VG), qui contiendra le PV créé ci-avant.

Note:

Si jamais on rajoute des disques ultérieurement, c’est à ce VG qu’on les rajoutera, avec la commande :

snippet.bash
$ vgextend hdd /dev/md3

snippet.bash
$ vgcreate hdd /dev/md2
Volume group "hdd" successfully created
$ vgs
  VG  #PV #LV #SN Attr   VSize   VFree  
  hdd   1   2   0 wz--n-   1.82t XXX
  [...]

Puis on crée deux volumes logiques (LV) sur ce VG :

  • vm_storage, pour les disques des machines virtuelles
  • backup, pour les backups de Proxmox
$ lvcreate -n vm_storage -L 300g hdd
Logical volume "vm_storage" created
$ lvcreate -n backup -L 300g hdd
Logical volume "backup" created
$ lvs
  LV         VG  Attr       LSize  
  backup     hdd -wi-ao---- 300.00g                                                    
  vm_storage hdd -wi-ao---- 300.00g                                                    
[...]

Ici, on a créé deux volumes logiques de 300G, ce qui laisse environ 1T d’espace libre sur le VG hdd, pour pouvoir augmenter l’un ou l’autre en fonction des besoins.

Enfin, il va falloir choisir un point de montage pour nos deux volumes, qui sera plus tard renseigné dans Proxmox. On ajoute ces lignes dans /etc/fstab :

/dev/mapper/hdd-backup      /SAVE	                   ext4    defaults	            0       2
/dev/mapper/hdd-vm_storage /var/lib/vm_storage	     ext4    defaults	     0       2

Notez que le chemin des LV sont construits avec la syntaxe /dev/mapper/<VG>-<LV>.

On vérifie que tout fonctionne :

# Monte tous les périphériques définis dans /etc/fstab
$ mount -a

On est prêt pour configurer Proxmox.

Proxmox a besoin de stockage pour stocker les disques des machines virtuelles et les backups. Il supporte un grand nombre de type de stockage. Il est capable d’utiliser LVM, mais dans la mesure où on a déjà créé nos volumes logiques et qu’on les gère à la main, le plus simple est d’utiliser le stockage Directory, qui correspond à un simple répertoire.

On clique sur Datacenter dans le menu de gauche, puis on choisit Storage.

On va créer trois stockages différents :

  • Un nommé local, qui utilise le SSD, pour les disques des machines virtuelles nécessitant de la vitesse
  • Un nommé hdd, qui utilise le HDD, pour les disques des machines virtuelles pour lesquelles la vitesse n’est pas critique
  • Un nommé save, qui utilise le HDD, pour les backups des machines virtuelles

Important:

Toujours nommer le stockages qui utilisent le SSD local, celui utilisant le HDD *hdd et celui pour les backups save pour que les alertes fonctionnent (voir métrologie).

On arrive à ce résultat :

On reconnaît les chemins /SAVE et /var/lib/vm_storage sur lesquels on a monté les LV du HDD précédemment. On suppose que sur /var/lib/vz est monté un LV qui provient du SSD.

On va forcer la connexion à l’interface web en HTTPS pour plus de sécurité. On se rend dans sur la machine concernée (alice, bob), puis dans SystemCertificates :

On va faire en sorte que le certificat soit généré et mis à jour automatiquement par Let’s Encrypt. Pour ce faire, on clique sur Register Account et on renseigne les informations suivantes :

La sortie montre que l’opération a fonctionné :

On clique ensuite sur Edit Domains pour choisir le(s) domaine(s) pour lequel on générera un certificat. On choisira par exemple bob.picasoft.net si les entrées DNS pour bob.picasoft.net pointent vers la machine où est hébergée Proxmox.

Une fois que c’est fait, on clique sur Order Certificate. Proxmox obtient le certificat et redémarre l’interface web :

Une fois cette étape terminée, on peut se connecter via l’URL publique de Proxmox, par exemple https://bob.picasoft.net:8006. Si le cadenas apparaît, l’opération a fonctionné et on est plus obligé d’utiliser le tunnel SSH.

Important:

Il est préférable d’installer un pare-feu basique et fail2ban.

  • technique/infrastructure/hyperviseurs/install_proxmox.txt
  • de qduchemi