Dawan Proxmox VE — TSSR

Aide-mémoire — Proxmox VE

Aide-mémoire des commandes CLI essentielles. Toutes les commandes s'exécutent en root sur le nœud Proxmox sauf mention contraire.


VMs KVM — qm

# Créer une VM
qm create <vmid> --name <nom> --memory <Mo> --cores <n> \
  --net0 virtio,bridge=vmbr0 \
  --scsi0 local-lvm:<Go> --scsihw virtio-scsi-single \
  --ostype l26 --agent enabled=1

# Cycle de vie
qm start <vmid>
qm shutdown <vmid>      # arrêt propre (signal ACPI)
qm stop <vmid>          # arrêt forcé (coupure alimentation)
qm reboot <vmid>
qm suspend <vmid>

# Informations
qm list
qm status <vmid>
qm config <vmid>

# Modifier à chaud
qm set <vmid> --memory 4096
qm set <vmid> --cores 4
qm set <vmid> --net1 virtio,bridge=vmbr0

# Cloud-Init
qm set <vmid> --ide2 local-lvm:cloudinit
qm set <vmid> --ciuser devops --cipassword dawan --ipconfig0 ip=10.44.1.50/24,gw=10.44.1.1
qm set <vmid> --boot order=scsi0
qm cloudinit dump <vmid> user

# Templates et clones
qm template <vmid>
qm clone <vmid> <newid> --name <nom> --full --storage local-lvm

# Snapshots
qm snapshot <vmid> <nom> [--description "texte"] [--vmstate]
qm listsnapshot <vmid>
qm rollback <vmid> <nom>
qm delsnapshot <vmid> <nom>

# Migration
qm migrate <vmid> <nœud-cible> --targetstorage local-lvm   # à froid
qm migrate <vmid> <nœud-cible> --online --targetstorage ceph-vm  # à chaud

# Import d'image cloud (le disque arrive en unused0, à attacher ensuite avec qm set)
qm disk import <vmid> <image.qcow2> <stockage>

# Sauvegarde
vzdump <vmid> --storage <stockage> --mode snapshot --compress zstd

# Restauration
qmrestore <fichier.vma.zst> <newid> --storage local-lvm

# Dépannage
qm monitor <vmid>                          # moniteur QEMU (diagnostic avancé)
pvenode task list --vmid <vmid> --errors 1 # tâches en échec de cette VM
qm guest cmd <vmid> ping                   # l'agent invité répond-il ?

Conteneurs LXC — pct

# Télécharger un template
pveam update
pveam available --section system
pveam download local <template.tar.zst>
pveam list local

# Créer un conteneur
pct create <ctid> local:vztmpl/<template.tar.zst> \
  --hostname <nom> --memory 512 --swap 512 \
  --rootfs local-lvm:8 \
  --net0 name=eth0,bridge=vmbr0,ip=10.44.1.50/24,gw=10.44.1.1 \
  --unprivileged 1

# Cycle de vie
pct start <ctid>
pct stop <ctid>
pct shutdown <ctid>
pct reboot <ctid>

# Informations
pct list
pct status <ctid>
pct config <ctid>

# Accès
pct enter <ctid>                    # shell root interactif dans le conteneur
pct exec <ctid> -- <commande>       # exécuter une commande

# Modifier à chaud
pct set <ctid> --memory 1024
pct set <ctid> --cores 2

# Snapshots
pct snapshot <ctid> <nom> [--description "texte"]
pct listsnapshot <ctid>
pct rollback <ctid> <nom>
pct delsnapshot <ctid> <nom>

# Sauvegarde
vzdump <ctid> --storage local --mode snapshot --compress zstd

Stockages — pvesm

# Lister et état
pvesm status
pvesm list <stockage>

# Ajouter des stockages
pvesm add zfspool <id> --pool <pool>/<dataset> --content images,rootdir
pvesm add nfs <id> --server <IP> --export <path> --content iso,backup
pvesm add iscsi <id> --portal <IP> --target <iqn.xxx:target>
pvesm add pbs <id> --server <IP> --datastore <nom> \
  --username '<user>@pbs!<jeton>' --password '<secret-du-jeton>' --fingerprint <fp>
pvesm add rbd <id> --pool <pool> --content images,rootdir  # Ceph

# Supprimer
pvesm remove <id>

ZFS — zpool & zfs

# Pools
# Désigner les disques par /dev/disk/by-id/ en production ; -f efface les données présentes
zpool create -f -o ashift=12 <nom> mirror /dev/sdb /dev/sdc
zpool create -f -o ashift=12 <nom> raidz /dev/sdb /dev/sdc /dev/sdd
zpool status
zpool list
zpool scrub <nom>           # vérification d'intégrité
zpool destroy <nom>

# Datasets
zfs create <pool>/<dataset>
zfs list
zfs list -t snapshot

# Propriétés
zfs set compression=lz4 <pool>/<dataset>
zfs set quota=100G <pool>/<dataset>
zfs get compression,used,available <pool>/<dataset>

