Ceci est une ancienne révision du document !
<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.
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: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: 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) </markdow n>