Proxmox
1. Informations
Pour plus de détails sur l'architecture, voir le schéma d'architecture physique
1.1. pve1.home.lab
- interfaces réseau
- eth0 : 192.168.50.201 (admin) pve1.home.lab
- eth1 : 192.168.51.201 (glusterfs) gfs1.home.lab
- eth2 : 192.168.20.201 (wan) adm-pve1.home.lab
1.2. pve2.home.lab
- interfaces réseau
- eth0 : 192.168.50.202 (admin) pve2.home.lab
- eth1 : 192.168.51.202 (glusterfs) gfs2.home.lab
- eth2 : 192.168.20.202 (admin) adm-pve2.home.lab
2. Documentations
- https://j.hommet.net/mon-install-proxmox-dans-mon-homelab/
- https://blog.stephane-robert.info/docs/virtualiser/type1/proxmox/
- https://blog.alterway.fr/un-retour-vers-lopen-source-vos-outils-devops-preferes-et-leurs-equivalents-open-source.html
- https://www.worteks.com/blog/FreeIPA-P3/
3. Partitionnement du disque
3.1. Description
- Partition 1 : system 150Go
- lv_root : 20Go, monté dans /
- lv_home : 20Go, monté dans /home
- lv_tmp : 8Go, monté dans /tmp
- lv_swap : 16Go pour la swap
- lv_glusterd : 8Go, monté dans /var/lib/glusterd
- lv_log : 5Go, monté dans /var/log
- lv_data : 20Go
- Partition 2 : stockage 500Go
3.2. Créer les volumes logiques LVM
- Si besoin, supprimer le volume logique /dev/pve/data
$ sudo lvremove /dev/pve/data
- Créer les volumes logiques
$ sudo lvcreate -L 20G -n root pve
$ sudo lvcreate -L 20G -n home pve
$ sudo lvcreate -L 8G -n tmp pve
$ sudo lvcreate -L 16G -n swap pve
$ sudo lvcreate -L 8G -n glusterd pve
$ sudo lvcreate -L 5G -n log pve
$ sudo lvcreate -L 20G -n data pve
3.3. Créer les systèmes de fichier
$ sudo mkfs.ext4 /dev/pve/data
$ sudo mkfs.ext4 /dev/pve/glusterd
$ sudo mkfs.ext4 /dev/pve/home
$ sudo mkfs.ext4 /dev/pve/log
$ sudo mkfs.ext4 /dev/pve/tmp
3.4. Modifier le fichier fstab
- Modifier le fichier
/etc/fstab
/dev/pve/root / xfs defaults 0 1
/dev/pve/glusterd /var/lib/glusterd ext4 defaults 0 1
/dev/pve/home /home ext4 nosuid,nodev,noexec 0 2
/dev/pve/log /var/log ext4 nosuid,nodev,noexec 0 2
/dev/pve/swap none swap sw 0 0
/dev/pve/tmp /tmp ext4 nosuid,nodev,noexec 0 2
proc /proc defaults 0 0
- Créer les répertoires nécessaires
$ sudo mkdir -p /var/lib/glusterd
$ sudo mkdir /var/log/pveproxy
$ sudo chmod 755 /var/log/pveproxy
$ sudo chown www-data:www-data /var/log/pveproxy
- Monter les partitions
$ sudo systemctl daemon-reload
$ sudo mount -a
4. Configuration réseau
https://pve.proxmox.com/pve-docs/chapter-sysadmin.html#_disabling_ipv6_on_the_node
4.1. Configurer certains paramètres réseau du kernel
- Créer le fichier `/etc/sysctl.d/proxmox.conf
net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.ip_forward=1
- Appliquer les paramètres kernel
$ sudo sysctl -p /etc/sysctl.d/proxmox.conf
4.2. Désactiver IPv6
- Créer le fichier
/etc/sysctl.d/disable-ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
- Appliquer les paramètres kernel
$ sudo sysctl -p /etc/sysctl.d/disable-ipv6.conf
- Modifier le fichier
/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet ipv6.disable=1"
GRUB_CMDLINE_LINUX="ipv6.disable=1"
- Regénérer la configuration de grub
$ sudo update-grub
- Rebooter
4.3. Configurer les interfaces réseau de pve1
- Modifier le fichier
/etc/network/interfaces
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto enp1s0
iface enp1s0 inet manual
auto vmbr0
iface vmbr0 inet static
address 192.168.50.201/24
bridge-ports enp1s0
bridge-stp off
bridge-fd 0
auto enp3s0
iface enp3s0 inet static
address 192.168.51.201/24
auto wlp2s0
iface wlp2s0 inet static
wpa-ssid "SSID"
wpa-psk "changeme"
address 192.168.20.201/24
gateway 192.168.20.1
4.4. Configurer les interfaces réseau de pve2
- Modifier le fichier
/etc/network/interfaces
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto enp1s0
iface enp1s0 inet manual
auto vmbr0
iface vmbr0 inet static
address 192.168.50.202/24
bridge-ports enp1s0
bridge-stp off
bridge-fd 0
auto enp3s0
iface enp3s0 inet static
address 192.168.51.202/24
auto wlp2s0
iface wlp2s0 inet static
wpa-ssid "SSID"
wpa-psk "changeme"
address 192.168.20.202/24
gateway 192.168.20.1
4.5. Configurer le DNS
- Modifier le fichier
/etc/hosts
192.168.50.201 pve1.home.lab pve1
192.168.50.202 pve2.home.lab pve2
192.168.51.201 gfs1.home.lab gfs1
192.168.51.202 gfs2.home.lab gfs2
192.168.20.201 adm-pve1.home.lab adm-pve1
192.168.20.202 adm-pve2.home.lab adm-pve2
5. Changement de l'adresse des dépôts proxmox
5.1. Modifier le fichier ceph.list
- Modifier le fichier
/etc/apt/sources.list.d/ceph.list
#deb https://enterprise.proxmox.com/debian/ceph-quincy bookworm enterprise
deb http://download.proxmox.com/debian/ceph-squid bookworm no-subscription
5.2. Modifier le fichier pve-enterprise.list
- Modifier le fichier
/etc/apt/sources.list.d/pve-enterprise.list
#deb https://enterprise.proxmox.com/debian/pve bookworm pve-enterprise
deb http://ftp.debian.org/debian bookworm main contrib
deb http://ftp.debian.org/debian bookworm-updates main contrib
# Proxmox VE pve-no-subscription repository provided by proxmox.com,
# NOT recommended for production use
deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription
# security updates
deb http://security.debian.org/debian-security bookworm-security main contrib
6. Création du stockage répliqué GlusterFS
- https://blog.stephane-robert.info/docs/services/stockage/glusterfs/
- https://docs.gluster.org/en/latest/Quick-Start-Guide/Quickstart/#step-2-format-and-mount-the-bricks
- https://blog.zwindler.fr/2017/02/28/tutoriel-creer-un-cluster-de-stockage-glusterfs-sous-proxmox/
6.1. Installer GlusterFS
- Installer le package
glusterfs-server
$ sudo apt-get update
$ sudo apt install glusterfs-server
$ sudo systemctl enable glusterd
$ sudo systemctl start glusterd
6.2. Configurer le firewall
- Ouvrir les ports du service
glusterfssur firewalld
$ sudo firewall-cmd --add-service=glusterfs --permanent
$ sudo firewall-cmd --reload
6.3. Configurer un stockage répliqué entre les noeuds pve1 et pve2
- sur pve1
$ sudo gluster peer probe gfs2
- sur pve2
$ sudo gluster peer probe gfs1
- sur pve1 ou pve2
$ sudo gluster peer status
Number of Peers: 1
Hostname: gfs2
Uuid: 68c8db18-615a-478a-a2ba-b28f3dded376
State: Peer in Cluster (Connected)
6.4. Ajouter un gluster volume gv0
- sur pve1
$ sudo mkfs.xfs -i size=512 /dev/sda4 -f
$ sudo mkdir -p /data/brick1
$ sudo echo "/dev/sda4 /data/brick1 xfs default 0 2" >> /etc/fstab
$ sudo systemctl daemon-reload
$ sudo mount -a
- sur pve2
$ sudo mkfs.xfs -i size=512 /dev/sda4 -f
$ sudo mkdir -p /data/brick1
$ sudo echo "/dev/sda4 /data/brick1 xfs default 0 2" >> /etc/fstab
$ sudo systemctl daemon-reload
$ sudo mount -a
- sur pve1
$ sudo mkdir -p /data/brick1/gv0
$ sudo gluster volume create gv0 replica 2 gfs1:/data/brick1/gv0 gfs2:/data/brick1/gv0 force
$ sudo gluster volume start gv0
- Vérifier le statut du volume gluster
$ sudo gluster vol info gv0
Volume Name: gv0 Type: Replicate
Volume ID: b44fa185-4bfd-459d-afa1-4842d86a2a7d
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: gfs1:/data/brick1/gv0
Brick2: gfs2:/data/brick1/gv0
Options Reconfigured:
cluster.granular-entry-heal: on
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
$ sudo gluster vol status gv0
Status of volume: gv0
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick gfs1:/data/brick1/gv0 50349 0 Y 41267
Brick gfs2:/data/brick1/gv0 49518 0 Y 29622
Self-heal Daemon on localhost N/A N/A Y 41284
Self-heal Daemon on gfs2 N/A N/A Y 29641
Task Status of Volume gv0
------------------------------------------------------------------------------
There are no active volume tasks
$ sudo gluster volume profile gv0 start
$ sudo gluster volume profile gv0 info
6.5. Eviter le split-brain
$ sudo gluster vol set gv0 cluster.heal-timeout 5
$ sudo gluster volume heal gv0 enable
$ sudo gluster vol set gv0 cluster.quorum-reads false
$ sudo gluster vol set gv0 cluster.quorum-count 1
$ sudo gluster vol set gv0 network.ping-timeout 2
$ sudo gluster volume set gv0 cluster.favorite-child-policy mtime
$ sudo gluster volume heal gv0 granular-entry-heal enable
$ sudo gluster volume set gv0 cluster.data-self-heal-algorithm full
$ sudo gluster volume set gv0 performance.io-thread-count 8
6.6. Activer le chiffrement TLS
- #todo https://www.redhat.com/en/blog/hardening-gluster-installations-tls
- #todo https://docs.gluster.org/en/main/Administrator-Guide/SSL/
7. Création du cluster Proxmox
- Ouvrir l'une des 2 URL du cluster Proxmox
- pve1 : https://192.168.20.201:8006/
- pve2 : https://192.168.20.202:8006/
7.1. Ajouter le stockage glusterFS sur les noeuds pve1 et pve2
-
Aller dans le menu : Datacenter > Storage

-
Cliquer sur le bouton : Add: GlusterFS

-
Vérifier que le volume gv0 apparaît dans l'arborescence du noeud pve1

-
Afficher les informations sur le volume gluster gv0 sur le noeud pve1

- Afficher les informations sur le volume gluster gv0 sur le noeud pve2

7.2. Créer le cluster Proxmox
- Sur pve1, cliquer sur le menu Datacenter > Cluster et cliquer sur le bouton Create Cluster

- Donner un nom au cluster (par exemple : cl-homelab) et choisir l'interface réseau vmbr0

-
Attendre la fin de la tâche de création du cluster Proxmox

-
Le cluster Proxmox ne comporte que le noeud pve1 pour l'instant

-
Cliquer sur le bouton Join Information afin de récupérer les informations pour rejoindre le cluster Proxmox

-
sur pve2, aller dans le menu Datacenter > Cluster et cliquer sur le bouton Join Cluster

-
Recopier les informations du noeud pve1

-
Attendre la fin de la tâche de jonction du noeud pve2 au cluster Proxmox

-
Les deux noeuds du cluster Proxmox devraient apparaître dans l'interface web : pve1 et pve2
