159 lines
3.6 KiB
HCL
159 lines
3.6 KiB
HCL
# Nomad 多数据中心集群模块
|
||
# 支持跨地域部署:CN(dc1) + KR(dc2) + US(dc3)
|
||
|
||
terraform {
|
||
required_providers {
|
||
oci = {
|
||
source = "oracle/oci"
|
||
version = "~> 7.20"
|
||
}
|
||
huaweicloud = {
|
||
source = "huaweicloud/huaweicloud"
|
||
version = "~> 1.60"
|
||
}
|
||
aws = {
|
||
source = "hashicorp/aws"
|
||
version = "~> 5.0"
|
||
}
|
||
}
|
||
}
|
||
|
||
# 本地变量
|
||
locals {
|
||
nomad_version = "1.10.5"
|
||
|
||
# 通用 Nomad 配置
|
||
nomad_encrypt_key = "NVOMDvXblgWfhtzFzOUIHnKEOrbXOkPrkIPbRGGf1YQ="
|
||
|
||
# 数据中心配置
|
||
datacenters = {
|
||
dc1 = {
|
||
name = "dc1"
|
||
region = "cn"
|
||
location = "China"
|
||
provider = "existing" # 现有的 semaphore 节点
|
||
}
|
||
dc2 = {
|
||
name = "dc2"
|
||
region = "kr"
|
||
location = "Korea"
|
||
provider = "oracle"
|
||
}
|
||
dc3 = {
|
||
name = "dc3"
|
||
region = "us"
|
||
location = "US"
|
||
provider = "huawei" # 或 aws
|
||
}
|
||
}
|
||
|
||
# 用户数据模板
|
||
user_data_template = templatefile("${path.module}/templates/nomad-userdata.sh", {
|
||
nomad_version = local.nomad_version
|
||
nomad_encrypt_key = local.nomad_encrypt_key
|
||
})
|
||
}
|
||
|
||
# 数据源:获取现有的 semaphore 节点信息
|
||
data "external" "semaphore_info" {
|
||
program = ["bash", "-c", <<-EOF
|
||
echo '{
|
||
"ip": "100.116.158.95",
|
||
"datacenter": "dc1",
|
||
"status": "existing"
|
||
}'
|
||
EOF
|
||
]
|
||
}
|
||
|
||
# Oracle Cloud 韩国节点 (dc2)
|
||
module "oracle_korea_node" {
|
||
source = "../compute"
|
||
|
||
count = var.deploy_korea_node ? 1 : 0
|
||
|
||
# Oracle Cloud 特定配置
|
||
provider_type = "oracle"
|
||
|
||
# 实例配置
|
||
instance_config = {
|
||
name = "nomad-master-kr"
|
||
datacenter = "dc2"
|
||
instance_type = "VM.Standard.E2.1.Micro" # 免费层
|
||
image_id = var.oracle_ubuntu_image_id
|
||
subnet_id = var.oracle_subnet_id
|
||
|
||
# Nomad 配置
|
||
nomad_role = "server"
|
||
bootstrap_expect = 1
|
||
bind_addr = "auto" # 自动检测
|
||
|
||
# 网络配置
|
||
security_groups = [var.oracle_security_group_id]
|
||
|
||
# 标签
|
||
tags = merge(var.common_tags, {
|
||
Name = "nomad-master-kr"
|
||
Datacenter = "dc2"
|
||
Role = "nomad-server"
|
||
Provider = "oracle"
|
||
})
|
||
}
|
||
|
||
# 用户数据
|
||
user_data = templatefile("${path.module}/templates/nomad-userdata.sh", {
|
||
datacenter = "dc2"
|
||
nomad_version = local.nomad_version
|
||
nomad_encrypt_key = local.nomad_encrypt_key
|
||
bootstrap_expect = 1
|
||
bind_addr = "auto"
|
||
server_enabled = true
|
||
client_enabled = true
|
||
})
|
||
}
|
||
|
||
# 华为云美国节点 (dc3)
|
||
module "huawei_us_node" {
|
||
source = "../compute"
|
||
|
||
count = var.deploy_us_node ? 1 : 0
|
||
|
||
# 华为云特定配置
|
||
provider_type = "huawei"
|
||
|
||
# 实例配置
|
||
instance_config = {
|
||
name = "nomad-ash3c-us"
|
||
datacenter = "dc3"
|
||
instance_type = "s6.small.1" # 1vCPU 1GB
|
||
image_id = var.huawei_ubuntu_image_id
|
||
subnet_id = var.huawei_subnet_id
|
||
|
||
# Nomad 配置
|
||
nomad_role = "server"
|
||
bootstrap_expect = 1
|
||
bind_addr = "auto"
|
||
|
||
# 网络配置
|
||
security_groups = [var.huawei_security_group_id]
|
||
|
||
# 标签
|
||
tags = merge(var.common_tags, {
|
||
Name = "nomad-ash3c-us"
|
||
Datacenter = "dc3"
|
||
Role = "nomad-server"
|
||
Provider = "huawei"
|
||
})
|
||
}
|
||
|
||
# 用户数据
|
||
user_data = templatefile("${path.module}/templates/nomad-userdata.sh", {
|
||
datacenter = "dc3"
|
||
nomad_version = local.nomad_version
|
||
nomad_encrypt_key = local.nomad_encrypt_key
|
||
bootstrap_expect = 1
|
||
bind_addr = "auto"
|
||
server_enabled = true
|
||
client_enabled = true
|
||
})
|
||
} |