# Snapshots
zfs snapshot <pool>/<dataset>@<nom>
zfs rollback <pool>/<dataset>@<nom>
zfs destroy <pool>/<dataset>@<nom>
zfs diff <pool>/<dataset>@<nom> <pool>/<dataset>

# Intégration Proxmox
pvesm add zfspool <id> --pool <pool>/<dataset> --content images,rootdir

Réseau — bridges et VLANs

# Voir les interfaces et bridges
ip link show
ip addr show
bridge link show

# Appliquer les changements réseau sans redémarrer
ifreload -a

# Voir la configuration Proxmox
cat /etc/network/interfaces

SDN — pvesh /cluster/sdn

# Lister
pvesh get /cluster/sdn/zones
pvesh get /cluster/sdn/vnets

# Appliquer la configuration (obligatoire après toute modification)
pvesh set /cluster/sdn

# Vérifier le bridge VNet créé
ip link show <vnet-id>

Cluster — pvecm

# Créer un cluster (sur le 1er nœud)
pvecm create <nom-cluster>

# Rejoindre un cluster (sur les nœuds suivants)
pvecm add <IP-nœud1>

# État et diagnostics
pvecm status
pvecm nodes

# Dans l'interface : Datacenter → Cluster → Join Information (à copier sur le nœud qui rejoint)

Ceph — pveceph

# Installation (sur chaque nœud ; tentacle est la version par défaut de Proxmox VE 9)
pveceph install --repository no-subscription
pveceph init --network <CIDR-réseau-ceph>

# Composants (répéter sur chaque nœud)
pveceph mon create
pveceph mgr create
pveceph osd create /dev/sdX

# Pools (--add_storages déclare aussitôt le stockage RBD dans Proxmox)
pveceph pool create <nom> --size 3 --min_size 2 --add_storages

# État
ceph status
ceph osd tree
ceph df
ceph health detail

# Intégration Proxmox, si le pool a été créé sans --add_storages
pvesm add rbd <id> --pool <nom-pool> --content images,rootdir

Utilisateurs et droits — pveum

# Utilisateurs
pveum user list
pveum user add <user>@pve --password <mdp> [--comment "texte"]
pveum user modify <user>@pve --groups <groupe>

# Groupes
pveum group list
pveum group add <groupe>

# Rôles
pveum role list
pveum role add <role> --privs "VM.Console,VM.PowerMgmt"

# Permissions (ACL)
pveum acl list
pveum acl modify <chemin> --users <user>@pve --roles <role>
pveum acl modify <chemin> --groups <groupe> --roles <role>

# API Tokens
pveum user token add <user>@pve <token-name> --privsep 0

Firewall — pvesh

# Lister les règles datacenter
pvesh get /cluster/firewall/rules

# Ajouter une règle ACCEPT (ex: SSH)
pvesh create /cluster/firewall/rules \
  --action ACCEPT --type in --dport 22 --proto tcp --enable 1 --comment "SSH"

# Activer le firewall
pvesh set /cluster/firewall/options --enable 1

# Security Groups
pvesh create /cluster/firewall/groups --group <nom>
pvesh get /cluster/firewall/groups/<nom>

Sauvegardes — vzdump

# Sauvegarde unique
vzdump <vmid> --storage <stockage> --compress zstd \
  --mode snapshot       # sauvegarde à chaud par QEMU ; l'agent fige les écritures pour la cohérence
  # --mode suspend      # VM suspendue le temps du backup
  # --mode stop         # VM éteinte

# Sauvegarder tout le nœud
vzdump --all --storage <stockage> --compress zstd --mode snapshot

# Lister les sauvegardes
pvesh get /nodes/<nœud>/storage/<stockage>/content?content=backup

# Restaurer une VM
qmrestore <fichier.vma.zst> <newid> --storage local-lvm --unique

# Restaurer un conteneur
pct restore <newid> <fichier.tar.zst> --storage local-lvm

Diagnostic et état général

# Version de Proxmox
pveversion -v

# État du nœud
pvesh get /nodes/<nœud>/status

# Services critiques
systemctl status pveproxy pve-cluster pvedaemon

# Tâches récentes
pvesh get /nodes/<nœud>/tasks --limit 20

# Journaux
journalctl -u pve-cluster --since "1 hour ago"
journalctl -u pvedaemon -n 50

# Fichiers de configuration importants
/etc/pve/                          # configuration cluster (pmxcfs)
/etc/pve/qemu-server/<vmid>.conf   # configuration VM
/etc/pve/lxc/<ctid>.conf           # configuration conteneur
/etc/pve/storage.cfg               # configuration stockages
/etc/pve/corosync.conf             # configuration cluster Corosync
/etc/pve/firewall/cluster.fw       # règles firewall datacenter
/etc/network/interfaces            # configuration réseau

Concepts clés — aide-mémoire

