Files
homelab-config/AGENT-creation-lxc-proxmox.md

8.8 KiB
Executable File

Guide : Création d'un container LXC sur Proxmox VE

Sommaire


Prérequis

Environnement

  • Cluster Proxmox VE 9.2.4 (Debian 13.5 Trixie)
  • Stockage ZFS configuré : vm-zfs (rpool/vm)
  • Réseau : vmbr0 (bridge par défaut)
  • Accès SSH aux nœuds Proxmox avec authentification par certificat

Templates disponibles

Vérifier les templates disponibles sur le nœud :

ls /var/lib/vz/template/cache/

Exemple de sortie :

debian-12-standard_12.12-1_amd64.tar.zst
debian-13-standard_13.6-1_amd64.tar.zst

Création du container LXC

Commande de base

pct create <CTID> <TEMPLATE> \
  --rootfs <STORAGE>:<SIZE> \
  --ostype <OS_TYPE> \
  --hostname <HOSTNAME> \
  --password <PASSWORD> \
  --unprivileged 0 \
  --onboot 1 \
  --nameserver <DNS_IP> \
  --net0 name=eth0,bridge=vmbr0,ip=<IP>/24,gw=<GATEWAY> \
  --start 1

Paramètres

Paramètre Description Valeur recommandée
CTID Identifiant unique du container 100-999999999
TEMPLATE Template système local:vztmpl/debian-13-standard_13.6-1_amd64.tar.zst
--rootfs Stockage et taille du disque racine vm-zfs:2 (2 GiB sur ZFS)
--ostype Type du système d'exploitation debian, ubuntu, alpine
--hostname Nom d'hôte du container status-monitor
--password Mot de passe root secrettemp123 (temporaire)
--unprivileged Container non privilégié 0 (privilégié) ou 1 (non-privilégié)
--onboot Démarrage automatique 1 (oui) ou 0 (non)
--nameserver Serveur DNS 192.168.0.92 (AdGuard) ou 8.8.8.8
--net0 Configuration réseau name=eth0,bridge=vmbr0,ip=192.168.0.X/24,gw=192.168.0.254
--start Démarrer après création 1 (oui)

Configuration réseau

Options réseau (--net0)

Option Description Exemple
name Nom de l'interface eth0
bridge Bridge Proxmox vmbr0
ip Adresse IP 192.168.0.201/24
gw Passerelle 192.168.0.254
hwaddr Adresse MAC BC:24:11:XX:XX:XX (auto-générée)
firewall Pare-feu activé 1 (oui) ou 0 (non)

Exemple de configuration réseau complète

--net0 name=eth0,bridge=vmbr0,ip=192.168.0.201/24,gw=192.168.0.254,firewall=0

Configuration SSH

Ajout de la clé SSH pour accès sans mot de passe

  1. Créer le répertoire .ssh dans le container :

    pct exec <CTID> -- mkdir -p /root/.ssh
    pct exec <CTID> -- chmod 700 /root/.ssh
    
  2. Ajouter la clé publique :

    pct exec <CTID> -- bash -c 'echo ssh-ed25519\ AAAAC3NzaC1lZDI1NTE5AAAAIG8eq44iROSYLJj0G5jNh2Py57/f2Z0LnTE7rPG2T6HH\ theo@peis.fr > /root/.ssh/authorized_keys'
    
  3. Configurer les permissions :

    pct exec <CTID> -- chmod 600 /root/.ssh/authorized_keys
    
  4. Vérifier la configuration SSH (optionnel) :

    pct exec <CTID> -- cat /etc/ssh/sshd_config | grep -E 'PasswordAuthentication|PermitRootLogin|PubkeyAuthentication'
    

Test de connexion

ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no root@192.168.0.201

Vérifications

Vérifier le statut du container

pct status <CTID>

Exemple de sortie :

status: running

Vérifier l'adresse IP

pct exec <CTID> -- ip addr show eth0

Vérifier le service SSH

pct exec <CTID> -- ss -tlnp | grep 22

Exemple de sortie :

LISTEN 0      4096               *:22              *:*    users:(("sshd",pid=121,fd=3))

Tester la connectivité réseau

ping 192.168.0.<CTID_IP>

Commandes utiles

Gestion du container

Action Commande
Démarrer pct start <CTID>
Arrêter pct stop <CTID>
Redémarrer pct restart <CTID>
Supprimer pct destroy <CTID>
Voir les logs pct console <CTID>
Exécuter une commande pct exec <CTID> -- <COMMANDE>

Gestion du stockage

Action Commande
Redimensionner pct resize <CTID> rootfs +2G
Voir l'utilisation pct df <CTID>

Gestion du réseau

Action Commande
Ajouter une IP pct set <CTID> --net0 name=eth0,bridge=vmbr0,ip=192.168.0.X/24,gw=192.168.0.254
Voir la config pct config <CTID>

