Skip to content

Proxmox

Configuration de base

Changement des repository en “Free”

apt update
apt install sudo pve-headers pve-firmware
rm /etc/apt/sources.list.d/pve-enterprise.list /etc/apt/sources.list.d/pve-no-subscription.list
wget http://download.proxmox.com/debian/proxmox-release-bullseye.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg
tee -a /etc/apt/sources.list.d/pve-no-subscription.list >/dev/null <<'EOF'
deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription
EOF

Limitation du cache zfs ARC

sudo tee -a /etc/modprobe.d/zfs.conf >/dev/null <<'EOF'
options zfs zfs_arc_max=1073741824
EOF
sudo update-initramfs -u -k all
sudo reboot

Note

Voire la page Debian Pour le reste de la configuration

Warning

Ne pas désactiver root et mettre le même mdp sur les même noeud

Configuration de l'envoi de mail

sudo apt install libsasl2-modules -y
sudo sed -i 's/relayhost =/#relayhost =/g' /etc/postfix/main.cf
sudo tee -a /etc/postfix/main.cf >/dev/null <<'EOF'
relayhost = smtp.gmail.com:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/Entrust_Root_Certification_Authority.pem
EOF
sudo tee -a /etc/postfix/sasl_passwd >/dev/null <<'EOF'
smtp.gmail.com:587 pain.rime@gmail.com:achangéparlemdpgmail
EOF
sudo postmap hash:/etc/postfix/sasl_passwd
sudo chmod 600 /etc/postfix/sasl_passwd
sudo systemctl restart postfix
echo "Test email from Proxmox: $(hostname)" | sudo /usr/bin/proxmox-mail-forward

Pré-Configuration pour être dans un cluster

Obligatoire : Quand le node ne se connecte pas avec l'adresse IP du LAN

éditer l'adresse IP de ces fichiers :

/etc/network/interfaces

auto lo
iface lo inet loopback

iface eno1 inet manual

auto vmbr0
iface vmbr0 inet dhcp
        bridge-ports eno1
        bridge-stp off
        bridge-fd 0

auto vmbr1
iface vmbr2 inet static
        address  10.3.5.1/24
        bridge-ports none
        bridge-stp off
        bridge-fd 0

        post-up   echo 1 > /proc/sys/net/ipv4/ip_forward
        post-up   iptables -t nat -A POSTROUTING -s '10.3.5.1/24' -o vmbr0 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '10.3.5.1/24' -o vmbr0 -j MASQUERADE
  • On peut aussi configurer un Serveur DHCP
  • On peut aussi interconnecter les hyperviseurs et les différent subnet avec Tailscale

Bien rajouter les nom des nodes dans le fichier host

/etc/hosts

127.0.0.1 localhost.localdomain localhost
100.84.104.5 coma.local coma
100.124.95.107 medusa.local medusa
100.73.208.70 virgo.local virgo

# The following lines are desirable for IPv6 capable hosts

::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Ne pas oublier de mettre a jour les certificat

pvecm updatecerts --force

Enfin pour rajouter le nœud au datacenter mieux vaut le faire en ligne de commande :

sudo pvecm add <om du noeux>

Configuration avancé

Installer snap dans un conteneur

Config sur l'hyperviseur

#préciser le nom du conteneur
sudo tee -a /etc/pve/lxc/nomduconteneur >/dev/null <<'EOF'
features: fuse=1,nesting=1
lxc.mount.entry: /dev/fuse dev/fuse none bind,create=file,optional
lxc.mount.auto: cgroup:rw
EOF
#dans le conteneur
sudo apt update && sudo apt upgrade -y
sudo mkdir /lib/modules
sudo apt install squashfuse fuse snapd
Ajouter mount point lc container
#add
pct set 205 -mp0 /soure(hyperviser),mp=destination(container)
#exemple
pct set 205 -mp0 /Slow-0/web-service,mp=/home/user/cloud/Services
#exemple avec backup
#penser a crée les dossier au préalable
#reboot
Ajouter un VPN dans un conteneur LXC
lxc.mount.entry: /dev/net dev/net none bind,create=dir
Agent pour machine virtuel sur debian
sudo apt-get install qemu-guest-agent
sudo systemctl enable --now qemu-guest-agent
Sortir d'un noeud

En forcant à détruire la config

Les données de configuration des VM seront détruites

