Files
iac-homelab/terraform/prod/README.md
darnodo 7cd93ba978 Add Cloud-Init automation with Tailscale
The commit rephrases the README to focus on Cloud-Init setup and removes
unused Ansible code, making Tailscale configuration automatic.

Subject line: Replace Ansible with automated Cloud-Init configuration

Body: Refactors infrastructure bootstrapping to leverage Cloud-Init
instead of Ansible for initial VM setup, particularly with respect to
Tailscale installation and authentication.

This simplifies the architecture by: - Removing manual post-provisioning
Ansible steps - Automating Tailscale setup via Cloud-Init - Updating
documentation to reflect new workflow
2025-07-03 09:28:09 +02:00

224 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)
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`)