Ceci est une ancienne révision du document !
Table des matières
Proxmox pour ARN
Proxmox Virtual Environnement est une solution de virtualisation libre (licence AGPLv3) basée sur l'hyperviseur Linux KVM, et offre aussi une solution de conteneurs avec LXC. Elle propose un support payant.
[[https://fr.wikipedia.org/wiki/Proxmox_VE|Source]].
Promox, tout comme Ganeti, permet la migration à chaud de machines virtuelles ce qui permet une disponibilité du service de virtualisation en cas de panne ou de maintenance. Proxmox simplifie grandement la gestion de machines virtuelles.
Installation et création du cluster
Ajout d'un nœud
Ici on prendra l'exemple de l'ajout du noeud hw4
Avant l'installation de proxmox
- Un serveur
- Pas de carte RAID matériel
- 4 disques de 4To + 1 disque de spare (moitié Samsung 870 EVO, moitié Crucial XXXXXXX)
- Vérifier que les 2 alims fonctionnent
Installation de proxmox
- Booter sur l'iso proxmox
- choisir l'installation ZFS RAID 10 (en faisant attention que les disques avec des serial number proche, ne soient pas dans le même sous mirroir du RAID 10...)
Création de l'entrée DNS
A faire sur ns0.arn-fai.net
hwhost-4 A 89.234.141.134 hwhost-4 AAAA 2a00:5881:8100::134
Mise en réseau
! Cette configuration est temporaire, car on utilise le switch non manageable dédié du cluster pour accéder à internet, ce qui n'était pas prévu.
- Brancher un câble vert du switch manageable au premier port du serveur
- Brancher un câble bleu du switch non manageable au second port du serveur
- Ajouter une route
ip r a 2a00:5881:8100::134 via fe80::69:4 dev eth1 metric 1024 pref medium
sur hw2 - Configurer /etc/network/interfaces et redémarrer le réseau
service networking restart
auto eno2 iface eno2 inet manual iface eno2 inet6 manual auto vmbr0 iface vmbr0 inet static address 192.168.11.4/24 gateway 192.168.11.2 bridge-ports eno2 bridge-stp off bridge-fd 0 post-up /sbin/ip a a 89.234.141.134 dev $IFACE iface vmbr0 inet6 static address fe80::69:4/112 gateway fe80::69:2 accept_ra 0 autoconf 0 dad-attemps 0 post-up /sbin/ip a a 2a00:5881:8100::134 dev $IFACE auto vmbr1 iface vmbr1 inet static address 169.254.42.1/32 bridge-ports none bridge-stp off bridge-fd 0 post-up /sbin/ip a a 10.254.42.1/32 dev $IFACE iface vmbr1 inet6 static address fe80::42:1/64 post-up /sbin/ip a a fc00::42:1/64 dev $IFACE
Ajout dans le cluster
SSH
/etc/ssh/sshd_config
A partir d'ici il faudra se connecter via ssh avec le port 722.
x509 Let's Encrypt
Dans l'interface web:
- Cliquer sur le noeud
hwhost-4 > Certificates
- Dans la partie
ACME
cliquer surAdd
- Saisir
hwhost-4.arn-fai.net
- Cliquer sur
Edit
(account) et mettrearn-fai
puisApply
Order certificates now
Résolveur DNS
/etc/resolv.conf
search arn-fai.net nameserver 80.67.169.40 nameserver 185.233.100.101 nameserver 89.234.141.66
Fichier /etc/hosts
Ajouter
89.234.141.134 hwhost-4.arn-fai.net hwhost-4
Déployer les scripts d'ARN
Ajouter la config ssh
Host hwhost-2.arn-fai.net Port 2222 Host * User root Port 722
Valider les fingerprint sur l'ensemble des nœuds
ssh hwhost-3.arn-fai.net ssh hwhost-4.arn-fai.net
A faire sur un des nœuds déjà installé
sync-nodes
Désactiver le message de souscription sur l'interface web
Remplacer aux alentour de la ligne 565 du fichier /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
.data.status.toLowerCase() !== "active") {
par
.data.status.toLowerCase() !== "active") {orig_cmd(); } else if ( false ) {
Libérer du stockage inutilisé sur les machines virtuelles
- En activant l'option //Discard// de chaque machine virtuelle sous //Hardware// puis //Hard Disk//
Modifier les repository de base de l'instance Proxmox
cat <<EOF >/etc/apt/sources.list.d/pve-enterprise.list # deb https://enterprise.proxmox.com/debian/pve bookworm pve-enterprise EOF
cat <<EOF >/etc/apt/sources.list.d/pve-install-repo.list deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription EOF
Enlever le message d'alerte de souscription lors de la connexion à l'interface graphique
echo "DPkg::Post-Invoke { \"dpkg -V proxmox-widget-toolkit | grep -q '/proxmoxlib\.js$'; if [ \$? -eq 1 ]; then { echo 'Removing subscription nag from UI...'; sed -i '/.*data\.status.*{/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; }; fi\"; };" >/etc/apt/apt.conf.d/no-nag-script apt --reinstall install proxmox-widget-toolkit
Source : https://github.com/tteck/Proxmox/blob/main/misc/post-pve-install.sh
Optimisations
Général
Récupérer le nom du pool ZFS, en cliquant sur la machine du cluster de la //server view//, sous //Disks// puis //ZFS//
Désactiver les mises à jour des //metadata// pour les accès aux fichiers
sudo zfs set atime=off [Nom du pool de stockage]
- Désactiver la compression du système de fichiers
sudo zfs set compression=off [Nom du pool de stockage]
Régler le quota de mémoire utilisée par ZFS
- Ajouter la ligne suivante à /etc/modprobe.d/zfs.conf
- La valeur est calculée selon cette méthode : 2 GB de base + 1 GB par TB de stockage
options zfs zfs_arc_max=[Valeur]
- Dans notre cas, nous avons sur hwhost-3 un stockage ZFS de 8 To, nous avons donc besoin de 10 GB de mémoire.
- Soit 10 //GB 1024 1024 * 1024// = 10737418240
Source : https://pve.proxmox.com/wiki/ZFS_on_Linux#sysadmin_zfs_limit_memory_usage
Modifier le profil de mise à l'échelle du CPU
Modifier le fichier crontab
crontab -e
Ajouter les lignes
# Modification de la mise à l'échelle du processeur par le gouverneur "Conservative" @reboot (sleep 60 && echo "conservative" | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor)
Commandes utiles
Lister les VPS
manage-vps list
Obtenir les infos générales d'un VPS
manage-vps show VMID
Démarrer un VPS
manage-vps start VMID
Éteindre un VPS
manage-vps stop VMID
Redémarrer un VPS
sur son disque
manage-vps reboot VMID
sur un disque de sauvetage (rescue)
manage-vps reboot VMID --rescue
sur une iso
manage-vps reboot VMID --iso ISO
Ajouter une iso
wget https://miroir.univ-lorraine.fr/debian-cd/12.6.0/amd64/iso-cd/debian-12.6.0-amd64-netinst.iso -P /var/lib/vz/template/iso -o bookworm.iso sync-nodes
Ajouter une image cloud-init
wget https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2 -P /var/lib/vz/images -o bookworm.qcow2 sync-nodes
Créer un VPS
manage-vps create VMID --name NOM --vcpu VCPU --ram RAM --disk DISQUE --suite SUITE --ipv4 IPV4/32 --ipv6 IPV6/128 --publickey "CLÉ PUBLIQUE" --user USER --firstname "PRENOM" --lastname "NOM" --email "MAIL" --secondary hwhost-4
Exemple pour un vps à 7€/mois:
manage-vps create VMID --name vps-cdupont --vcpu 1 --ram 2048 --disk 15 --suite bookworm --ipv4 89.234.141.106/32 --ipv6 2a00:5881:8110:b00::1/128 --publickey "ssh-ed25519 AAAAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX camille@doe" --user jdoe --firstname "Camille" --lastname "Dupont" --email "camille@dupont.net" --secondary hwhost-4
Importer un VPS depuis ganeti
A faire sur l'hôte sur lequel on souhaite faire migrer la VM.
manage-vps import VMID --name NAME --ipv4 89.234.141.XXX/32 --user USER --firstname "PRENOM" --lastname "NOM" --email "MAIL"
Supprimer un VPS
manage-vps destroy VMID
Migrer un VPS à chaud sur un autre nœud
PAS ENCORE DISPONIBLE (mais le bouton migrer suivi d'un reboot fonctionne)
Faire évoluer les ressources d'un VPS
RAM
La taille est en Mo
manage-vps upgrade --ram 4048
CPU
manage-vps upgrade --cpu 2
Augmentation du disque
La taille est en Go
manage-vps upgrade --disk 200
TODO
- Utiliser libguestfs pour personnaliser les images avec virt-builder
Faire en sorte que les VM netplan fonctionnent- Écrire la routine d'import de VM depuis ganeti
- Automatiser le partage de route (soit via le snippets arn-set-routes.sh, soit via ospf ou ibgp)
- Pouvoir créer des VM sur un nœud mais depuis un autre nœud
- Pouvoir lister les VM de tous les nœuds
- Raccorder COIN au cluster pour proposer le bouton provisionner
- Ajouter d'autres boutons (redémarrer, rescue, iso, faire évoluer les ressources, stop, start, changer le mot de passe, changer la clé publique)
- Renforcer le script pour couper l’exécution en cas d'échecs d'une commande (+ trap)
- Vérifier les permissions des membres sur proxmox
- Ajouter le support de la réplication
- Documenter l'installation d'un nœud
- Utiliser une zone et un Vnet (SDN) à la place d'une interface vmbr1 configurée manuellement sur chaque nœud
- Revoir le réseau pour éviter de tout faire passer par le switch dédié au backbone
- Relire des bouts de doc proxmox au cas où on a loupé des choses
- Utiliser cicustom pour lancer un script finale (install yunohost)