Exemple concret : CT201 (status-monitor)

Contexte

Création d'un container dédié au monitoring du statut des services du homelab.

Commande de création

pct create 201 \
  local:vztmpl/debian-13-standard_13.6-1_amd64.tar.zst \
  --rootfs vm-zfs:2 \
  --ostype debian \
  --hostname status-monitor \
  --password secrettemp123 \
  --unprivileged 0 \
  --onboot 1 \
  --nameserver 192.168.0.92 \
  --net0 name=eth0,bridge=vmbr0,ip=192.168.0.201/24,gw=192.168.0.254 \
  --start 1

Post-création

  1. Ajout de la clé SSH :

    # Sur le nœud Proxmox (prox2)
    pct exec 201 -- mkdir -p /root/.ssh && chmod 700 /root/.ssh
    pct exec 201 -- bash -c 'echo ssh-ed25519\ AAAAC3NzaC1lZDI1NTE5AAAAIG8eq44iROSYLJj0G5jNh2Py57/f2Z0LnTE7rPG2T6HH\ theo@peis.fr > /root/.ssh/authorized_keys'
    pct exec 201 -- chmod 600 /root/.ssh/authorized_keys
    
  2. Vérification :

    # Vérifier le statut
    pct status 201
    
    # Tester le ping
    ping 192.168.0.201
    
    # Tester SSH
    ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no root@192.168.0.201 echo "OK"
    
  3. Installation des paquets (si DNS fonctionne) :

    ssh root@192.168.0.201 "apt-get update && apt-get install -y python3 curl git"
    

    Note

    : Si le DNS ne fonctionne pas avec 192.168.0.92 (AdGuard), utiliser 8.8.8.8 :

    ssh root@192.168.0.201 "echo 'nameserver 8.8.8.8' > /etc/resolv.conf"
    

Configuration finale

Propriété Valeur
CTID 201
Nom status-monitor
IP 192.168.0.201
Stockage vm-zfs:2 (2 GiB)
OS Debian 13 (Trixie)
Statut running
Démarrage auto Oui
Accès SSH ssh root@192.168.0.201

Résolution des problèmes

Problème : DNS ne fonctionne pas

Symptômes : apt-get update échoue avec "Temporary failure resolving"

Solution :

# Changer temporairement le DNS
ssh root@192.168.0.201 "echo 'nameserver 8.8.8.8' > /etc/resolv.conf"

# Ou vérifier AdGuard (CT103)
# Si AdGuard bloque les requêtes, vérifier sa configuration

Problème : SSH ne répond pas

Symptômes : ssh root@192.168.0.201 timeout

Vérifications :

  1. Le container est bien démarré : pct status 201
  2. L'IP est configurée : pct exec 201 -- ip a
  3. SSH est en écoute : pct exec 201 -- ss -tlnp | grep 22
  4. La clé SSH est correcte : cat /root/.ssh/authorized_keys

Problème : Impossible de créer le container (template introuvable)

Symptômes : volume 'local:vztmpl/...' does not exist

Solution :

# Lister les templates disponibles
ls /var/lib/vz/template/cache/

# Si nécessaire, télécharger un template
pveam download local debian-13-standard_13.6-1_amd64.tar.zst

Bonnes pratiques

  1. Nommage : Utiliser des noms explicites pour les containers (ex: ct201-status-monitor)
  2. Stockage : Utiliser ZFS pour les containers avec beaucoup d'E/S
  3. Réseau : Toujours spécifier une IP statique pour les services critiques
  4. Sécurité :
    • Désactiver l'accès root SSH si possible
    • Utiliser des clés SSH au lieu de mots de passe
    • Mettre à jour les paquets après création
  5. Sauvegarde : Configurer des sauvegardes régulières des containers

Commandes résumées pour CT201

# Création
pct create 201 local:vztmpl/debian-13-standard_13.6-1_amd64.tar.zst --rootfs vm-zfs:2 --ostype debian --hostname status-monitor --password secrettemp123 --unprivileged 0 --onboot 1 --nameserver 192.168.0.92 --net0 name=eth0,bridge=vmbr0,ip=192.168.0.201/24,gw=192.168.0.254 --start 1

# Ajout clé SSH
pct exec 201 -- mkdir -p /root/.ssh && chmod 700 /root/.ssh
pct exec 201 -- bash -c 'echo ssh-ed25519\ AAAAC3NzaC1lZDI1NTE5AAAAIG8eq44iROSYLJj0G5jNh2Py57/f2Z0LnTE7rPG2T6HH\ theo@peis.fr > /root/.ssh/authorized_keys'
pct exec 201 -- chmod 600 /root/.ssh/authorized_keys

# Connexion
ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no root@192.168.0.201

# Vérifications
pct status 201
ping 192.168.0.201

Document généré le 18/07/2026