Compare commits
2 Commits
743fad7c3e
...
7ffe475cb3
| Author | SHA1 | Date | |
|---|---|---|---|
| 7ffe475cb3 | |||
| 63a2d92f12 |
58
README.md
58
README.md
@ -1,51 +1,51 @@
|
||||
Что содержит проект
|
||||
|
||||
Модуль OpenTofu для создания Kubernetes-нод в Proxmox.
|
||||
|
||||
Генерацию cloud-init конфигураций.
|
||||
|
||||
Параметризованную выдачу VMID, IP, hostname.
|
||||
|
||||
Готовый root-конфиг, использующий модуль k8s-node.
|
||||
|
||||
Возможность добавлять и удалять конкретные ноды без count.
|
||||
|
||||
Подготовку виртуальных машин к установке Kubernetes.
|
||||
|
||||
Структура репозитория
|
||||
├── README.md
|
||||
├── locals.tf
|
||||
├── main.tf
|
||||
├── modules
|
||||
│ └── k8s-node
|
||||
│ ├── cloud-config
|
||||
│ ├── locals.tf
|
||||
│ ├── main.tf
|
||||
│ ├── outputs.tf
|
||||
│ └── variables.tf
|
||||
├── outputs.tf
|
||||
├── providers.tf
|
||||
├── terraform.tfstate
|
||||
├── terraform.tfstate.backup
|
||||
├── terraform.tfvars
|
||||
└── variables.tf
|
||||
|
||||
Быстрый старт
|
||||
1. Инициализация проекта
|
||||
tofu init
|
||||
2. Проверка плана
|
||||
tofu plan
|
||||
3. Создание инфраструктуры
|
||||
tofu apply
|
||||
|
||||
1. Инициализация проекта
|
||||
```
|
||||
tofu init
|
||||
```
|
||||
2. Проверка плана
|
||||
```
|
||||
tofu plan
|
||||
```
|
||||
3. Создание инфраструктуры
|
||||
```
|
||||
tofu apply
|
||||
```
|
||||
После выполнения этой команды Proxmox создаст виртуальные машины, сгенерирует userdata для cloud-init и развернёт требуемые ноды.
|
||||
|
||||
Управление нодами
|
||||
|
||||
Модуль принимает объект вида:
|
||||
|
||||
```
|
||||
nodes = {
|
||||
master1 = { role = "master", cpu = 2, memory = 4096 }
|
||||
worker1 = { role = "worker", cpu = 2, memory = 4096 }
|
||||
worker2 = { role = "worker", cpu = 2, memory = 4096 }
|
||||
}
|
||||
|
||||
master1 = { role = "master", cpu = 2, memory = 4096 }
|
||||
|
||||
worker1 = { role = "worker", cpu = 2, memory = 4096 }
|
||||
|
||||
worker2 = { role = "worker", cpu = 2, memory = 4096 }
|
||||
|
||||
}
|
||||
```
|
||||
Вы можете:
|
||||
|
||||
Добавить новую ноду, просто вписав её в map.
|
||||
|
||||
Удалить ноду, удалив её ключ из map.
|
||||
|
||||
Иметь несколько кластеров, копируя модуль в разные окружения.
|
||||
|
||||
12
locals.tf
12
locals.tf
@ -4,6 +4,7 @@ locals {
|
||||
nodes = {
|
||||
master1 = {
|
||||
role = "master"
|
||||
index = 1
|
||||
cpu = var.master_cpu
|
||||
memory = var.master_memory
|
||||
disk = var.master_disk
|
||||
@ -12,6 +13,7 @@ locals {
|
||||
}
|
||||
|
||||
worker1 = {
|
||||
index = 1
|
||||
role = "worker"
|
||||
cpu = var.worker_cpu
|
||||
memory = var.worker_memory
|
||||
@ -20,16 +22,8 @@ locals {
|
||||
ip_offset = var.worker_ip_offset
|
||||
}
|
||||
|
||||
# worker2 = {
|
||||
# role = "worker"
|
||||
# cpu = var.worker_cpu
|
||||
# memory = var.worker_memory
|
||||
# disk = var.worker_disk
|
||||
# datastore = var.worker_datastore
|
||||
# ip_offset = var.worker_ip_offset
|
||||
# }
|
||||
|
||||
worker3 = {
|
||||
index = 3
|
||||
role = "worker"
|
||||
cpu = var.worker_cpu
|
||||
memory = var.worker_memory
|
||||
|
||||
@ -1,37 +1,18 @@
|
||||
locals {
|
||||
# ssh-ключ приходит снаружи, файл не читаем
|
||||
ssh_public_key = var.ssh_key
|
||||
nodes = var.nodes
|
||||
|
||||
# Разделяем ноды по ролям
|
||||
masters = {
|
||||
for name, node in var.nodes :
|
||||
for name, node in local.nodes :
|
||||
name => node if node.role == "master"
|
||||
}
|
||||
|
||||
workers = {
|
||||
for name, node in var.nodes :
|
||||
for name, node in local.nodes :
|
||||
name => node if node.role == "worker"
|
||||
}
|
||||
|
||||
# Даём каждой ноде индекс внутри своей роли (master1, master2, worker1...)
|
||||
# Индекс определяется по отсортированным именам, чтобы был стабильным.
|
||||
indexed_masters = {
|
||||
for name, node in local.masters :
|
||||
name => merge(node, {
|
||||
index = index(sort(keys(local.masters)), name) + 1
|
||||
})
|
||||
}
|
||||
|
||||
indexed_workers = {
|
||||
for name, node in local.workers :
|
||||
name => merge(node, {
|
||||
index = index(sort(keys(local.workers)), name) + 1
|
||||
})
|
||||
}
|
||||
|
||||
# Общая карта нод
|
||||
nodes = merge(local.indexed_masters, local.indexed_workers)
|
||||
|
||||
# IP-адреса
|
||||
ip_map = {
|
||||
for name, node in local.nodes :
|
||||
|
||||
@ -5,6 +5,7 @@ variable "ssh_key" {
|
||||
variable "nodes" {
|
||||
type = map(object({
|
||||
role = string
|
||||
index = number
|
||||
cpu = number
|
||||
memory = number
|
||||
disk = number
|
||||
|
||||
1
terraform.tfstate
Normal file
1
terraform.tfstate
Normal file
File diff suppressed because one or more lines are too long
1
terraform.tfstate.backup
Normal file
1
terraform.tfstate.backup
Normal file
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user