Infrastructure DevOps
Ancienne infrastructure
Infrastructure virtualisée sous Proxmox V7 constituée de 2 serveurs placés en réplication passive.
Vue d'ensemble
flowchart TD
n1((Noeud 1))-- Réplication passive -->n2((Noeud 2))
Coûts
Acheté sur Leboncoin.fr
- Serveur ML350 gen9 Disque 4To + 1To + 2To 486 €
- Serveur DL120 gen9 4 Disques 300Go 350 €
- 4 Disques SSD 800Go 328,90 €
- 5 Disques SAS 1,2To 214,50 €
- 1 Disque dur 2To 23,09 €
- 9 Disques dur 4To 120 €
- Caddies HP SFF et Carte 10Gbs 86,08 €
Total : 1608,57 €
Serveur 1
- Installé sous Proxmox V7
- Serveur HP ML350 Gen9 LFF (3,5 pouces)
- Bi-Xeon E5-2630 v4 indice 23540 TDP 170W
- 64Go DDR4 ECC 2133mhz extensible à 1500
- HPE Smart Array P440 PCIe3 x8, 12 Gb/s SAS RAID controller en HBA mode
- 4 SSD 800Go SAS3 12Gbs montés en grappe de mirroir ZFS (système)
- 8 disques dur de 4To SAS2 en grappes de mirroir (données)
- 2 disques dur de 2To SAS3 en mirroir (backup)
- 1 disque dur de 4To SAS2 (spare)
- Relié avec :
- carte HP 331i intégrée 4 port 1Gbs
- HPE FlexFabric 533FLR-T 2 port 10Gbs sur adaptateur Flexlom->PCIe
- Alimentations redondantes 2x500w
Serveur 2
- Installé sous Proxmox V7
- Serveur HP DL120 Gen9 SFF (2,5 pouces)
- Mono-Xeon E5-2623 v3 indice 6790 TDP 85W
- 32Go DDR4 ECC 2133mhz
- HPE Smart Array P240 PCIe3 x8, 12 Gb/s SAS RAID controller en HBA mode
- 4 disques dur 300Go SAS3 12Gbs montés en grappe de mirroir ZFS (système)
- 4 disques dur de 1,2To SAS2 en grappes de mirroir (données)
- Relié avec :
- carte HPE Embedded Dual Port 361i intégrée 2 port 1Gbs
- Alimentation 200w
Pourquoi changer ?
Voici une magnifique configuration où les éléments constitutifs des serveurs sont qualitatifs et performants mais pourquoi changer ?
- La consommation électrique est importante rapportée aux performances au niveau CPU. Le TDP totalise 255W pour une puissance totale de 30330 d'indice soit 118 points d'indice par Watt consommé. En pratique le serveur 1 consomme en fonctionnement normal autour de 200 watts.
- Les nuisances sonores sont très importantes à cause de la dissipation thermique du serveur.
- La redondance est réalisée au niveau des pièces utilisées par le serveur et non au niveau du noeud entier si bien que cela implique l'usage de pièce spécifiques plus chères. La redondance n'est pas totale sur certaines pièces (carte mère).
- En terme de disponibilité du stockage, la réplication passive entre les deux serveur ne permet pas la mise en place d'une vraie haute disponibilité en temps réel.
- Volumétrie trop importante par rapport aux besoins.
Les performances au niveau du stockage affichent cependant autour de 500 à 600 Mo/s ce qui est plus que satisfaisant. La capacité disponible est de 36To.
Nouvelle infrastructure
Le minimum de noeud requis afin d'obtenir la haute disponibilité est de 3. Il est impératif de mettre en oeuvre un nombre impair de noeuds. 2 noeuds seulement engendre nécessairement des problématiques de "split brain", où l'impossiblité de connaître le référentiel de donnée peut occasionner la perte de données.
Vue d'ensemble
flowchart TD
n1((Noeud 1))<-- Ceph -->n2((Noeud 2))
n1<-- Ceph -->n3((Noeud 3))
n2<-- Ceph -->n3
Coûts
Acheté sur Leboncoin.fr
- Carte réseau QNAP 88,19 €
- Carte réseau QNAP 65,80 €
- Carte réseau 2.5Gbs 17,73 €
- Commutateur KVM HDMI+USB 35,19 €
- Ordinateur HM50 285,79 €
- Ordinateur HM50 315,99 €
- Ordinateur HM80 334,09 €
Total : 1142,78 €
Noeud maître
- Installé sous Proxmox V8
- Serveur Minis Forum HM80
- AMD Ryzen 4800U indice 16849 TDP 15W
- 32Go DDR4 ECC 2133mhz Stockage SATA+M.2
- Disque M.2 2280 512Go PCIe SSD 2500Mo/s (système)
- 2 Disques SSD 256Go 500Mo/s (données)
- Wifi 6 802.11ax & BT 5.2 Relié avec :
- Carte intégrée Gigabit
- Carte intégrée 2.5Gigabit
- Carte USB QNA-UC5G1T 5Gbs
Noeuds esclaves (x2)
- Installé sous Proxmox V8
- Serveur Minis Forum HM50
- AMD Ryzen 4500U indice 11005 TDP 15W
- 32Go DDR4 ECC 2133mhz Stockage SATA+M.2
- Disque M.2 2280 512Go PCIe SSD 2500Mo/s (système)
- 2 Disques SSD 256Go 500Mo/s (données)
- Wifi 6 802.11ax & BT 5.2 Relié avec :
- Carte intégrée Gigabit
- Carte intégrée 2.5Gigabit
- Carte USB QNA-UC5G1T 5Gbs
Résultat ?
- La consommation électrique avoisine les 30 à 40 watts de façon nominale.
- Les nuisances sonores sont infinitésimales.
- La redondance est réalisée au niveau du noeud entier avec des pièces assez standard, ce qui assure une bien meilleure résilience du cluster.
- En terme de disponibilité du stockage, la réplication est activeet permet une vraie haute disponibilité en temps réel.
- Volumétrie adpatée aux besoins.
Les performances au niveau du stockage affichent autour de 100 à 200 Mo/s ce qui est plus que satisfaisant. La capacité disponible est de 1,5To.
Installation
Provisionnement de Debian
Debian est installé automatiquement sur les 3 noeuds par le biais d'une démarrage PXE/TFTP du noyau linux et du chargement d'une version "Preseed" de Debian 12.
Installation de Proxmox
Changement de mot de passe root
Changement du fichier hosts
cat > /etc/hosts << EOF
127.0.0.1 localhost.localdomain localhost
10.10.0.1 nuc1.ceph.ia64.cc
10.10.0.2 nuc2.ceph.ia64.cc
10.10.0.3 nuc3.ceph.ia64.cc
10.20.0.1 nuc1.cephprivate.ia64.cc
10.20.0.2 nuc2.cephprivate.ia64.cc
10.20.0.3 nuc3.cephprivate.ia64.cc
10.50.0.1 nuc1.corosync.ia64.cc
10.50.0.2 nuc2.corosync.ia64.cc
10.50.0.3 nuc3.corosync.ia64.cc
10.0.0.1 nuc1.admin.ia64.cc nuc1
10.0.0.2 nuc2.admin.ia64.cc nuc2
10.0.0.3 nuc3.admin.ia64.cc nuc3
EOF
RESEAUX STRUCTURE
- VLAN 2 - 10.20.x.x/16 - vmbr2 - Ceph privé
- VLAN 3 TAG - 10.10.x.x/16 - vmbr2.3 - Ceph public
- VLAN 4 - 10.50.x.x/16 - vmbr1 - Corosync
- VLAN 5 TAG - 10.00.x.x/16 - vmbr0.5 - admin
RESEAUX EXPLOITATION
- VLAN 10 TAG - 192.168.10.x/24 - vmbr0 - serveurs
- VLAN 15 - 192.168.15.x/24 - vmbr0 - clients
- VLAN 20 TAG - 192.168.20.x/24 - vmbr0 - ouverture
Configuration réseau nuc1.admin.ia64.cc (VI)
cat > /etc/network/interfaces << EOF
# network interface settings; autogenerated
# Please do NOT modify this file directly, unless you know what
# you're doing.
#
# If you want to manage parts of the network configuration manually,
# please utilize the 'source' or 'source-directory' directives to do
# so.
# PVE will preserve these directives, but will NOT read its network
# configuration from sourced files, so do not attempt to move any of
# the PVE managed interfaces into external files!
auto lo
iface lo inet loopback
iface wlp2s0 inet manual
iface eno1 inet manual
iface enp4s0 inet manual
iface enx245ebe430155 inet manual
auto vmbr0
iface vmbr0 inet static
bridge-ports enp4s0
bridge-stp off
bridge-fd 0
bridge-vlan-aware yes
bridge-pvid 15
bridge-vids 5,10,15,20
auto vmbr0.5
iface vmbr0.5 inet static
address 10.0.0.1/16
gateway 10.0.0.254
auto vmbr1
iface vmbr1 inet static
address 10.50.0.1/16
bridge-ports eno1
bridge-stp off
bridge-fd 0
auto vmbr2
iface vmbr2 inet static
address 10.20.0.1/16
bridge-ports enx245ebe430155
bridge-stp off
bridge-fd 0
auto vmbr2.3
iface vmbr2.3 inet static
address 10.10.0.1/16
EOF
Configuration réseau nuc2.admin.ia64.cc (VI)
cat > /etc/network/interfaces << EOF
### Interface 1GBs Bridge administration + VLAN
auto vmbr0
iface vmbr0 inet static
bridge-ports enp4s0
bridge-stp off
bridge-fd 0
bridge-vlan-aware yes
bridge-pvid 15
bridge-vids 5,10,15,20
auto vmbr0.5
iface vmbr0.5 inet static
address 10.0.0.2/16
gateway 10.0.0.254
### Interface 1GBs Bridge Corosync
auto vmbr1
iface vmbr1 inet static
bridge-ports eno1
bridge-stp off
bridge-fd 0
bridge-vlan-aware no
address 10.50.0.2/16
#######################
### Interface 2.5GBs Bridge Ceph public + storage
auto vmbr2
iface vmbr2 inet static
bridge-ports enx245ebe5bfab3
bridge-stp off
bridge-fd 0
address 10.20.0.2/16
### Interface Ceph public
auto vmbr2.3
iface vmbr2.3 inet static
address 10.10.0.2/16
EOF
Configuration réseau nuc3.admin.ia64.cc (VI)
cat > /etc/network/interfaces << EOF
auto lo
iface lo inet loopback
#######################
iface wlp2s0 inet manual
iface eno1 inet manual
iface enp4s0 inet manual
iface enx5c857e344936 inet manual
#######################
### Interface 1GBs Bridge administration + VLAN
auto vmbr0
iface vmbr0 inet static
bridge-ports enp4s0
bridge-stp off
bridge-fd 0
bridge-vlan-aware yes
bridge-pvid 15
bridge-vids 5,10,15,20
auto vmbr0.5
iface vmbr0.5 inet static
address 10.0.0.3/16
gateway 10.0.0.254
### Interface 1GBs Bridge Corosync
auto vmbr1
iface vmbr1 inet static
bridge-ports eno1
bridge-stp off
bridge-fd 0
bridge-vlan-aware no
address 10.50.0.3/16
#######################
### Interface 2.5GBs Bridge Ceph public + storage
auto vmbr2
iface vmbr2 inet static
bridge-ports enx5c857e344936
bridge-stp off
bridge-fd 0
address 10.20.0.3/16
### Interface Ceph public
auto vmbr2.3
iface vmbr2.3 inet static
address 10.10.0.3/16
EOF
Installation de proxmox
echo "deb [arch=amd64] http://download.proxmox.com/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-in
stall-repo.list
wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.g
pg
sha512sum /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg #7da6fe34168adc6e479327ba517796d4702fa2f8b4f0a9833f5ea6e6b48f6507a6da403a274fe201595edc86a84463d50383d07f64bdde2e3658108db7d6dc87
apt update && apt full-upgrade
apt install pve-kernel-6.2
systemctl reboot
apt install proxmox-ve postfix open-iscsi
apt remove linux-image-amd64 'linux-image-6.1*'
update-grub
apt remove os-prober
reboot
Ajout clause pour désactiver le NCP et forcer le SATA 3.0 (BOGUE CARTE MERE OU CPU??)
Si d'aventure la commande kernel fonctionne pas
for drive in sd{b..x};do
NCQDisabled=cat /sys/block/$drive/device/queue_depth
#echo $drive $NCQDisabled
if [ "$NCQDisabled" != "1" ]; then
echo "disabling NCQ for $drive"
echo 1 > /sys/block/$drive/device/queue_depth
else
echo "NCQ already disabled for $drive"
fi
done
Installation outils réseau + NTP
Mise en place Corosync
Installation de Ceph
Installation des OSD
#on node 1
pveceph install --repository no-subscription --version quincy
pveceph init --cluster-network 10.20.0.1/16 --min_size 2 --network 10.10.0.1/16 --size 3
#on node 1
pveceph createmon --mon-address 10.10.0.1
#on node 2
pveceph createmon --mon-address 10.10.0.2
#on node 3
pveceph createmon --mon-address 10.10.0.3
#on node 1,2,3
pveceph createosd /dev/sda
pveceph createosd /dev/sdb
#on node 1
pveceph pool create datastore_ceph --add_storages 1 --application rdb --min_size 2 --pg_autoscale_mode on --pg_num 32 --size 3
Pour effacer un disque et le préparer à Ceph
ceph-volume lvm zap /dev/sd[X] --destroy
Benchmark de Ceph - préparation
ceph osd pool create testbench 100 100
rados bench -p testbench 10 write --no-cleanup
rados bench -p testbench 10 seq
rados bench -p testbench 10 rand
rados bench -p testbench 10 write -t 4 --run-name client1
rados -p testbench cleanup
Résultats
Maintaining 16 concurrent writes of 4194304 bytes to objects of size 4194304 for up to 10 seconds or 0 objects
Object prefix: benchmark_data_nuc1_12546
sec Cur ops started finished avg MB/s cur MB/s last lat(s) avg lat(s)
0 0 0 0 0 0 - 0
1 16 53 37 147.991 148 0.250132 0.308324
2 16 99 83 165.984 184 0.539806 0.333284
3 16 127 111 147.98 112 0.367396 0.339734
4 16 154 138 137.981 108 0.0993989 0.409614
5 16 184 168 134.383 120 0.071967 0.430416
6 16 216 200 133.316 128 0.460771 0.45064
7 16 247 231 131.983 124 0.118444 0.449762
8 16 291 275 137.483 176 0.280182 0.451612
9 16 334 318 141.316 172 0.128481 0.437606
10 16 366 350 139.983 128 1.25476 0.455516
Total time run: 10.4048
Total writes made: 366
Write size: 4194304
Object size: 4194304
Bandwidth (MB/sec): 140.704
Stddev Bandwidth: 28.0317
Max bandwidth (MB/sec): 184
Min bandwidth (MB/sec): 108
Average IOPS: 35
Stddev IOPS: 7.00793
Max IOPS: 46
Min IOPS: 27
Average Latency(s): 0.450302
Stddev Latency(s): 0.321563
Max latency(s): 1.86754
Min latency(s): 0.0581945
hints = 1
sec Cur ops started finished avg MB/s cur MB/s last lat(s) avg lat(s)
0 0 0 0 0 0 - 0
1 16 61 45 179.956 180 0.0430398 0.0975382
2 16 87 71 141.973 104 0.0433136 0.350415
3 16 127 111 147.963 160 0.0406719 0.268465
4 16 149 133 132.969 88 0.0203966 0.344561
5 16 207 191 152.762 232 0.135074 0.384776
6 16 249 233 155.289 168 0.035774 0.329294
7 16 265 249 142.243 64 0.0411561 0.354386
8 16 270 254 126.964 20 0.0389323 0.369548
9 16 294 278 123.522 96 0.0507035 0.388509
10 16 311 295 117.97 68 0.0230662 0.431991
Total time run: 10.9593
Total reads made: 311
Read size: 4194304
Object size: 4194304
Bandwidth (MB/sec): 113.511
Average IOPS: 28
Stddev IOPS: 16.1813
Max IOPS: 58
Min IOPS: 5
Average Latency(s): 0.548529
Max latency(s): 6.796
Min latency(s): 0.0203966
hints = 1
sec Cur ops started finished avg MB/s cur MB/s last lat(s) avg lat(s)
0 0 0 0 0 0 - 0
1 16 122 106 423.898 424 0.638815 0.0954765
2 16 143 127 253.922 84 0.0440528 0.129585
3 16 162 146 194.617 76 0.0404834 0.150424
4 16 197 181 180.96 140 0.00838309 0.294
5 16 244 228 182.363 188 0.0186008 0.297677
6 16 265 249 165.968 84 0.0371396 0.296993
7 16 318 302 172.54 212 0.043736 0.31674
8 16 348 332 165.97 120 0.0340587 0.337632
9 16 387 371 164.861 156 0.0427758 0.330386
10 16 448 432 172.771 244 0.0244284 0.316743
11 1 448 447 162.519 60 1.80617 0.383099
Total time run: 11.0088
Total reads made: 448
Read size: 4194304
Object size: 4194304
Bandwidth (MB/sec): 162.779
Average IOPS: 40
Stddev IOPS: 26.3145
Max IOPS: 106
Min IOPS: 15
Average Latency(s): 0.384807
Max latency(s): 3.9948
Min latency(s): 0.00323655
hints = 1
Maintaining 4 concurrent writes of 4194304 bytes to objects of size 4194304 for up to 10 seconds or 0 objects
Object prefix: benchmark_data_nuc1_12830
sec Cur ops started finished avg MB/s cur MB/s last lat(s) avg lat(s)
0 0 0 0 0 0 - 0
1 4 32 28 111.995 112 0.10545 0.132302
2 4 61 57 113.989 116 0.0956211 0.13079
3 4 88 84 111.987 108 0.303472 0.141727
4 4 109 105 104.986 84 0.153796 0.150383
5 4 126 122 97.583 68 0.141047 0.157844
6 4 143 139 92.6511 68 0.121779 0.169712
7 4 165 161 91.9851 88 0.132059 0.172284
8 4 197 193 96.4848 128 0.14058 0.164039
9 4 230 226 100.429 132 0.0995982 0.158129
10 4 261 257 102.784 124 0.190499 0.154848
Total time run: 10.1032
Total writes made: 261
Write size: 4194304
Object size: 4194304
Bandwidth (MB/sec): 103.333
Stddev Bandwidth: 24.0777
Max bandwidth (MB/sec): 132
Min bandwidth (MB/sec): 68
Average IOPS: 25
Stddev IOPS: 6.01941
Max IOPS: 33
Min IOPS: 17
Average Latency(s): 0.154141
Stddev Latency(s): 0.0778747
Max latency(s): 0.513045
Min latency(s): 0.0539921
Cleaning up (deleting benchmark objects)
Removed 261 objects
Clean up completed and total clean up time :2.06974
Removed 366 objects
Installation de K0S (Kubernetes)
Récupération des informations terraform
Création du template
Création d'un role pour acces API
#Sur noeud 1
pveum role add terraform_role -privs "Pool.Allocate VM.Console VM.Allocate VM.Clone VM.Config.CDROM VM.Config.CPU VM.Config.Cloudinit VM.Config.Disk VM.Config.HWType VM.Config.Memory VM.Config.Network VM.Config.Options VM.Monitor VM.Audit VM.PowerMgmt Datastore.AllocateSpace Datastore.Audit SDN.Use Sys.Audit Sys.Console Sys.Modify VM.Migrate"
pveum user add terraform@pve
pveum aclmod / -user terraform@pve -role terraform_role
pveum user token add terraform@pve terraform --privsep 0
Execution de terraform