Tableaux de synthèse des notions à retenir de chaque chapitre, à consulter en révision ou pendant les ateliers.

Virtualisation, installation et stockage de base

Concept Point clé
Type d'hyperviseur Proxmox VE est un hyperviseur de type 1, supportant à la fois KVM (VMs) et LXC (conteneurs)
KVM / QEMU / Proxmox KVM = accélération CPU (module noyau) · QEMU = émulation matérielle · Proxmox VE = orchestration (API, stockage, réseau)
/etc/pve/ Répertoire central de la configuration cluster (pmxcfs) — tout ce qui est configuré dans Proxmox y est stocké
local vs local-lvm local = stockage fichier (ISOs, templates) · local-lvm = stockage bloc (disques de VMs et conteneurs)
NFS / iSCSI / Ceph NFS = simple, ISOs et backups · iSCSI = bloc réseau, performances dépendantes du réseau · Ceph = distribué haute disponibilité, intégré nativement
Dépôts APT Enterprise = mises à jour validées, réservé aux abonnements · no-subscription = lab ou sans abonnement
RBAC Les permissions Proxmox s'appliquent par chemin (/vms/100), pas globalement
namespaces vs cgroups (LXC) namespaces = isolation (ce que le conteneur voit) · cgroups = limitation (ce qu'il peut consommer)
LXC vs Docker LXC = alternative légère à une VM, administrée comme un serveur (systemctl, apt) · Docker = emballage applicatif, jetable
ISO vs template LXC Une ISO installe un OS · un template LXC est déjà installé et prêt à démarrer
Suppression d'un CT pct destroy exige que le conteneur soit arrêté au préalable
Panne réseau d'un CT Vérifier d'abord vmbr0 sur l'hôte (ip link show vmbr0), puis l'IP et le sous-réseau du conteneur
Snapshot vs sauvegarde Snapshot = rapide, local, avant une modification · vzdump = plus lent, produit un fichier portable pour archivage/migration

VMs KVM

Concept Point clé
Fichier .conf d'une VM qm create génère /etc/pve/qemu-server/<vmid>.conf — modifiable directement, mais qm set reste préférable pour éviter les erreurs de syntaxe
QEMU Guest Agent Indispensable en production : snapshots cohérents (gel des écritures) et visibilité des IPs de la VM sans SSH
Image cloud vs ISO Une image cloud est plus légère (~300-500 Mo vs 700 Mo+) et arrive avec cloud-init préinstallé — déploiement en ~30 secondes
Déploiement en série 1 template cloud-init → clones liés → cloud-init différencie chaque clone par IP et hostname

Réseau et SDN

Concept Point clé
Rôle de vmbr0 Fournit la connectivité IP à l'hôte Proxmox lui-même ET sert de switch virtuel pour les VMs/CT qui lui sont rattachés
Activer le SDN Intégré à Proxmox VE (paquet libpve-network-perl) : Datacenter → SDN est présent d'office ; chaque modification ne prend effet qu'après Apply (pvesh set /cluster/sdn)
VNet sans Subnet Fonctionne en L2 pur, sans IP assignée automatiquement — un Subnet avec DHCP est nécessaire pour l'attribution automatique
Isolation entre VNets Isolation totale par défaut sans routage explicite entre eux
Scrub ZFS 0 errors confirme l'intégrité des données · un DEGRADED ou des erreurs de checksum imposent de remplacer le disque immédiatement

Cluster, Ceph et sécurité

Concept Point clé
Quorum Avec 3 nœuds/3 votes, 2 nœuds actifs suffisent (majorité simple) · si deux nœuds tombent, le nœud restant perd le quorum : /etc/pve passe en lecture seule, les VM en cours continuent mais aucune ne peut être démarrée ni modifiée
ring0_addr / ring1_addr Adresses IP Corosync des nœuds · ring1_addr ajoute un second lien réseau redondant
État Ceph HEALTH_OK = normal · HEALTH_WARN = souvent temporaire (rééquilibrage) · HEALTH_ERR = intervention requise
Réseau Ceph lab vs production Un seul réseau suffit en lab · une interface dédiée 10 Gbps est recommandée en production
Security Groups Modifier les règles d'un groupe les applique automatiquement à toutes les VMs qui l'utilisent
Héritage des ACL Combinaison typique : un rôle large sur / (ex. PVEAuditor) + un rôle restreint sur un sous-chemin (ex. PVEVMAdmin sur /pool/production)

PBS

Concept Point clé
Namespaces PBS Un dossier logique dans un datastore, un par cluster ou par client · côté Proxmox VE, le champ Namespace du stockage PBS

Raccourcis interface web

Action Raccourci
Ouvrir la console d'une VM/CT Clic sur Console
Créer une VM Bouton Create VM (haut droite)
Créer un CT Bouton Create CT (haut droite)
Voir les tâches en cours Onglet Tasks du panneau en bas de page
Rechercher une VM/CT Champ Search en haut de l'interface
Actualiser l'affichage F5