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
5.4 KiB
5.4 KiB
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 virtuelleslxc-containers.tf- Configuration des conteneurs LXC (préparatoire)providers.tf- Configuration des providers Terraformvariables.tf- Définition des variablesterraform.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 VMsinventory.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 :
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 :
"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
- Copier
terraform.tfvars.exampleversterraform.tfvars - Personnaliser les valeurs dans
terraform.tfvars - Vérifier les chemins des clés SSH
3. Déploiement
# Initialisation
terraform init
# Planification
terraform plan
# Application
terraform apply
4. Vérification
# 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
# 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
# Modifier terraform.tfvars
# Puis appliquer les changements
terraform plan
terraform apply
Suppression d'une VM
# Retirer la VM de terraform.tfvars
# Puis appliquer
terraform apply
Sauvegarde de l'état
# Sauvegarde manuelle
cp terraform.tfstate terraform.tfstate.backup.$(date +%Y%m%d)
Dépannage
Problèmes courants
- Template non trouvé : Vérifier que le template existe sur Proxmox avec les bons tags
- IP déjà utilisée : Vérifier les conflits d'adresses IP
- Clé SSH : Vérifier le chemin vers la clé publique SSH
Logs utiles
# 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)