systemctl stop pve-cluster corosync
pmxcfs -l
rm -rf /etc/corosync/*
rm -rf /etc/pve/corosync.conf
rm /var/lib/corosync/*
rm -rf /etc/pve/nodes/*
rm /etc/pve/priv/authorized_keys
killall pmxcfs
systemctl start pve-cluster
reboot

Ou

systemctl stop pve-cluster
systemctl stop corosync
pmxcfs -l
rm /etc/pve/corosync.conf
rm -r /etc/corosync/*
killall pmxcfs
systemctl start pve-cluster
pvecm delnode oldnode
#si on ne peut toujour pas rejoindre le noeud 
pvecm expected 1
rm /var/lib/corosync/*

Si le cluster est stable

pvecm delnode 10.14.140.15

renitialiser certificat

#Supprimer les anciens certificats :
rm /etc/pve/pve-root-ca.pem
rm /etc/pve/local/pve-ssl.key
rm /etc/pve/local/pve-ssl.pem
#Générez de nouveaux certificats CA et Proxmox :
#Pour CA
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -sha256 -days 365 -out ca.pem
#Pour Proxmox
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr 
openssl x509 -req -in server.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out server.pem -days 365 -sha256
#Renommez les certificats en proxmox :
mv ca.pem pve-root-ca.pem
mv server.key pve-ssl.key
mv server.pem pve-ssl.pem
#Copier dans le fichier Proxmox File System:
cp pve-root-ca.pem /etc/pve/pve-root-ca.pem
cp pve-ssl.key /etc/pve/local/pve-ssl.key
cp pve-ssl.pem /etc/pve/local/pve-ssl.pem
#Redémarrez le démon et le proxy :
service pveproxy restart
service pvedaemon restart

ou

cd /etc/pve
rm pve-root-ca.pem priv/pve-root-ca.key nodes/*/pve-ssl.{key,pem}
pvecm updatecerts --force
systemctl restart pveproxy

Résolution d'erreur

TASK ERROR: migration aborted

pvecm updatecerts

Waring remote host identification has changed

pvecm updatecerts -f

Conteneur ou machine virtuelle bloqué

Pour un conteneur :

sudo ct unlock nomduconteneur 

Pour une vm :

sudo qm unlock nomdelavm

On doit ensuite modifier la conf de la vm pour enlever le snap dans :

vm : /etc/pve/qemu-server/nomdelavm.conf

ct : /etc/pve/lxc/nomduct.conf

Pour enlever le snapshot du disque :

Utilisez la commande suivante pour répertorier tous les éléments

zfs list -t all
or
zfs list

Sortie

NAME USED AVAIL REFER MOUNTPOINT
rpool 83.3G 366G 82.4G /rpool
rpool/subvol-110-disk-0 473M 7.54G 473M /rpool/subvol-110-disk-0
rpool/subvol-110-disk-1 337M 7.67G 337M /rpool/subvol-110-disk-1
rpool/data/vm-102-disk-1      5G  10G  5G  -

Note

subvol est le stockage/disque pour les conteneurs (CT)

vm-xxxx est le stockage/disque pour les conteneurs

Supprimer des disques de machine virtuelle

zfs destroy -f rpool/data/vm-102-disk-1

Supprimer les disques de conteneur

zfs destroy -f rpool/subvol-110-disk-0

Logs

sudo journalctl -u corosync -u pve-cluster -b
sudo pvecm status

Disque mal allouer

Pour les VM

sudo qm rescan --vmid XXX

Pour les CT

sudo pct rescan --vmid XXX

GPU Passtrught

Remplacer la ligne grub par sa :
Pour intel :

nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction nofb nomodeset video=efifb:off"
update-grub

Pour AMD :

nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt pcie_acs_override=downstream,multifunction nofb nomodeset video=efifb:off"
update-grub
nano /etc/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd


echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf
echo "options kvm ignore_msrs=1" > /etc/modprobe.d/kvm.conf

echo "blacklist radeon" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf

#remplacer par ids du gpu
lspci -v
lspci -n -s 01:00
echo "options vfio-pci ids=10de:1b81,10de:10f0 disable_vga=1"> /etc/modprobe.d/vfio.conf
update-initramfs -u

Si le gpu passtrought ne fonctionne pas ajouter dans le job crontab

@reboot echo 1 > /sys/bus/pci/devices/0000\:21\:00.0/remove && echo 1 > /sys/bus/pci/rescan

Si parsec ne fonctionne pas : cocher la case primary GPU

Source :

https://gist.github.com/qubidt/64f617e959725e934992b080e677656f

PCI passthrough via OVMF - ArchWiki (archlinux.org)

Warning

Ne pas activé dans le bios les élément suivant Re-Size BAR Support Above 4G memory / Crypto Currency mining

Auto Snapshot de machine virtuel ou conteneur

Installation :

sudo curl -o /bin/pve-autosnap https://raw.githubusercontent.com/michabbs/pve-autosnap/master/pve-autosnap 
sudo chmod +x /bin/pve-autosnap 
job="@hourly /bin/pve-autosnap --hourly --leave=4 vmid 200 201 204 301 305"
(sudo crontab -l; echo "$job" ) | sudo crontab - 

Connexion avec le port serial

Sur l'hôte Proxmox ajouter le serial port

capture_d’écran_2023-03-15_113550.png

Sur la machine virtuelle :

sudo systemctl enable -now serial-getty@ttyS0.service

Ajout de swap dynamique

