Cleaning VM Creation
- Remove useless tf files - add extra disks capacity
This commit is contained in:
224
terraform/prod/README.md
Normal file
224
terraform/prod/README.md
Normal file
@@ -0,0 +1,224 @@
|
||||
# Terraform Configuration - Production Environment
|
||||
|
||||
Ce dossier contient la configuration Terraform pour déployer l'infrastructure du homelab sur Proxmox.
|
||||
|
||||
## Structure des fichiers
|
||||
|
||||
### Fichiers principaux
|
||||
|
||||
- **`virtual-machines.tf`** - Configuration et déploiement des machines virtuelles
|
||||
- **`lxc-containers.tf`** - Configuration des conteneurs LXC (préparatoire)
|
||||
- **`providers.tf`** - Configuration des providers Terraform
|
||||
- **`variables.tf`** - Définition des variables
|
||||
- **`terraform.tfvars`** - Valeurs des variables (à personnaliser)
|
||||
- **`inventory.tf`** - Génération de l'inventaire Ansible
|
||||
|
||||
### Dossier templates
|
||||
|
||||
- **`cloud-init.yaml.tpl`** - Template de configuration Cloud-Init pour les VMs
|
||||
- **`inventory.tpl`** - Template pour générer l'inventaire Ansible
|
||||
|
||||
## Déploiement des VMs
|
||||
|
||||
### Configuration de base
|
||||
|
||||
Les VMs sont configurées dans le fichier `terraform.tfvars` sous la variable `virtual_machines` :
|
||||
|
||||
```hcl
|
||||
virtual_machines = {
|
||||
"nom-vm" = {
|
||||
os = "debian" # OS du template à utiliser
|
||||
cores = 2 # Nombre de CPU cores
|
||||
memory = 4096 # RAM en MB
|
||||
disk_gb = 30 # Taille du disque en GB
|
||||
ip = "192.168.1.100" # Adresse IP statique
|
||||
gateway = "192.168.1.254" # Passerelle réseau
|
||||
tags = ["monitoring"] # Tags pour l'organisation
|
||||
packages = ["curl", "vim"] # Packages à installer
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Options avancées
|
||||
|
||||
Chaque VM peut avoir des configurations optionnelles :
|
||||
|
||||
```hcl
|
||||
"nom-vm-avancee" = {
|
||||
# Configuration de base
|
||||
os = "ubuntu"
|
||||
cores = 4
|
||||
memory = 8192
|
||||
disk_gb = 50
|
||||
ip = "192.168.1.101"
|
||||
gateway = "192.168.1.254"
|
||||
|
||||
# Options avancées
|
||||
cpu_type = "host" # Type de CPU (défaut: host)
|
||||
datastore = "local-lvm" # Datastore Proxmox
|
||||
network_bridge = "vmbr0" # Bridge réseau
|
||||
username = "admin" # Utilisateur (défaut: damien)
|
||||
dns_servers = ["1.1.1.1"] # Serveurs DNS
|
||||
post_install_commands = ["apt update"] # Commandes post-installation
|
||||
|
||||
# Disques supplémentaires
|
||||
additional_disks = [
|
||||
{
|
||||
interface = "scsi1"
|
||||
datastore = "local-lvm"
|
||||
size = 100
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Templates supportés
|
||||
|
||||
Les templates doivent être présents sur Proxmox avec les tags appropriés :
|
||||
|
||||
- **ubuntu** - Ubuntu Server (tag: `ubuntu`, `template`)
|
||||
- **debian** - Debian (tag: `debian`, `template`)
|
||||
- **alpine** - Alpine Linux (tag: `alpine`, `template`)
|
||||
- **rocky** - Rocky Linux (tag: `rocky`, `template`)
|
||||
- **centos** - CentOS (tag: `centos`, `template`)
|
||||
|
||||
## Utilisation
|
||||
|
||||
### 1. Prérequis
|
||||
|
||||
- Terraform installé
|
||||
- Accès à l'API Proxmox
|
||||
- Templates VM configurés sur Proxmox
|
||||
- Clés SSH configurées
|
||||
|
||||
### 2. Configuration
|
||||
|
||||
1. Copier `terraform.tfvars.example` vers `terraform.tfvars`
|
||||
2. Personnaliser les valeurs dans `terraform.tfvars`
|
||||
3. Vérifier les chemins des clés SSH
|
||||
|
||||
### 3. Déploiement
|
||||
|
||||
```bash
|
||||
# Initialisation
|
||||
terraform init
|
||||
|
||||
# Planification
|
||||
terraform plan
|
||||
|
||||
# Application
|
||||
terraform apply
|
||||
```
|
||||
|
||||
### 4. Vérification
|
||||
|
||||
```bash
|
||||
# Liste des ressources
|
||||
terraform state list
|
||||
|
||||
# Informations des VMs
|
||||
terraform output vm_info
|
||||
```
|
||||
|
||||
## Intégration Ansible
|
||||
|
||||
L'inventaire Ansible est généré automatiquement dans `../../ansible/inventory/hosts.ini`.
|
||||
|
||||
### Groupes générés automatiquement
|
||||
|
||||
- **Par OS** : `ubuntu`, `debian`, `alpine`, etc.
|
||||
- **Par tags** : groupes basés sur les tags des VMs
|
||||
- **Par pattern de nom** : `monitoring`, `web`, `database`, `kubernetes`
|
||||
|
||||
### Utilisation avec Ansible
|
||||
|
||||
```bash
|
||||
# Test de connectivité
|
||||
ansible all -i inventory/hosts.ini -m ping
|
||||
|
||||
# Playbook sur un groupe
|
||||
ansible-playbook -i inventory/hosts.ini playbooks/common.yml --limit monitoring
|
||||
```
|
||||
|
||||
## Conteneurs LXC (Futur)
|
||||
|
||||
Le fichier `lxc-containers.tf` est préparé pour le déploiement de conteneurs LXC.
|
||||
Il n'est pas encore fonctionnel mais servira de base pour le développement futur.
|
||||
|
||||
### Avantages des LXC
|
||||
|
||||
- Consommation réduite de ressources
|
||||
- Démarrage plus rapide
|
||||
- Idéal pour les services légers
|
||||
|
||||
### Cas d'usage recommandés
|
||||
|
||||
**LXC pour :**
|
||||
- Reverse proxy (nginx)
|
||||
- Monitoring léger
|
||||
- Services web simples
|
||||
- Environnements de développement
|
||||
|
||||
**VM pour :**
|
||||
- Kubernetes nodes
|
||||
- Bases de données critiques
|
||||
- Services nécessitant une isolation forte
|
||||
- Applications avec besoins kernel spécifiques
|
||||
|
||||
## Maintenance
|
||||
|
||||
### Mise à jour des VMs
|
||||
|
||||
```bash
|
||||
# Modifier terraform.tfvars
|
||||
# Puis appliquer les changements
|
||||
terraform plan
|
||||
terraform apply
|
||||
```
|
||||
|
||||
### Suppression d'une VM
|
||||
|
||||
```bash
|
||||
# Retirer la VM de terraform.tfvars
|
||||
# Puis appliquer
|
||||
terraform apply
|
||||
```
|
||||
|
||||
### Sauvegarde de l'état
|
||||
|
||||
```bash
|
||||
# Sauvegarde manuelle
|
||||
cp terraform.tfstate terraform.tfstate.backup.$(date +%Y%m%d)
|
||||
```
|
||||
|
||||
## Dépannage
|
||||
|
||||
### Problèmes courants
|
||||
|
||||
1. **Template non trouvé** : Vérifier que le template existe sur Proxmox avec les bons tags
|
||||
2. **IP déjà utilisée** : Vérifier les conflits d'adresses IP
|
||||
3. **Clé SSH** : Vérifier le chemin vers la clé publique SSH
|
||||
|
||||
### Logs utiles
|
||||
|
||||
```bash
|
||||
# Logs Terraform détaillés
|
||||
TF_LOG=DEBUG terraform apply
|
||||
|
||||
# État des ressources
|
||||
terraform show
|
||||
```
|
||||
|
||||
## Sécurité
|
||||
|
||||
- Les clés SSH privées ne sont jamais stockées dans le code
|
||||
- Les tokens API sont dans des variables d'environnement
|
||||
- Les VMs sont configurées avec des utilisateurs non-root
|
||||
- SSH par mot de passe est désactivé
|
||||
|
||||
## Support
|
||||
|
||||
Pour toute question ou problème, consulter :
|
||||
- Documentation Terraform Proxmox Provider
|
||||
- Logs Proxmox (`/var/log/pveproxy/`)
|
||||
- État Terraform (`terraform show`)
|
||||
Reference in New Issue
Block a user