Outils pour utilisateurs

Outils du site


fr:rapports:2022:05-07
no way to compare when less than two revisions

Différences

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


fr:rapports:2022:05-07 [2022/07/26 14:47] (Version actuelle) – créée tharyrok
Ligne 1: Ligne 1:
 +# 2022/05/07 (Neutriton) : Atelier Proxmox
  
 +* [Réunion précédente](https://wiki.neutrinet.be/fr/rapports/2022/04-16)
 +* [Pad de la réunion](https://doc.neutrinet.be/atelier-proxmox-2022-05-07#)
 +
 +Présences : 
 +
 +- Tharyrok
 +- Ptr
 +- HgO
 +- Célo
 +- wget
 +
 +## Météo
 +
 +//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 :-)**//
 +
 +
 +### Attente(s) forte(s)
 +
 +//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é//.
 +
 +- Avoir son proxmox fonctionnel à la fin de la journée. Cluster est en bonus.
 +- Que personne ne s'ennuie
 +- S'arrêter là où on en a envie
 +
 +## Atelier
 +
 +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 !
 +
 +* dispo pour le workshop : 4 ordis / tous avec 2 interfaces reseau + au moins deux disques *
 +
 +### Creation preseed/iso/kexec
 +
 +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](https://gitlab.domainepublic.net/Neutrinet/ketupa/build-images/-/blob/main/images/sources.pkr.hcl) 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](https://gitlab.domainepublic.net/Neutrinet/ketupa/build-images/-/blob/main/images/build-debian-11.pkr.hcl) 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](https://gitlab.domainepublic.net/Neutrinet/ketupa/build-images/-/blob/main/images/http/preseed-debian-11.cfg).
 +
 +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 :p 
 +
 +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).
 +
 +### Installation Debian minimal
 +
 +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
 +    - ssh et full install
 +    - automatiser l'install (wget, ptr)
 +- 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
 +
 +#### Kexec
 +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
 +```
 +https://github.com/Tharyrok/kexec-remote-debian-install
 +
 +
 +### IP des gens
 +
 +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 :p 
 +
 +
 +
 +### Installation proxmox
 +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
 +
 +### Installation pfsense
 +
 +### Premiere VM
 +
 +#### System
 +
 +- VirtIO SCSI est par défaut, mais pour des raisons de performance IO on met VirtIO SCSI single
 +- TPM : intéressant pour du chiffrement
 +
 +#### Disk
 +
 +- Cocher la case cache discard pour réduire la taille du disque à la taille réellement utilisée
 +- Cache : write back pour augmenter la vitesse d'écriture, intéressant pour des bases de données
 +
 +#### CPU
 +
 +- Type: host, pour être au plus proche de l'hyperviseur. 
 +    - Le seul inconvénient est qu'on risque d'avoir un problème lorsqu'on passe d'un type d'ordi à un autre... ce qui est notre cas ici, mais au pire on pourra le changer tout à l'heure en redémarrant la VM. Donc au final on va mettre kvm64, qui est le plus petit dénominateur commun.
 +
 +
 +#### Memory
 +
 +Ràs
 +
 +#### Network
 +
 +- Choisir vmbr0
 +- Décocher la case firewall. Par défaut proxmox utilise iptables
 +
 +#### Options
 +
 +- Start at boot coché
 +- Use tablet for pointer décoché
 +- QEMU guest agent: double cliquer, puis cocher les deux options pour déclencher le fstrim lors d'une migration
 +
 +#### Hardware
 +
 +- On peut rajouter un câble série si on veut. Ainsi on peut accéder à la console en mode texte, avec le petit menu « xterm.js » dans console. Ca permet de faire des copier/coller des mots de passe :) 
 +  - https://gitlab.domainepublic.net/Neutrinet/infra-ansible/-/blob/main/roles/commun/tasks/serial.yml
 +
 +### 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.
 +
 +### Installation ceph
 +
 +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`
 +
 +## Prochaine réunion
 +
 +Prochain Neutriton (config keycloak) : 11/06, à confirmer lors de la réunion hub-infra
 +
 +Prochaine réunion hub-infra : 29/05 à 14h, Caldarium / Jitsi
 +
 +:warning: 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
 +
 +## Météo de fin
 +
 +//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.//
 +
 +{{tag>infra neutriton}}
fr/rapports/2022/05-07.txt · Dernière modification : 2022/07/26 14:47 de tharyrok