225 lines
5.4 KiB
Markdown
225 lines
5.4 KiB
Markdown
# 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`)
|