Table des matières

2022/06/11 (dc - chiffrement des serveurs)

Présences :

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 :

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.1et 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

https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/current-live/amd64/iso-hybrid/debian-live-11.3.0-amd64-standard+nonfree.iso

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.