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

323 lines
8.8 KiB
Markdown
Executable File

# Guide : Création d'un container LXC sur Proxmox VE
## Sommaire
- [Prérequis](#prérequis)
- [Création du container LXC](#création-du-container-lxc)
- [Configuration réseau](#configuration-réseau)
- [Configuration SSH](#configuration-ssh)
- [Vérifications](#vérifications)
- [Commandes utiles](#commandes-utiles)
- [Exemple concret : CT201 (status-monitor)](#exemple-concret--ct201-status-monitor)
---
## 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 :
```bash
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
```bash
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
```bash
--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** :
```bash
pct exec <CTID> -- mkdir -p /root/.ssh
pct exec <CTID> -- chmod 700 /root/.ssh
```
2. **Ajouter la clé publique** :
```bash
pct exec <CTID> -- bash -c 'echo ssh-ed25519\ AAAAC3NzaC1lZDI1NTE5AAAAIG8eq44iROSYLJj0G5jNh2Py57/f2Z0LnTE7rPG2T6HH\ theo@peis.fr > /root/.ssh/authorized_keys'
```
3. **Configurer les permissions** :
```bash
pct exec <CTID> -- chmod 600 /root/.ssh/authorized_keys
```
4. **Vérifier la configuration SSH** (optionnel) :
```bash
pct exec <CTID> -- cat /etc/ssh/sshd_config | grep -E 'PasswordAuthentication|PermitRootLogin|PubkeyAuthentication'
```
### Test de connexion
```bash
ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no root@192.168.0.201
```
---
## Vérifications
### Vérifier le statut du container
```bash
pct status <CTID>
```
Exemple de sortie :
```
status: running
```
### Vérifier l'adresse IP
```bash
pct exec <CTID> -- ip addr show eth0
```
### Vérifier le service SSH
```bash
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
```bash
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
```bash
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** :
```bash
# 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** :
```bash
# 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) :
```bash
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` :
> ```bash
> 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** :
```bash
# 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** :
```bash
# 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
```bash
# 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*