add networks many

This commit is contained in:
Iurii Anfinogenov
2026-04-19 17:39:08 +00:00
parent a6ebbb3a4d
commit bb4dc311c1
6 changed files with 163 additions and 90 deletions

View File

@@ -1,52 +1,159 @@
# 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:
# - опциональный параметр
# - если НЕ указан → VM будет в обычной сети (untagged, vmbr0)
# - если указан → VM попадет в соответствующий VLAN (например 20 → 192.168.20.0/24)
# - опционально
# - если НЕ указан → интерфейс 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 файла для конкретной VM
# - файл должен находиться в root: cloud-config/<имя>.yml
# - если НЕ указан → используется "default.yml"
# - если файл НЕ найден в root → используется fallback из модуля (modules/node/cloud-config/default.yml)
# - имя cloud-init файла
# - ищется в:
# cloud-config/<имя>.yml (root)
# - если не найден → fallback:
# modules/node/cloud-config/default.yml
#
# пример:
# - cloudinit = "worker.yml" → будет использован cloud-config/worker.yml
# - cloudinit не задан → будет использован 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 = {
k8s-master-1 = {
cloudinit = "master.yml"
index = 1
cpu = var.worker_cpu
memory = 4092
memory = 4092
disk = var.worker_disk
datastore = var.worker_datastore
ip_offset = 10
vlan_id = 20
}
k8s-worker-1 = {
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 = 4
memory = 8192
cpu = var.worker_cpu
memory = 8192
disk = var.worker_disk
datastore = var.worker_datastore
ip_offset = 20
vlan_id = 20
}
k8s-worker-2 = {
cloudinit = "worker.yml"
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 = 4
memory = 8192
cpu = var.worker_cpu
memory = 8192
disk = var.worker_disk
datastore = var.worker_datastore
ip_offset = 20
vlan_id = 20
}
network_devices = [
{
bridge = var.node_bridge
vlan_id = 20
ip = "192.168.20.23"
cidr = 24
gateway = "192.168.20.1"
},
{
bridge = "vmbr0"
}
]
}
}
}