Table des matières
2022/06/11 (dc - chiffrement des serveurs)
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
Un peu bruyant mais ça va.
Chiffrement des serveurs
Et ajout de RAM et SSD.
On va commencer par bour.
Les étapes :
- Migrer les VMs vers l'autre serveur
- Retirer le serveur du cluster
- Ajouter la RAM en vitesse
- car on se rend compte qu'on a pas assez de place pour migrer toutes les VM sur le second serveur
- cela va créer un petit downtime ?
- on redémarrera le serveur juste après pour continuer l'opération tranquillement depuis le début
- Flasher les cartes RAID
- Mettre les disques en passthrough
- Remplacer les disques
- Installer debian, proxmox et ceph
- Attendre la synchro du cluster ceph
- Manger
Migration des VM vers nam
Comme on a pas suffisamment de mémoire RAM disponible sur le second serveur pour toutes les VM on va arrêter quelques VM qui ne sont pas nécessaires.
On se rend compte que certaines choses prennent beaucoup de RAM, par exemple, les machines qui gèrent le réseau (pfsense et core-01, core-02) prennent déjà 10 Go de RAM. Le cluster postgresql prend beaucoup aussi, mais on ne peut pas éteindre une des machines sinon il n'y aura plus de quorum.
On va finalement éteindre le serveur pour ajouter de la RAM avant de faire les autres étapes. On sacrifie backoffice, meta (discourse) et librenms pendant l'opération.
Le neutribot commence à s'affoler sur matrix
On a décidé de couper Nextcloud également, parce qu'il n'y avait plus du tout de RAM.
Changement de la RAM sur bour
On vient d'éteindre bour.
On a sorti le serveur, mais pas complétement, juste pour pouvoir l'ouvrir et placer la RAM.
Une fois le serveur remis et rebranché, on se connecte sur l'iLo, adresse https://10.0.10.112/
La connexion se fait via le pfSense du serveur resté up, sur l'IP flottante 80.67.181.20
On regarde le boot du serveur via l'integrated remote console dans le dashboard du iLo. On voit que les 128 Go de RAM sont bien installés.
Puis dans Proxmox, on regarde les VM se rallumer peu à peu.
Migration des VMs vers bour
Et on lance la migration de toutes les machines vers Bour (y compris les edge). Ceph n'a pas totalement fini son recovery, mais ça ne devrait pas poser de problème, juste ralentir un peu.
Pour aider CEPH, on a mis une limite dans l'interface de proxmox de 100 Mbits pour la migration des VM.
Pour migrer toutes les VM d'un coup, on clique sur le serveur dans l'interface web, puis on va dans “Bulk Actions” et on choisit “Bulk migrate”.
Quelques VM n'ont pas migrer car elles avaient un iso local qui leur était lié, il suffit de l'enlever.
On vérifie les sessions BGP aussi, pour voir que tout se remet bien.
Comme Bour a maintenant plein de mémoire vive, on peut rallumer les machines qu'on avait éteintes
amj nous envoie des BD avec des patates
Pendant la migration des VMs, on a observé des latences au niveau des disques, ce qui a perturbé le cluster PostgreSQL… Au final tout est rentré dans l'ordre.
Nam est vidé de ses VMs ! On note qu'il consomme un peu moins de 10Gb de RAM au repos.
Séparation de Nam et Bour
On va sortir nam du cluster. Pour éviter que Ceph se bloque quand il va perdre un de ses membres, on va réduire le quorum et passer de 2 à 1.
On doit le faire en ligne de commande car il ne le laisse pas le faire depuis l'interface graphique.
Sur bour, on installe le paquet kitty-terminfo (pour l'ordi de Tharyrok qui fait des trucs bizarres avec son terminal)
Ensuite on réduit le quorum de Ceph:
11:15 root@bour ~ # ceph osd pool set data min_size 1 set pool 1 min_size to 1 11:15 root@bour ~ # ceph osd pool set data size 1 set pool 1 size to 1 11:15 root@bour ~ # ceph osd pool set device_health_metrics size 1 set pool 2 size to 1
On vide les OSD de Nam. Pour voir lesquels sont associés à Nam:
ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 3.08197 root default -5 1.54099 host bour 1 hdd 0.77049 osd.1 up 1.00000 1.00000 3 hdd 0.77049 osd.3 up 1.00000 1.00000 -3 1.54099 host nam 0 hdd 0.77049 osd.0 up 1.00000 1.00000 2 hdd 0.77049 osd.2 up 1.00000 1.00000
Et en fonction du résultat, ne pas se tromper:
ceph osd out 0 ceph osd out 2
Ceph calcule ensuite pour vider ces OSD. Là, on doit attendre que CEPH fasse son travail. La taille de l'espace urtilisé par ceph est diminué de moitié, puisqu'on utilise plus qu'un seul serveur.
Une commande peut attribuer plus de tread cpu pour que ça aille plus vite :
ceph tell 'osd.*' injectargs '--osd-max-backfills 16' ceph tell 'osd.*' injectargs '--osd-recovery-max-active 4'
Ca a un coût en performance mais on est passé à une vitesse de plus de 60Mbits pour la recovery.
On peut voir qu'on utilise 500Gb de data pour le cluster patata.
Pour savoir si on peut retirer Nam sans crainte :
ceph osd safe-to-destroy osd.0 ceph osd safe-to-destroy osd.2 OSD(s) 0 are safe to destroy without reducing data durability.
Ensuite, on stoppe et supprime les OSD de Nam :
systemctl stop ceph-osd@2 ceph osd destroy {id} --yes-i-really-mean-it
Et on fait pareil pour le reste des éléments de Ceph (Monitors, Metadata, Managers) :
pveceph mon destroy nam pveceph mds destroy nam pveceph mgr destroy nam
Puis on enlève le node du cluster Proxmox :
pvecm delnode nam
On a exclu nam du cluster, on va donc pouvoir l'éteindre et faire les manipulations.
Flash de la carte RAID
On ne pourra pas flasher la carte RAID finalement, parce que si on fait ça le BIOS ne pourra pas démarrer dessus… Or on a besoin que le BIOS puisse accéder aux disques pour le déchiffrement.
Pas trop grave, c'était pour améliorer les performances.
Ajout des SSD et RAM sur Nam
On a rajouté la RAM et les disques. Deux disques de 60Go dans les emplacements 1 et 2 et un de 2To dans l'emplacement 3.
On se connecte sur l'iLo de nam.
On démarre sur le smart storage administrator. C'est une centos avec les outils d'hp.
On va dans “reconfigure”.
Il ne voit pas nos disque mais un logical drive qui était celui des disques précédents qu'on supprime.
Ensuite on sélectionne nos 2 disques de 60GB et on fait un raid 1 en gardant les valeurs par défaut. Ca recrée un logical drive dans l'interface.
On crée un RAID 0 avec le disque de 2TO, toujours avec les valeurs par défaut.
On active le cache dans l'outil Cache Manager.
On configure la partie boot pour qu'il démarre sur le premier Logical Drive avec les deux SSD de 60Gb.
Réinstallation de Debian et chiffrement de Nam
On rajoute un iso qui est sur topi, servi par un petit serveur web.
http://10.0.10.13/debian-live-11-non-free.iso
Ensuite on éteint, avec l'interface de HP toute pourrie…
On se connecte au switch, avec un Ctrl+Y pour accéder à la console (logique) et afficher les VLAN.
On va configurer les ports de nam sans tag vlan mais en untagged car l'iso d'install de debian ne gère pas les VLAN.
Depuis le switch, on repère les vlan concernés et on fait
enable conf vlan ports 1/2,2/2 tagging unTagPvidOnly exit write memory
Puis on rage quit, mais on sauvegarde quand même la config par acquis de conscience.
L'iso utilisée est une live debian avec le firmware. Le fait de le stocker par topi évite de le charger par le navigateur et d'être limité par sa bande passante. On a la possibilité de prendre les iso depuis topi parce qu'on a des licences pour les iLo (trouvées pas cher sur le dark web).
On configure une ip pour eno2
ip addr add 10.0.10.11/24 dev eno2
On peut vérifier qu'on peut pinger la gateway. Puis modification de resolv.conf pour mettre le nameserver local.
nameserver 10.0.10.1
Et ajout de la gateway avec
ip route add default via 10.0.10.1
On rafraichit les dépôts et on installe le serveur openssh pour pouvoir s'y connecter en ssh.
Et on démarre le serveur ssh.
On donne un mot de passe à l'utilisateur user
.
Ca permet de se connecter sur le serveur et d'utiliser sa disposition de clavier habituelle
apt install -y cryptsetup debootstrap arch-install-scripts xfsprogs
On n'a pas besoin d'installer mdadm parce que la carte RAID matérielle s'en occupe (ce n'était pas le cas des Dell).
Pour partitionner les disques :
parted -s -a optimal -- /dev/sda mklabel gpt parted -s -a optimal -- /dev/sda mkpart primary 1MiB 3MiB parted -s -a optimal -- /dev/sda set 1 bios_grub on parted -s -a optimal -- /dev/sda mkpart primary 3MiB 1GiB parted -s -a optimal -- /dev/sda mkpart primary 1GiB 5GiB parted -s -a optimal -- /dev/sda mkpart primary 5GiB 100%
Ensuite on génère un fichier random qui va servir de clé de chiffrement pour la partie boot et root :
dd bs=512 count=4 if=/dev/random of=/tmp/encrypted-boot.key iflag=fullblock dd bs=512 count=4 if=/dev/random of=/tmp/encrypted-root.key iflag=fullblock
On crée les volumes chiffrés. Grub pour l'instant ne sait pas traiter du luks 2, on doit donc prendre luks 1. Puis on monte ces volumes.
cryptsetup --type luks2 --cipher aes-xts-plain64 --hash sha512 --iter-time 5000 --key-size 512 --pbkdf argon2id --use-urandom --key-file /tmp/encrypted-root.key luksFormat /dev/sda4 cryptsetup --type luks1 --cipher aes-xts-plain64 --hash sha512 --iter-time 5000 --key-size 512 --use-urandom --key-file /tmp/encrypted-boot.key luksFormat /dev/sda2 cryptsetup open /dev/sda4 encrypted-root --perf-no_write_workqueue --perf-no_read_workqueue --allow-discards --persistent --key-file /tmp/encrypted-root.key cryptsetup open /dev/sda2 encrypted-boot --perf-no_write_workqueue --perf-no_read_workqueue --allow-discards --persistent --key-file /tmp/encrypted-boot.key
Pour le cryptsetup open, on ajoute des options qui sont des optimisations pour les SSD.
Puis on formate, en XFS pour le root filesystem, et EXT2 pour le boot :
mkfs.xfs /dev/mapper/encrypted-root mkfs.ext2 /dev/mapper/encrypted-boot
On monte les deux système de fichier:
mount /dev/mapper/encrypted-root /mnt mkdir /mnt/boot mount /dev/mapper/encrypted-boot /mnt/boot
On peut vérifier avec lsblk que ça a pris forme.
Puis installation de bullseye avec debootstrap
debootstrap bullseye /mnt
On génère le fstab pour la debian:
genfstab -U /mnt > /mnt/etc/fstab
On chroot dans la machine debian :
arch-chroot /mnt
On rajoute quelques dépôts, parce que par défaut c'est hyper léger. On réutilise juste les dépôts qu'on a mis sur nos autres VMs :
deb http://deb.debian.org/debian/ bullseye main contrib non-free deb http://deb.debian.org/debian/ bullseye-updates main contrib non-free deb http://deb.debian.org/debian/ bullseye-backports main contrib non-free deb http://security.debian.org/debian-security bullseye-security main contrib non-free
On installe quelques outils pour le réseau et le chiffrement :
apt update apt install -y bash-completion kitty-terminfo locales ifupdown2 bridge-utils vlan grub2 linux-image-amd64 xfsprogs openssh-server cryptsetup opensmtpd zstd wget ca-certificates uuid-runtime vim
On choisi le clavier belge et ensuite on accepte les valeurs par défaut lors des différents prompt.
Cryptsetup rale un peu parce qu'il ne trouve pas le volume encrypted-root, mais c'est normal puisqu'on a encore rien fait…
On définit le mot de passe pour root:
passwd root
La ligne suivante permet de voir tous les volumes qui correspondent à /dev/sda4
find -L /dev/disk -samefile /dev/sda4
uuid pour cryptsetup le paruuid pour la partition → permet de dire que pour telle partition, ce sera telle clé de chiffrement.
À partir de ces infos, on configure CryptSetup.
Attention que la Swap est un peu un cas particulier : à chaque redémarrage il va créer un volume avec un nouveau UUID. Cela permet qu'entre deux redémarrage on ne puisse pas lire ce qu'il y avait dans la Swap.
Dans /etc/crypttab, on insère :
encrypted-swap /dev/disk/by-partuuid/11db20f1-2514-471c-8db3-8b8cc71c4090 /dev/urandom swap,cipher=aes-xts-plain64:sha512,size=51 encrypted-root /dev/disk/by-partuuid/0b0e69e0-1f08-4bdf-9db7-2069c7c2eff7 /etc/keys/encrypted-root.key encrypted-boot /dev/disk/by-partuuid/fd32798e-a51a-43fb-b3c9-e15b7d2f9c29 /etc/keys/encrypted-boot.key
On s'occupe de générer les locales, on décommente en_US.UTF-8 dans /etc/locale.gen
et on lance locale-gen
.
On se connecte à Bour pour obtenir la configuration réseau, on la place dans Nam. On remplace les IP de Bour par celle de Nam.
L'ifupdown2 de debian ne gère pas l'option bridge-vlan-aware qu'on décommente de la config pendant l'installation.
On doit aussi récupérer l'ip link locale de Nam et Topi, c'est un peu comme une MAC adresse mais pour l'IPv6 : elle reste fixe.
On va aussi ajouter les ip link locale dans la config pour faire du routing sur cette base-là.
On peut maintenant configurer grub dans /etc/default/grub
. On configure grub en mode série et on active l'option cryptsetup, sinon grub n'ira pas chercher ces disques-là.
# If you change this file, run 'update-grub' afterwards to update # /boot/grub/grub.cfg. # For full documentation of the options in this file, see: # info -f grub -n 'Simple configuration' GRUB_DEFAULT=0 GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="quiet console=tty0 console=ttyS1,115200" GRUB_CMDLINE_LINUX="" # Uncomment to enable BadRAM filtering, modify to suit your needs # This works with Linux (no patch required) and with any kernel that obtains # the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...) #GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef" # Uncomment to disable graphical terminal (grub-pc only) #GRUB_TERMINAL=console # The resolution used on graphical terminal # note that you can use only modes which your graphic card supports via VBE # you can see them in real GRUB with the command `vbeinfo' #GRUB_GFXMODE=640x480 # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux #GRUB_DISABLE_LINUX_UUID=true # Uncomment to disable generation of recovery mode menu entries #GRUB_DISABLE_RECOVERY="true" # Uncomment to get a beep at grub start #GRUB_INIT_TUNE="480 440 1" GRUB_TERMINAL_INPUT="console serial" GRUB_TERMINAL_OUTPUT="gfxterm serial" GRUB_SERIAL_COMMAND="serial --unit=1 --speed=115200" GRUB_ENABLE_CRYPTODISK=y
Dans /etc/keys
, un dossier va contenir toutes les clés de déchiffrement des disques. On les a générées tout à l'heure dans le /tmp du live cd et on va maintenant les copiers sur le disque chiffré :
cp /tmp/encrypted-* /mnt/etc/keys/.
On re chroot dans /mnt
Attention que le dossier /etc/keys
ne doit être accessible que par root ! Donc :
chmod 0700 /etc/keys chmod 0600 /etc/keys/encrypted-*.key
On met le même mot de passe sur boot et root (question de pratique car si les clés de déchiffrement sans uniquement dans l'initramfs, c'est pénible en cas de recovery)
Pour définir un mot de passe lisible par des humains, on utilise un petit outil qu'on installe sur notre PC :
git clone https://github.com/mbelivo/diceware-wordlists-fr src/rolldice -e 100 wordlist_fr_5d.txt
On peut donner en paramètre l'entropie désirée et le nombre de lettre par mots générés (ici 5)
Ca génère une liste de mots, qui devient la passephrase avec les espaces. On peut en générer plusieurs jusqu'à en trouver une amusante.
Pourquoi on fait tout ça ? Parce qu'on ne peut pas faire de copier coller sur l'interface serie, sinon il manque des lettres. Donc il faut quand même un truc qui soit lisible par un humain.
Dans cryptsetup, on peut définir plusieurs slots pour déchiffrer un volume. Par exemple, on a défini deux slots : - le fichier bin qu'on avait généré - notre passphrase Si cryptsetup ne trouve pas le premier, il va demander le second.
Le jour où on souhaite changer la passphrase, il faudra juste présenter à cryptsetup le fichier binaire. Et il ne faudra pas rechiffrer les disques
cryptsetup luksAddKey --key-file=/etc/keys/encrypted-boot.key /dev/sda2
Ca demande la passerphrase (mieux vaut la copier une fois dans son shell pour être sûr du copier / coller).
idem pour root
cryptsetup luksAddKey --key-file=/etc/keys/encrypted-root.key /dev/sda4
Puis ajout de la swap à la main, dans /etc/fstab
:
/dev/mapper/encrypted-swap none swap sw 0 0
On désactive l'hibernation (car à chaque redémarrage, on a une nouvelle swap avec un nouveau chiffrement)
echo "RESUME=none" >/etc/initramfs-tools/conf.d/resume
Et ensuite d'autres options pour initramfs à ajouter dans le fichier de conf :
nano /etc/initramfs-tools/initramfs.conf KEYMAP=y COMPRESS=zstd UMASK=0077
On rajoute une option pour ajouter les clés de chiffrement dans l'initramfs:
nano /etc/cryptsetup-initramfs/conf-hook KEYFILE_PATTERN="/etc/keys/*.key"
Puis on met à jour l'initramfs :
update-initramfs -u
On installe Grub sur le RAID 1 de 60Gb:
grub-install /dev/sda update-grub
On modifie le hostname !!!
Pour obtenir une console série, on se connecte à l'iLo en SSH, avec l'user neutrinet. Une fois connecté, il faut taper vsp
pour avoir accès à la console.
Note: On a eu un petit soucis avec le SSH de l'iLo parce qu'il est assez vieux.
Par acquis de conscience, on sauvegarde les clés de chiffrement sur une clé USB ! (on les effacera après, mais comme ça on peut vérifier que tout fonctionne et éviter de devoir refaire toute la procédure)
Dans le iLo, on éjecte le média qui contenait l'iso de debian.
On redémarre Nam \o/
Il faut toujours activer la console série AVANT que le Grub ne s'affiche, parce que sinon on n'aura pas le prompt. C'est le cas autant sur Dell qu'HP.
Si on se trompe dans le mot de passe, c'est la chenille qui redémarre. Donc mieux vaut ne pas se tromper.
Chez Dell, on a trois chances, mais pas sur hp à cause du raid matériel.
C'est un peu l'enfer parce qu'on n'a pas de vue sur ce qu'on tape.
Cela va mettre une petite minute avant de pouvoir déverouiller la clé. Surtout qu'à cette étape du chiffrement le système est en 16bit
Si jamais on s'est trompé dans le mot de passe:
cryptomount (hd0,gpt2) insmod normal normal
Ce qui permet de demander à Grub de déchiffrer le disque 0, puis de lancer le
Pour que le réseau fonctionne bien, on réactive les VLANs pour Nam dans le switch. C'est la même commande que tout à l'heure, mais:
vlan ports 1/2,2/2 tagging tagAll`
Ca ping \o/ Mais pas Bour… suite au prochain épisode
Installation de Proxmox
Pour commencer, on suit tout bêtement la doc de Proxmox : https://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_11_Bullseye
Puis on installe Ceph :
pveceph install
On génère des nouvelles clés de chiffrement pour Ceph:
dd bs=512 count=4 if=/dev/random of=/etc/keys/encrypted-osd-0.key iflag=fullblock
Et on configure pour cryptsetup le disque de 2Tb (/dev/sdb) de la même manière qu'on avait fait pour les disques SSD et on monte le volume.
On ajoute le disque dans crypttab, toujours de la même façon que pour les SSD. Par contre, on n'a pas de partition sur ce disque-là, on va utiliser l'UUID scsi pour l'identifier.
Ceph a besoin que ses disques soient configurés en LVM. Donc on configure le physical volume LVM :
pvcreate /dev/mapper/encrypted-osd-0
Puis on crée le volume group:
vgcreate ceph-911e4d9d-bdbc-4855-b3c2-5d6da1eeb5ef /dev/mapper/encrypted-osd-1
Note qu'on a généré le uuid via la commande uuidgen
Et enfin le logical volume :
lvcreate -l100%FREE ceph-911e4d9d-bdbc-4855-b3c2-5d6da1eeb5ef -n osd-block-db4831a2-9a84-4b7e-9858-8e27d5227f35
On met à jour /etc/crypttab
avec l'UUID de l'OSD. On prend la valeur by-scsi
car on a pas de partition.
On met à jour l'initramfs, puisqu'on a rajouté une clé de chiffrement, avec l'option -k all
pour cibler tous les kernels:
update-initramfs -u -k all
Dans /etc/network/interfaces
, on décommente les options qu'on avait commentées précédemment.
Si on oublie de le faire avant redémarrage, on peut toujours faire ifreload -a
pour prendre en compte les changements.
On peut ensuite redémarrer \o/
Retour de Nam dans le cluster
On commence par pinguer bour et topi pour être sûr que tout est ok avec le cluster, au niveau du réseau.
Depuis Nam, on demande à rejoindre le cluster de Bour :
pvecm add bour
Dans Proxmox, on voit Nam qui est apparu \o/
Petit détail à la con : il faut nettoyer le known hosts du cluster dans /etc/pve/priv/known_hosts
, parce qu'il contient encore les anciennes clés de nam.
Ensuite ssh-keyscan
permet de scanner toutes les clés ssh d'un host ou ip:
ssh-keyscan nam >> /etc/pve/priv/known_hosts
Et pareil pour l'IP de Nam.
On crée les Monitors et Managers de Ceph:
pveceph mon create pveceph mgr create
Attention, on doit rajouter le paquet systemd-timesyncd pour être sûr que l'heure soit la même dans tout le cluster, sinon Ceph va râler pendant la synchronisation…
Comme on change de version de Ceph, on va devoir activer des options qui vont bien… Voir : https://pve.proxmox.com/wiki/Ceph_Octopus_to_Pacific
ceph mon enable-msgr2 ceph config set osd bluestore_fsck_quick_fix_on_mount false
Là normalement CEPH est heureux \o/
On fait un restart des Monitor et Manager:
systemctl restart ceph-mon@nam.service ceph-mgr@nam.service
Avec ceph -s
on peut voir le détail. On a encore osd.0 et 2 marqué comme destroy. On nettoie tout ça:
ceph osd purge osd.2 ceph osd purge osd.0
→ fait qu'ils n'apparaissent plus du tout.
Avec la commande suivante on peut voir la liste des OSDs
ceph osd tree
C'est l'équivalent de la rubrique OSD dans l'interface web de Proxmox.
On va pouvoir ajouter le nouveau volume à CEPH.
Pour lui dire de déchiffre le volume.
/usr/bin/ceph auth get client.bootstrap-osd > /var/lib/ceph/bootstrap-osd/ceph.keyring
Maintenant on va faire râler CEPH en stoppant les osd 1 et 3 pour forcer la migration des données vers le nouveau serveur.
ceph osd out 3 ceph osd out 1
Là, on doit attendre qu'il fasse sa synchronisation. Dans l'interface web, c'est comme s'il n'y avait plus de données mais elles sont encore là, il a juste pris en compte la commande lui demandant de stopper les osd.
Avec ceph -s
on a une meilleure estimation du temps nécessaire que sur l'interface Proxmox.
Mise à jour de CEPH sur topi et bour
La nouvelle version de Proxmox vient avec une version plus récente de CEPH, on doit donc upgrader CEPH sur topi pour éviter que les Monitor fassent du yoyo.
On ne peut pas juste changer dans /etc/apt/source.list.d/ le fichier pour pve ceph avec bullseye car il veut ugrader tout bullseye.
IL y a un contournement en utilisant pas le dépôt CEPH du proxmox mais en utilisant
https://docs.ceph.com/en/quincy/install/get-packages/
On fait pareil sur Bour.
Mais on ne met à jour que les paquets ceph-mon et ceph-mgr.
Si on ne fait pas ça, nam ne voit rien car son moniteur ne parvient pas à voir les autres. En les montant tous d'une version, il pourra les voir et on pourra basculer sur nam.
Il y a un changement dans la manière de gérer les moniteurs dans la configuration. On redémarre ensuite le service osd.target. https://forum.proxmox.com/threads/ghost-monitor-in-ceph-cluster.58683/ https://forum.proxmox.com/threads/i-managed-to-create-a-ghost-ceph-monitor.58435/#post-269799
Là, on a galéré parce qu'on avait un moniteur fantôme sur Nam qui n'avait pas une configuration opérationnelle mais qu'on ne pouvait pas supprimer. C'était lié au fait d'avoir créé ce moniteur avant l'upgrade de mgr sur l'ensemble des serveurs (bour et topi étaient encore en mgr1).
Même en supprimant manuellement les fichiers de config et en éditant la conf de ceph, ce moniteur restait apparant dans l'interface web.
Après beaucoup de temps et une invocation de Chtulluh, une commande a finalement pu supprimer le montieur dans l'interface web :
ceph --admin-daemon /var/run/ceph/ceph-mon.nam.asok sync_force --yes-i-really-mean-it
Cependant, bour et topi communiquent encore avec l'ancien protocole. Dans la config de ceph, on a ajouté le port pour les forcer à utiliser le nouveau protocole.
Mais ça ne marche pas, on a toujours une erreur de permission denied.
Au final, on a complètement droppé la config de ceph pour les moniteurs et on l'a refaite à la main (en lançant le service sans utiliser systemd) :
https://docs.ceph.com/en/latest/rados/operations/add-or-rm-mons/#adding-a-monitor-manual
Maintenant, nam est dans le cluster (même si proxmox râle parce qu'il y a un patch de différence entre les versions). Il faut stopper mon pour ne pas qu'il se casse la gueule, simplement avec kill <process id>
. Puis le redémarrer avec systemd.
On l'a kill, on a remis le bon owner sur le répertoire du mon de CEPH, puis redémarrage du service et enable le service.
Re-migration des VMs sur nam
On peut donc finalement pouvoir migrer les VMs vers nam \o/
CEPH n'a pas fini de synchroniser sur le nouvel osd mais ce n'est pas grave pour la migration des VMs.
Par contre, avant de changer les disques, on doit encore attendre la fin de la synchronisation. On peut le voir avec les commandes ceph osd safe-to-destroy osd.1
et ceph osd safe-to-destroy osd.3
Remplacement d'un disque de Chez Mémé
Un SSD est mort sur bigoudi, un des serveurs de chez mémé. Comme on est en RAID 1, ce n'est pas trop grave, mais comme on passait par là autant le remplacer.
On va aller sur le serveur, stopper le raid et identifier le disque qui pose problème. Puis on repartitionne et on réinstalle le raid.
Pour savoir quel RAID pose problème, on peut le voir dans l'interface de Proxmox : c'est le /dev/sda
qui est en failed.
Il faut commencer par désactiver la swap.
swapoff /dev/mapper/1
On peut avoir les infos du RAID ici :
cat /proc/mdstat
On arrête le RAID du boot et du root:
mdadm --manage /dev/md127 --fail /dev/sda2 mdadm --manage /dev/md126 --fail /dev/sda4
On vérifie :
18:13 root@bigoudi ~ # cat /proc/mdstat Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] md126 : active raid1 sdc4[1] sda4[0](F) 53338112 blocks super 1.2 [2/1] [_U] md127 : active raid1 sda2[2](F) sdc2[1] 1045440 blocks [2/1] [_U] unused devices: <none>
On arrête le cryptsetup, sinon il va pas être heureux:
cryptsetup close swap1
Puis sync
pour pouvoir débrancher le disque.
Maintenant, on va voir si ça a fonctionner de changer le disque à chaud…
Et oui, on pouvait \o/
On partitionne le disque (comme on a fait pour nam plus haut).
Avant, on aurait dû éjecter les autres disques du RAID, mais visiblement ça a marché quand même :
mdadm --manage /dev/md126 --remove /dev/sda4
puis on les remet :
mdadm --manage /dev/md126 --add /dev/sda4
Puis un petit grub-install sur /dev/sda
Pour voir la progression de la synchronisation, on fait juste
cat /proc/mdstat
Réinstallation et chiffrement de Bour
Une fois toutes les VMs migrées sur nam et les osd.1 et 3 vidés, on détruit ces deux OSD.
On a aussi demandé aux OSD qu'à partir de maintenant ils aient au moins la version “pacific”.
Ici, on a eu un souci… nam a redémarré on ne sait pas trop pourquoi.
oups
D'abord, on a eu des soucis pour avoir la console. Comme on ne pouvait plus accéder depuis Bour, il a fallut utiliser le port série.
Mais ensuite on n'a pas pu accéder tout de suite à l'iLo pour taper la passephrase. En fait, c'était juste un problème de taille de fenêtre du terminal… il faut qu'il soit assez grand. T_T
Au redémarrage, il y a eu quelques soucis avec proxmox. Il ne voyait plus topi. Il a fallu lui indiquer manuellement qu'il était seul dans le cluster.
Pour le faire, il faut stopper certains services :
systemctl stop corosync.service pve-cluster.service pmxcfs -l
De cette manière, on stoppe complètement corosync et le proxmox n'est plus en cluster.
Ensuite, keepalived était mort sur core-01 et core-02.
Ca fonctionnait en IPv6 mais pas en IPv4.
Au niveau des status unkwown des VMs, c'était dû à l'exporter des metrics InfluxDB qui disait n'importe quoi. En le désactivant, on n'a plus l'erreur. Il sera de toute façon reconfiguré lors du lancement du playbook ansible.
Pour le moment, le proxmox n'arrive toujours pas à joindre topi et fonctionne comme s'il n'était pas dans un cluster. On peut le voir via la commande
pvecm status
Ici comme on va réinstaller topi et bour, ce n'est pas trop grave, on comptait justement continuer tout ça demain.
On reprend là où on en était arrivé hier, à savoir la réinstallation de topi.
Reinstallation de topi
on edit le syslinux pour ajouté la sortie sur l'interface serie
on rajoute dans isolinux/isolinux.cfg
:
serial 0 115200
et on modifie isolinux/menu.cfg
pour modifier le premier block comme suite, afin de permettre la connexion en câble série :
DEFAULT Debian GNU/Linux Live (kernel 5.10.0-13-amd64) LABEL Debian GNU/Linux Live (kernel 5.10.0-13-amd64) SAY "Booting Debian GNU/Linux Live (kernel 5.10.0-13-amd64)..." linux /live/vmlinuz-5.10.0-13-amd64 APPEND initrd=/live/initrd.img-5.10.0-13-amd64 boot=live components console=tty0 console=ttyS0,115200n8
Dans .disk/mkisofs
, on a la commande complète pour générer l'iso. Mais dans notre cas on va faire plus simple. La commande est similaire à celle utilisée lors de l'atelier Proxmox :
xorriso -as mkisofs \ -r -V 'Debian 11 live serial' \ -o /tmp/debian-11-live-serial.iso \ -J -J -joliet-long -cache-inodes \ -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \ -b isolinux/isolinux.bin \ -c isolinux/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 flash la clé USB avec l'iso qu'on a généré, en faisant un bon vieux dd
.
On se connecte au port série de topi depuis nam (ici c'est /dev/ttyUSB0
) pour pouvoir faire l'installation.
Avant de redémarrer sur la clé USB, on copie la config réseau de topi. Et on redémarre \o/
Il faut pouvoir redémarrer topi en UEFI. Dans le BIOS, on retire le boot uefi filter pour n'avoir que le mode legacy.
On désactive les VLANs de topi sur le switch. Comme pour Nam, l'installateur de debian ne gère pas les VLaNs…
conf vlan ports 1/4,2/4 tagging unTagPvidOnly
Pour se connecter, il faut mettre les credentials par défaut de l'installateur, à savoir user / live.
On fait exactement comme hier pour Nam. Le but étant toujours d'avoir un serveur ssh fonctionnel.
Lorsqu'on arrive à la partie Ceph, cela change beaucoup par rapport à Nam.
Déjà, dans Nam on va devoir virer l'ancien cluster pour recommencer sur de bonnes bases. On enlève la configuration /etc/pve/corosync.conf
puis on fait
killall pmxcfs pvecm create patata
On rajoute les IPs de Nam, Bour et Topi dans le /etc/hosts
de topi
On rajoute les qdevice (corosync) de topi, voir section QDevice-Net Setup
:
https://pve.proxmox.com/wiki/Cluster_Manager#_corosync_external_vote_support
pvecm qdevice setup 2001:913:1000:30::3 -force
le -force c'est due au manque de bour dans le cluster
On va rajouter le Monitor et le Manager sur topi… sauf qu'on ne peut pas utiliser les outils de Proxmox. On va devoir le faire à la main
Sur topi, on installe les paquets ceph-mon
et ceph-mgr
qui viennent des repos Ceph de Proxmox.
On copie la config Ceph depuis Nam, mais on enlève la partie keyring parce qu'elle n'est pas présente sur topi. On met le keyring de Nam à l'emplacement par défaut dans Topi, càd dans /etc/ceph/ceph.client.admin.keyring
.
On vérifie que tout est bon avec ceph -s
.
On récupère la clé d'authentification et la Monitor map de Nam:
ceph auth get mon. -o tmp/key ceph mon getmap -o tmp/map
On rajoute Topi dans la config Ceph.
On relance le Monitor de Topi, puis on vérifie qu'il est bien présent avec
ceph mon dump
En gros, les commandes qu'on a du faire :
ceph auth get mon. -o tmp/key ceph mon getmap -o tmp/map sudo ceph-mon -i topi --mkfs --monmap tmp/map --keyring tmp/key ceph-mon -i topi --mkfs --monmap tmp/map --keyring tmp/key chown ceph:ceph /var/lib/ceph/mon/ceph-topi/ -R systemctl enable --now ceph-mon@topi
Pour le Manager, on fait les commandes suivantes :
mkdir /var/lib/ceph/mgr/ceph-topi ceph auth get-or-create mgr.topi mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-topi/keyring chown ceph:ceph /var/lib/ceph/mgr/ceph-topi -R systemctl enable --now ceph-mgr@topi
Bicarbonate pas content sur ses disques
La LED des disques clignotte en orange sur bicarbonate… Dans les logs d'iDrac on ne voit pas de problème, si ce n'est une erreur datant d'il y a plusieurs mois (sans doute le SSD qui était mort).
Un simple clear log et bicarbonate est de nouveau heureux
On redémarre bicarbonate parce que le statut Smart des disques n'est pas à jour. Sans doute parce qu'on avait remplacé le disque à chaud.
Ne pas oublier de se connecter à l'iDrac en série pour déchiffrer le serveur:
ssh root@10.0.10.131 console com2
Pour quitter la console série, on fait Ctrl+\
Réinstallation de Bour
On reprend les mêmes étapes que pour Nam.
Petit soucis lors du lancement de l'installateur : le clavier n'est plus détecté au moment où le CD-ROM est lancé…
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.