Moment informel durant lequel on exprime en peu de mots comment on se sent et si on a une attente forte pour la réunion. Ce n'est pas un moment de discussion mais d'expression individuelle et ce n'est pas obligatoire
Si l'une ou l'autre personne exprime une attente forte, merci de vous en occuper en priorité ou de la noter dans le hub ou dans un point approprié.
Proposition d'aujourd'hui : nous laisser plein de choix, des manières différentes de faire.
Par exemple, est-ce qu'on commence sur une iso, ou un truc déjà préparer.
Actuellement, on a des machines avec Ubuntu installé dessus, les login et mot de passe sont neutrinet.
Tharyrok va nous donner une plage IP, pour qu'on puisse bronzer.
D'abord, on va donc choisir comment on démarre l'installation de Debian. On résinstallera donc la machine. Puis on installera Proxmox (on verra si on met un pfsense our pas).
Mettre une première VM et puis on verra où est-ce qu'on en sera pour la mise en cluster.
On mangera aussi ! Et on dira gère.
Sieste ! Recherche ! Développement !
Qu'est-ce qu'un preseed ? Un fichier de config que l'installateur de debian va lire. Toutes les distibutions qui utilisent Debian sont compatibles avec cet installateur, sauf Ubuntu. Vilain Ubuntu, pas bien.
Cela permet de faire certains choix en amont et on doit renseigner moins d'informations au moment de l'installation. Ca permet de donc de gagner du temps en évitant les questions où on va toujours donner les mêmes réponses.
Exemple de ce qu'on utilise dans Neutrinet : https://gitlab.domainepublic.net/Neutrinet/ketupa/build-images
Pour CentOS goût menthe c'est pas preseed, mais kickstart. Sinon le principe est le même.
Le soucis c'est qu'il faut faire une install complet pour s'assurer que le preseed fonctionne comme prévu. Pour éviter ça, on a un outil qui s'appelle Packer : https://www.packer.io/
On peut lui dire de démarrer une VM qemu, et puis lui demander de simuler la frappe sur le clavier.
Dans le fichier source de packer, on définit les ressources de la VM qu'il faut créer. On désactive le headless pour faire du debugging car la fenêtre va s'afficher.
Dans le fichier build-debian-11 on définit ce que va faire packer lors de l'install avec l'iso debian 11.
Autre exemple : Packer s'occupe de la création des images vagrant.
Lorsque la VM est créée on peut lancer des scripts. Pour Neutrinet, on utilise un playbook ansible.
Dans le dossier http, on retrouve le preseed pour debian 11.
A la fin, on peut lancer une commande. Mais les late-commandes de Debian ne foncitonnent pas toujours très bien donc mieux vaut se contenter du minimum, puis provisionner avec ansible (sachant que packer permet de lancer un playbook ansible à la fin de toute façon). Ici, on utilise le late-command pour permettre de se connecter en ssh via root avec un mot de passe (nécessaire pour exécuter le playbook ansible)
Maintenant, soit on crée une iso en injectant le preseed dans l'initram, soit on utilise kexec.
Kexec est un outil qui s'installe et qui permet de faire un pivot du kernel. Un kernel est en train de tourner, et au lieu de redémarrer, on demande à l'OS d'aller chercher un autre kernel en lui donnant le chemin de ce kernel.
Ca fait la même chose qu'un redémarrage mais sans redémarrage
Cela permet de lancer le serveur SSH sans devoir passer par le bios. En gros, on donne une IP, on lance le serveur SSH, et hop on passe sur ce nouveau kernel. Ensuite on continue l'installation.
Cela peut être utilse quand on a qu'un accès SSH, qu'on a pas accès pour utiliser un ISO, ou si une installation ne nous convient pas.
On ne devra pas installer packer, cest un outil qui permet de vérifier plus rapidement ses pressed (sans tester une install à chaque fois).
Cela correspond à l'image mini.iso, cela ne contient que grub, syslinux, le kernel et l'initram de l'installateur debian.
Contrairement à la net install où on a déjà les modules de l'installateur (on télécharge mais on a déjà l'installateur).
C'est pour cette raison que la config réseau se fait au tout début de l'install avec debian mini, parce qu'il va en avoir besoin pour télécharger le reste de l'installateur.
Lien vers le mini iso : https://deb.debian.org/debian/dists/bullseye/main/installer-amd64/current/images/netboot/mini.iso
L'inconvénient de la mini iso est que comme elle doit télécharger les modules de l'installateur sur internet, si la version de Debian a changé, on n'y a plus accès (passage de la 10.2 à la 10.3 par exemple). Les modules téléchargés ne sont plus compatibles. Alors que la netinstall fonctionnera de toute manière car elle a déjà l'installateur.
Après, c'est très simple de re-générer une image avec les bons modules.
La Grande Référence : https://wiki.debian.org/DebianInstaller/Preseed/EditIso
sudo -sE # Garde le shell de l'utilisateur et l'historique dans le home de l'utilisateur mkdir /tmp/edit-iso 7z x -o/tmp/edit-iso mini.iso cd /tmp/edit-iso
Il y a deux fichiers importants:
-rw------- 1 root root 6840768 Mar 17 16:40 linux -rw------- 1 root root 29955944 Mar 23 09:42 initrd.gz
linux = le kernel initrd = installateur de debian
On télécharge le preseed, on décompresse initrd (installateur), puis on injecte le preseed dans l'installateur. Et on recompresse le tout. On peut bien sûr modifier le preseed.
wget https://gitlab.domainepublic.net/Neutrinet/ketupa/build-images/-/raw/main/images/http/preseed-debian-11.cfg -Opreseed.cfg gzip -d initrd.gz echo preseed.cfg | cpio -H newc -o -A -F initrd gzip -9 initrd
Add non-free firmware binary blobs if needed (cdimages.debian.org est down juste la maintenant…)
Quand il n'est pas down: https://cdimage.debian.org/images/unofficial/non-free/firmware/stable/current/firmware.cpio.gz
wget https://ftp.free.org/mirrors/cdimage.debian.org/cdimage-unofficial/non-free/firmware/stable/current/firmware.cpio.gz mv initrd.gz initrd.gz.orig cat initrd.gz.orig firmware.cpio.gz > initrd.gz rm initrd.gz.orig firmware.cpio.gz
Ensuite on installe les paquets isolinux / syslinux / xorriso (selon les distributions) et puis on fait la commande barbare ci-dessous.
La grande difficulté est de faire une iso qui soit compatible BIOS et UEFI. Il faut trouver la bonne ligne de commande…
En fonction des distributions, le fichier isohdpfx se trouve : - OpenSUSE : /usr/share/syslinux/isohdpfx.bin - Archlinux : /usr/lib/syslinux/bios/isohdpfx.bin - debian : /usr/lib/ISOLINUX/isohdpfx.bin
Pour le trouver, on peut faire:
find /usr -name "*isohdpfx*"
xorriso -as mkisofs \ -r -V 'Debian 11 mini' \ -o /tmp/preseed-debian-11-mini.iso \ -J -J -joliet-long -cache-inodes \ -isohybrid-mbr /usr/lib/syslinux/bios/isohdpfx.bin \ -b isolinux.bin \ -c boot.cat \ -boot-load-size 4 -boot-info-table -no-emul-boot \ -eltorito-alt-boot \ -e boot/grub/efi.img \ -no-emul-boot -isohybrid-gpt-basdat -isohybrid-apm-hfsplus \ /tmp/edit-iso
Ensuite on peut créer une VM dans Virtualbox pour tester cette nouvelle iso.
Bon ici les repos debian sont cassés, donc on va devoir trouver un mirroir.
https://unix.stackexchange.com/questions/216348/debian-disabling-use-mirror-on-preseed-cfg ?
On a plusieurs choix pour l'install : - kexec
- preseed (hgo, celo) - standard
NB : par rapport au pressed de ketupa, on a enlevé la rubrique partitionnement pour l'installa sur noms machines proxmox, et on a aussi enlevé l'adresse qui suit http dans d-i mirror/http/proxy string http://192.168.30.31:3142
https://deb.debian.org/debian/dists/bullseye/main/installer-amd64/current/images/netboot/debian-installer/amd64/ linux et initrd.gz wget https://ftp.free.org/mirrors/cdimage.debian.org/cdimage-unofficial/non-free/firmware/stable/current/firmware.cpio.gz
d-i netcfg/choose_interface select {interface} d-i netcfg/disable_dhcp boolean true d-i netcfg/get_ipaddress string {address} d-i netcfg/get_netmask string {netmask} d-i netcfg/get_gateway string {gateway} d-i netcfg/get_nameservers string {nameservers} d-i netcfg/confirm_static boolean true
kexec --command-line="vga=788" --initrd=initrd.gz linux
172.16.3.201/22 fdf7:90ec:3825:8456::1/128 → celo 172.16.3.202/22 fdf7:90ec:3825:8456::2/128 → hgo 172.16.3.203/22 fdf7:90ec:3825:8456::3/128 → ptr proxmox-03 172.16.3.204/22 fdf7:90ec:3825:8456::4/128 → wget
172.16.3.254/22 → gateway/dns
Une fois debian installé, on va modifier /etc/hostname et /etc/hosts pour y mettre les hosts proxmox-0X, et dans le second fichier, on va aussi enlever l'IPv4 et mettre les IPv6 à la place. Dans /etc/hosts, on va aussi mettre les adresses IPv6 des autres serveurs proxmox du futur cluster.
On modifie ensuite /etc/network/interface
# The loopback network interface auto lo iface lo inet loopback address fdf7:90ec:3825:8456::X/128
En faisant ça, on va router les IPs qu'on vient de s'assigner avec le lien local IPv6. L'avantage, c'est que si la configuration réseau change (on enlève une interface…), on garde toujours le lien réseau.
C'est ce qui nous a permis chez Neutrinet de créer un nouveau réseau pour CEPH facilement.
Un autre avantage est aussi si on relie des serveurs, on doit en principe passer pour du broadcast, ici, en mode routage, on envoie uniquement l'informations aux différents serveurs. De ce fait, on n'est pas obligé de faire du boadcast… ce qui permet de préserver la bande passante ! On tire alors le maximum de nos liens réseau.
Pour installer ifupdown2 il faut avoir toutes les intefaces en mode auto et pas hotplug dans le /etc/network/interface et faire dans un screen :
apt install ifupdown2 && ifreload -a
Ne pas oublier de faire le reload des interfaces… sinon ça s'installe et plus de réseau… On n'a pas toujours un datacenter à 5m de chez soi, donc il vaut mieux ne pas oublier
https://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_11_Bullseye
On doit installer wget et ca-certificates qui ne sont pas présent après l'installation avec la mini.iso. (on a vérifié, wget est bien installé, il a deux bières en main)
Pourquoi installe-t-on depuis Debian ?
L'ISO de proxmox force un certain partionnement avec LVM. Avec Debian, on peut faire un partitionnement spécifique.
On va ajouter la configuration du switch virtuel dans /etc/network/interface :
auto XXXXX iface XXXXX inet static auto vmbr0 iface vmbr0 inet6 auto iface vmbr0 inet static address 172.16.3.20X/22 gateway 172.16.3.254 bridge-ports XXXXXX bridge-stp off bridge-fd 0
On ajoute ensuite l'image ISO qu'on a créé tout à l'heure dans le storage local du node proxmox
Ràs
### Mise en cluster
On a ajouté une seconde interface à nos serveur (branchement d'un second câble à notre seconde interface, connectée à un switch).
On doit vérifier qu'on a le auto <interface>
sur chacune de nos interface réseau. Ensuite, on prend l'IPv6 en fe80::...
de la deuxième interface réseau.
On ajoute dans le fichier /etc/network/interfaces :
auto lo iface lo inet loopback address fdf7:90ec:3825:8456::X/128 post-up ip route add fdf7:90ec:3825:8456::1 via fe80::d6be:d9ff:fec5:2704 dev XXXX post-up ip route add fdf7:90ec:3825:8456::2 via fe80::eb6:d2ff:feb2:bd0d dev XXXX post-up ip route add fdf7:90ec:3825:8456::3 via fe80::3ed9:2bff:fe4d:2bbf dev XXXX post-up ip route add fdf7:90ec:3825:8456::4 via fe80::6e4b:90ff:fe1f:db6c dev XXXX pre-down ip route add fdf7:90ec:3825:8456::1 via fe80::d6be:d9ff:fec5:2704 dev XXXX pre-down ip route add fdf7:90ec:3825:8456::2 via fe80::eb6:d2ff:feb2:bd0d dev XXXX pre-down ip route add fdf7:90ec:3825:8456::3 via fe80::3ed9:2bff:fe4d:2bbf dev XXXX pre-down ip route add fdf7:90ec:3825:8456::4 via fe80::6e4b:90ff:fe1f:db6c dev XXXX auto XXXXX iface XXXX inet manual
On est allé chercher les adresses fe80::… qui sont sur nos nouvelles interfaces réseau sur chacun des serveurs en faisant un ip a.
On retire la ligne qui correspond à notre IP, parce qu'on va passer par l'interface l0
pour nous.
Puis ifreload -a
Quand on fait un ip -6 r s
on doit voir par exemple:
... fdf7:90ec:3825:8456::1 via fe80::d6be:d9ff:fec5:2704 dev enp4s6 metric 1024 pref medium fdf7:90ec:3825:8456::2 dev lo proto kernel metric 256 pref medium fdf7:90ec:3825:8456::3 via fe80::3ed9:2bff:fe4d:2bbf dev enp4s6 metric 1024 pref medium fdf7:90ec:3825:8456::4 via fe80::6e4b:90ff:fe1f:db6c dev enp4s6 metric 1024 pref medium
Et on vérifie avec un ping sur chacun des proxmox-0x
Quand tout est ok et que tout le monde parvient à communiquer, on va pouvoir créer le cluster :
https://pve.proxmox.com/wiki/Cluster_Manager
Pour initier le cluster, une personne utilise cette commande :
pvecm create {name_cluster}
Ensuite les autres personnes doivent s'ajouter au cluster. Ici, on met proxmox-01 car c'est cette machine qui a créé le cluster.
Pour pouvoir rejoindre le cluster, les machines virtuelles des proxmox qui rejoignent le cluster doivent être éteintes.
pvecm add proxmox-01 -force
Oups, les personnes qui ont rejoint le cluster ont perdu leurs VM… Donc en prod, on commence en principe toujours par faire le cluster avant de mettre des machines.
Sabotage du cluster brocoli.
Ici, pour récupérer des VM, on va copier la config dans /etc/pve/node/qmu-server/ID… de proxmox-01 dans notre propre machine dans /etc/pve/node/qmu-server/notre-propre-ID :
cp proxmox-01/qemu-server/100.conf proxmox-04/qemu-server/400.conf
On peut changer les détails (noms de machine, identifiants, etc…).
Puis changer les interfaces.
Pour éviter ça, il faudrait copier tout ce qu'il ya dans /etc/pve/qemu-server AVANT de rejoindre le cluster. Mais ça c'est seulement les configs, il faudrait copier les disques virtuels aussi.
Sinon, le mieux, si on peut se permettre d'éteindre les VM, c'est de les backuper et les restaurer.
Mais il faut aussi que les ID des machines soient différents et que le stockage de backup ait un même nom.
Actuellement, pour bouger une VM d'un noeud du cluster à l'autre, on doit copier le stockage. Si on installe CEPH et qu'on fait un stockage partagé, on n'a ensuite que la RAM qui doit être copiée, car le stockage de la machine est partagé entre les différents serveurs.
Une première chose à faire est de wiper le disque ou va être installé CEPH :
lsblk -fs wipefs -a /dev/XXXXX
Puis on installe CEPH. https://pve.proxmox.com/pve-docs/chapter-pveceph.html
On peut d'abord supprimer le dépot de proxmox enterprise qui a été ajouté par défaut :
rm /etc/apt/sources.list.d/pve-enterprise.list pveceph install
On initialise le cluster ceph sur une (!) des machines dans le cluster
pveceph init --network fdf7:90ec:3825:8456::/64
sur chacune des machines proxmox dans le cluster
pveceph mon create
pveceph mgr create
On rajoute les OSD, une unité de stockage dans CEPH.
pveceph osd create /dev/sdX
Il faut que les horloges soient toutes à l'heure, sinon ceph va râler. Du coup on installe :
apt install systemd-timesyncd
Pourquoi pas ntpd ? Parce que systemd-timesyncd est juste un client, il n'y a pas la partie serveur.
de nouveau sur une seule des hosts dans le cluster :
pveceph pool create XXXXX --add_storages
Avec cette commande pool, CEPH réorganise le stockage en fonction des unités OSD crées plus haut.
On a un warning qui dit que proxmox a fait des placements de groupes / produits trop grand (128 alors que CEPH les préfère en 32):
1 pools have too many placement groups Pool padata has 128 placement groups, should have 32
Les placement de groupes sont des sous-blocs qui permettrent de régir le fait qu'on duplique une donnée ou non, qu'on change une donnée ou pas. C'est une algorithme qui gère dans quel node vont se retrouver les données. Il y a une formule pour calculer ce chiffre, mais ici OSEF (Ô CEPH, aide-nous).
Il y a une petite commande qui permet de passer en mode automatique:
ceph osd pool set XXXXX pg_autoscale_mode on
https://docs.ceph.com/en/latest/rados/operations/placement-groups/
Et maintenant, on va déplacer une VM pendant qu'elle tourne du disque local vers le disque padata (ceph):
- Dans la partie hardware de la VM, on clique sur le disk, puis en haut dans le menu “disk actions” on choisit move
Prochain Neutriton (config keycloak) : 11/06, à confirmer lors de la réunion hub-infra
Prochaine réunion hub-infra : 29/05 à 14h, Caldarium / Jitsi
Relire les notes du PV de la dernière réunion hub-infra et décider de la méthode de chiffrement https://wiki.neutrinet.be/fr/rapports/2022/01-09
Moment informel durant lequel on exprime en peu de mots comment, à titre personnel, la réunion a été vécue que ce soit positif ou négatif. Si une ou plusieurs tension est née durant la réunion, il est peut-être nécessaire d'envisager l'une ou l'autre réunion pour y remédier.