# nodes — описание виртуальных машин # # Общая идея: # - каждая VM может иметь несколько сетевых интерфейсов (network_devices) # - каждый интерфейс полностью описывает свою сеть (bridge, VLAN, IP, gateway) # - порядок элементов в network_devices важен: # [0] → eth0 (основной интерфейс, обычно с default gateway) # [1] → eth1 # [2] → eth2 # # network_devices: # - список сетевых интерфейсов VM # # поля: # # bridge: # - имя Proxmox bridge (например vmbr0, vmbr1) # - ОБЯЗАТЕЛЬНО # # vlan_id: # - опционально # - если НЕ указан → интерфейс untagged # - если указан → интерфейс будет в VLAN (например 20 → зависит от настройки Proxmox bridge) # # ip: # - IPv4 адрес без CIDR (например "192.168.20.11") # - если не указан → будет использован DHCP (если доступен в сети) # # cidr: # - маска сети (например 24) # - используется вместе с ip → итог: ip/cidr # # gateway: # - опционально # - указывать ТОЛЬКО для одного интерфейса (обычно первого) # - задаёт default route внутри VM # # ВАЖНО: # - gateway должен быть только у одного интерфейса # - порядок network_devices критичен (eth0, eth1 и т.д.) # - неправильный порядок → потеря доступа к VM # # # cloudinit: # - опциональный параметр # - имя cloud-init файла # - ищется в: # cloud-config/<имя>.yml (root) # - если не найден → fallback: # modules/node/cloud-config/default.yml # # пример: # - cloudinit = "worker.yml" → cloud-config/worker.yml # - не указан → default.yml # # # пример одной сети (single NIC): # # network_devices = [ # { # bridge = "vmbr0" # vlan_id = 20 # ip = "192.168.20.11" # cidr = 24 # gateway = "192.168.20.1" # } # ] # # # пример двух сетей: # # network_devices = [ # { # bridge = "vmbr0" # vlan_id = 20 # ip = "192.168.20.23" # cidr = 24 # gateway = "192.168.20.1" # }, # { # bridge = "vmbr1" # ip = "192.168.22.26" # cidr = 24 # } # ] # # # РЕКОМЕНДАЦИИ: # - первый интерфейс (eth0) → management сеть # - второй интерфейс → storage / overlay / secondary # - не задавать gateway на вторичных интерфейсах # # # ПОВЕДЕНИЕ: # - ip_config генерируется автоматически из network_devices # - соответствие: порядок массива = порядок интерфейсов # locals { nodes = { k8s-master-1 = { cloudinit = "rocky.yml" image_file = "import/rocky9.qcow2" index = 1 cpu = var.worker_cpu memory = 4092 disk = var.worker_disk datastore = var.worker_datastore network_devices = [ { bridge = var.node_bridge vlan_id = 20 ip = "192.168.20.11" cidr = 24 gateway = "192.168.20.1" } ] } # k8s-worker-1 = { # cloudinit = "worker.yml" # index = 2 # cpu = var.worker_cpu # memory = 8192 # disk = var.worker_disk # datastore = var.worker_datastore # network_devices = [ # { # bridge = var.node_bridge # vlan_id = 20 # ip = "192.168.20.22" # cidr = 24 # gateway = "192.168.20.1" # } # ] # }, # k8s-worker-2 = { # cloudinit = "worker.yml" # index = 3 # cpu = var.worker_cpu # memory = 8192 # disk = var.worker_disk # datastore = var.worker_datastore # network_devices = [ # { # bridge = var.node_bridge # vlan_id = 20 # ip = "192.168.20.23" # cidr = 24 # gateway = "192.168.20.1" # }, # { # bridge = "vmbr0" # } # ] # } } }