sudo apt install git make -y
git clone https://github.com/Nefelim4ag/systemd-swap.git
cd systemd-swap
make deb
sudo apt install ./systemd-swap_*_all.deb
sudo tee -a /etc/systemd/swap.conf >/dev/null <<'EOF'
zswap_enabled=1
swapfc_enabled=1
EOF
sudo systemctl enable --now systemd-swap
sudo update-initramfs -u -k all
rm -rf ~/systemd-swap/

Exporte les disque d'une VM a un autre format

Dans cette exemple nous allons exporté un disque en "raw" et le mettre en qcow2" tout en le déplacant dans un point de montage crée pour l'occasion :

La cible a exporter ne peut pas être un template il faut le cloner

  1. Trouver le disque que l'on souhaite transformer :
    Pour ce faire on peut utiliser la commande :
    sudo zfs list
    
  2. Monter un partage externe :
    sudo sshfs user@100.119.184.36:/mnt/data /mnt/temp
    
  3. Utiliser la commande sudo qemu-img convert -O qcow2 source destination pour transformer le disque qcow2 Voici un exemple :
    sudo qemu-img convert -O qcow2 /dev/zvol/Fast-0/vm-199-disk-0 /mnt/temp/Telechargements/Debian11.qcow2
    

Pour le convertir en vhdx on peut faire :

sudo qemu-img convert -O vhdx /dev/zvol/fast-1/vm-300-disk-0 /mnt/temp/Telechargements/Debian11.vhdx

Ou en vmdk :

sudo qemu-img convert -O vmdk /dev/zvol/fast-1/vm-300-disk-0 /mnt/temp/Telechargements/Debian11.vhdx

Supprimer un disque de machine virtuelle via la ligne de commande

1\. Énumérez les informations de base de tous les ensembles de données sur le système avec:

sudo zfs list

La sortie affiche les noms des jeux de données et les valeurs de leurs propriétés utilisées, disponibles, référencées et montées. Par exemple:

sudo rpool/data/vm-100-disk-1 10G 5G 10G -

2. Pour supprimer un disque via la ligne de commande, exécutez :

sudo zfs destroy -f [disk_path]

Par conséquent, pour supprimer l’exemple de disque mentionné ci-dessus, exécutez :

sudo zfs destroy -f rpool/data/vm-100-disk-1

Forcer la suppression d'un job de réplication

sudo pvesr delete 'job-id' --force

Mise en place de l'option SDN

La mise en place est très simple. Voici ce qu'il faut faire sur chaque noeud Proxmox :

apt install libpve-network-perl ifupdown2
echo "source /etc/network/interfaces.d/*" >> /etc/network/interfaces
reboot now

nous allons ensuite crée notre zone VxLAN

Éléments renseignées :

  • ID : le nom de la zone
  • Address : les adresses IP des nœuds Proxmox côté LAN. C'es une liste d'adresses IP de tous les nœuds via lesquels vous souhaitez communiquer.
  • MTU : le MTU doit être inférieur pour s'assurer que les 50 octets supplémentaires de l'en-tête VXLAN peuvent être contenu. Le MTU de ma carte étant de 1500, je renseigne 1450. (faux ! il faut mettre : 9216)

Le MTU des machines invitées devra être égal au MTU défini ci-dessus.

Ce qui donne :

Maintenant que votre zone est créée, il faut créer un VNet que l'on va rattacher à notre zone.

Selon la doc Proxmox, un VNet est un réseau virtuel qui n'est dans sa forme de base qu'un pont Linux qui sera déployé localement sur le nœud et utilisé pour la communication de la machine virtuelle. En fait quand nous provisionnerons nos VM, nous rattacherons le réseau de celles-ci au bridge nouvellement au lieu de vmbr0 par exemple.

Ce qu'il faut renseigner :

  • Le nom
  • Un alias (optionnel)
  • La zone de rattachement
  • Le TAG : id du VxLAN (ce que vous vous voulez entre 1 et 16 777 215)

b25a723123653778e8e2c4f5c9db738d

Pour terminer

Maintenant que notre zone est créée et le vnet rattaché, il suffit de cliquer sur SDN puis de cliquer sur "Apply", ainsi vous verrez la zone se déployer sur l'ensemble des nœuds retenus (tous par défaut).

78373aa229053c3b1245fe1aebb6c0fd

Création des conteneurs

Créez deux conteneurs sur deux nœuds différents puis sur la partie réseau, mettez en bridge le nom de votre vnet :

33b498f00cf2e5b7ce65864568163e8f

Lancez les conteneurs puis réalisez un test de connectivité réseau avec ping :

d5d857a432a9a083831362e2251c0da7

source : Mise en place du SDN sur Promox 7 | Libre à vous (raspot.in)
Software Defined Network (proxmox.com)

Voire le contenu d'une machine virtuelle

L'emplacement des disk virtuelle est ici :

/dev/zvol/

exemple de montage :

sudo mount /dev/zvol/slow-1/vm-615-disk-1 /mnt/tmp/

Liens Utiles

https://tech2rue.sussudio.ovh/tag/proxmox/