Installation et configuration de Proxmox à partir de Debian
Préambule
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
Pourquoi utiliser Proxmox ?
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:
Installation de Proxmox
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.
Installation du RAID sur les HDD
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é.
Mise en place de LVM sur le périphérique RAID 1
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 virtuellesbackup
, 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.
Configuration du stockage 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é
backup
, qui utilise le HDD, pour les backups des machines virtuelles
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.
Sécurisation de l'interface web
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 System
→ Certificates
:
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.
Création d'un firewall basique
Important:
Il est préférable d’installer un pare-feu basique et fail2ban.