Outils pour utilisateurs

Outils du site


benevoles:technique:proxmox

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
benevoles:technique:proxmox [2024/04/21 09:55] – créée ced117benevoles:technique:proxmox [2025/03/31 00:47] (Version actuelle) ljf
Ligne 1: Ligne 1:
-====== Proxmox pour ARN ======+<markdown> 
 + 
 +# 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](/benevoles:technique: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 
 +1. Booter sur l'iso proxmox 
 +2. 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. 
 + 
 +1. Brancher un câble vert du switch manageable au premier port du serveur 
 +1. Brancher un câble bleu du switch non manageable au second port du serveur 
 +1. Ajouter une route `ip r a 2a00:5881:8100::134 via fe80::69:4 dev eth1 metric 1024 pref medium` sur hw2 
 +1. 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:
 +        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: 
 +1. Cliquer sur le noeud `hwhost-4 > Certificates` 
 +2. Dans la partie `ACME` cliquer sur `Add` 
 +3. Saisir `hwhost-4.arn-fai.net` 
 +4. Cliquer sur `Edit` (account) et mettre `arn-fai` puis `Apply` 
 +5. `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](https://www.libguestfs.org/virt-builder.1.html) 
 + - ~~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) 
 +</markdown>
benevoles/technique/proxmox.1713693319.txt.gz · Dernière modification : 2024/04/21 09:55 de ced117