Migration provider bpg, templates cloud-init propres, cluster k3s HA (control-plane)
This commit is contained in:
@@ -0,0 +1,133 @@
|
||||
# =============================================================================
|
||||
# VMs Control-Plane k3s (HA, 3 nœuds, etcd embarqué)
|
||||
# =============================================================================
|
||||
# Une VM control-plane par hôte physique (PVE00, PVE01, PVE02), sur le VLAN 580
|
||||
# (Infrastructure). PVE03 n'héberge pas de control-plane (réservé workers).
|
||||
#
|
||||
# Le template Debian 13 cloud-init (VMID 9000) est stocké sur `VMs_NFS`,
|
||||
# storage partagé accessible depuis tous les nœuds du cluster — le clonage
|
||||
# cross-node fonctionne donc nativement (testé et validé), sans duplication
|
||||
# ni migration manuelle du template.
|
||||
#
|
||||
# Le disque de CHAQUE VM clonée est en revanche relocalisé vers le stockage
|
||||
# ZFS local du nœud cible (`VM_POOL_RAID10` sur PVE00, `local-lvm` ailleurs)
|
||||
# une fois le clone créé : etcd est sensible à la latence disque, et NFS
|
||||
# n'est pas adapté à ce type de charge (cf. incident Postgres/NFS du même lab).
|
||||
# =============================================================================
|
||||
|
||||
variable "k3s_cp_sshkeys_file" {
|
||||
description = "Chemin du fichier contenant les clés SSH autorisées (cluster + poste de travail). Doit exister sur la machine qui exécute `terraform apply` (ex: Luffy), pas sur PVE00."
|
||||
type = string
|
||||
default = "./sshkeys.pub"
|
||||
}
|
||||
|
||||
variable "k3s_cp_gateway" {
|
||||
description = "Passerelle du VLAN 580 (Infrastructure)"
|
||||
type = string
|
||||
default = "192.168.80.254"
|
||||
}
|
||||
|
||||
locals {
|
||||
k3s_control_planes = {
|
||||
"k3s-cp-00" = {
|
||||
node_name = "pve00"
|
||||
vm_id = 580
|
||||
ip = "192.168.80.10"
|
||||
datastore_id = "VM_POOL_RAID10" # ZFS local PVE00
|
||||
}
|
||||
"k3s-cp-01" = {
|
||||
node_name = "pve01"
|
||||
vm_id = 581
|
||||
ip = "192.168.80.11"
|
||||
datastore_id = "local-lvm" # LVM-thin local PVE01 (pas de ZFS sur ce nœud)
|
||||
}
|
||||
"k3s-cp-02" = {
|
||||
node_name = "pve02"
|
||||
vm_id = 582
|
||||
ip = "192.168.80.12"
|
||||
datastore_id = "local-lvm" # à adapter selon le storage réel disponible sur PVE02
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
resource "proxmox_virtual_environment_vm" "k3s_control_plane" {
|
||||
for_each = local.k3s_control_planes
|
||||
|
||||
name = each.key
|
||||
node_name = each.value.node_name
|
||||
vm_id = each.value.vm_id
|
||||
|
||||
clone {
|
||||
vm_id = 9000 # template debian13-cloudinit-template (stockage partagé VMs_NFS)
|
||||
node_name = "pve00" # nœud où la config du template est enregistrée (le disque, lui, est sur VMs_NFS)
|
||||
full = true
|
||||
}
|
||||
|
||||
agent {
|
||||
enabled = true
|
||||
}
|
||||
|
||||
cpu {
|
||||
cores = 2
|
||||
sockets = 1
|
||||
type = "x86-64-v2" # portable entre Coffee Lake / Skylake
|
||||
}
|
||||
|
||||
memory {
|
||||
dedicated = 4096
|
||||
}
|
||||
|
||||
scsi_hardware = "virtio-scsi-single"
|
||||
|
||||
disk {
|
||||
datastore_id = each.value.datastore_id
|
||||
interface = "scsi0"
|
||||
size = 20
|
||||
iothread = true
|
||||
}
|
||||
|
||||
network_device {
|
||||
bridge = "vmbr0"
|
||||
model = "virtio"
|
||||
vlan_id = 580
|
||||
}
|
||||
|
||||
initialization {
|
||||
datastore_id = each.value.datastore_id
|
||||
|
||||
ip_config {
|
||||
ipv4 {
|
||||
address = "${each.value.ip}/24"
|
||||
gateway = var.k3s_cp_gateway
|
||||
}
|
||||
}
|
||||
|
||||
user_account {
|
||||
username = "root"
|
||||
keys = [for line in split("\n", replace(trimspace(file(var.k3s_cp_sshkeys_file)), "\r", "")) : line if line != ""]
|
||||
}
|
||||
}
|
||||
|
||||
operating_system {
|
||||
type = "l26"
|
||||
}
|
||||
|
||||
stop_on_destroy = true
|
||||
}
|
||||
|
||||
output "k3s_control_plane_ips" {
|
||||
value = { for k, v in local.k3s_control_planes : k => v.ip }
|
||||
}
|
||||
|
||||
# =============================================================================
|
||||
# NOTE — Storage du template
|
||||
# =============================================================================
|
||||
# Le template 9000 (et 9001 pour Ubuntu) est stocké sur `VMs_NFS`, storage
|
||||
# partagé (content-type "Disk image" activé, accessible sur tous les nœuds).
|
||||
# Le clonage cross-node fonctionne donc directement, sans étape manuelle.
|
||||
#
|
||||
# Vérifier avant tout `terraform apply` que `each.value.datastore_id` pointe
|
||||
# bien vers un storage réellement disponible sur le nœud cible (`pvesm status`
|
||||
# sur chaque nœud) — en particulier pour PVE02, dont le storage local n'a pas
|
||||
# encore été vérifié à la date de rédaction de ce fichier.
|
||||
# =============================================================================
|
||||
Reference in New Issue
Block a user