169 lines
4.4 KiB
HCL
169 lines
4.4 KiB
HCL
# Nomad 多数据中心生产环境配置
|
|
# 部署架构: CN(dc1) + KR(dc2) + US(dc3)
|
|
|
|
terraform {
|
|
required_version = ">= 1.0"
|
|
|
|
required_providers {
|
|
oci = {
|
|
source = "oracle/oci"
|
|
version = "~> 5.0"
|
|
}
|
|
huaweicloud = {
|
|
source = "huaweicloud/huaweicloud"
|
|
version = "~> 1.60"
|
|
}
|
|
}
|
|
}
|
|
|
|
# Oracle Cloud Provider (韩国)
|
|
provider "oci" {
|
|
alias = "korea"
|
|
tenancy_ocid = var.oracle_tenancy_ocid
|
|
user_ocid = var.oracle_user_ocid
|
|
fingerprint = var.oracle_fingerprint
|
|
private_key_path = var.oracle_private_key_path
|
|
region = "ap-seoul-1" # 韩国首尔
|
|
}
|
|
|
|
# 华为云 Provider (美国)
|
|
provider "huaweicloud" {
|
|
alias = "us"
|
|
access_key = var.huawei_access_key
|
|
secret_key = var.huawei_secret_key
|
|
region = "us-east-1" # 美国东部
|
|
}
|
|
|
|
# 本地变量
|
|
locals {
|
|
project_name = "nomad-multi-dc"
|
|
environment = "production"
|
|
|
|
common_tags = {
|
|
Project = local.project_name
|
|
Environment = local.environment
|
|
ManagedBy = "opentofu"
|
|
Owner = "devops-team"
|
|
}
|
|
}
|
|
|
|
# 数据源:获取 SSH 公钥
|
|
data "local_file" "ssh_public_key" {
|
|
filename = pathexpand("~/.ssh/id_rsa.pub")
|
|
}
|
|
|
|
# Oracle Cloud 基础设施 (韩国 - dc2)
|
|
module "oracle_infrastructure" {
|
|
source = "../../providers/oracle-cloud"
|
|
|
|
providers = {
|
|
oci = oci.korea
|
|
}
|
|
|
|
project_name = local.project_name
|
|
environment = local.environment
|
|
vpc_cidr = "10.1.0.0/16"
|
|
|
|
oci_config = {
|
|
tenancy_ocid = var.oracle_tenancy_ocid
|
|
user_ocid = var.oracle_user_ocid
|
|
fingerprint = var.oracle_fingerprint
|
|
private_key_path = var.oracle_private_key_path
|
|
region = "ap-seoul-1"
|
|
}
|
|
|
|
common_tags = local.common_tags
|
|
}
|
|
|
|
# 华为云基础设施 (美国 - dc3)
|
|
module "huawei_infrastructure" {
|
|
source = "../../providers/huawei-cloud"
|
|
|
|
providers = {
|
|
huaweicloud = huaweicloud.us
|
|
}
|
|
|
|
project_name = local.project_name
|
|
environment = local.environment
|
|
vpc_cidr = "10.2.0.0/16"
|
|
availability_zones = ["us-east-1a", "us-east-1b"]
|
|
|
|
common_tags = local.common_tags
|
|
}
|
|
|
|
# Nomad 多数据中心集群
|
|
module "nomad_cluster" {
|
|
source = "../../modules/nomad-cluster"
|
|
|
|
# 部署配置
|
|
deploy_korea_node = var.deploy_korea_node
|
|
deploy_us_node = var.deploy_us_node
|
|
|
|
# Oracle Cloud 配置
|
|
oracle_config = {
|
|
tenancy_ocid = var.oracle_tenancy_ocid
|
|
user_ocid = var.oracle_user_ocid
|
|
fingerprint = var.oracle_fingerprint
|
|
private_key_path = var.oracle_private_key_path
|
|
region = "ap-seoul-1"
|
|
}
|
|
|
|
oracle_subnet_id = module.oracle_infrastructure.public_subnet_ids[0]
|
|
oracle_security_group_id = module.oracle_infrastructure.security_group_id
|
|
|
|
# 华为云配置
|
|
huawei_config = {
|
|
access_key = var.huawei_access_key
|
|
secret_key = var.huawei_secret_key
|
|
region = "us-east-1"
|
|
}
|
|
|
|
huawei_subnet_id = module.huawei_infrastructure.public_subnet_ids[0]
|
|
huawei_security_group_id = module.huawei_infrastructure.security_group_id
|
|
|
|
# 通用配置
|
|
ssh_public_key = data.local_file.ssh_public_key.content
|
|
common_tags = local.common_tags
|
|
|
|
# Nomad 配置
|
|
nomad_version = "1.10.5"
|
|
nomad_encrypt_key = var.nomad_encrypt_key
|
|
}
|
|
|
|
# 生成 Ansible inventory
|
|
resource "local_file" "ansible_inventory" {
|
|
filename = "${path.module}/generated/nomad-cluster-inventory.yml"
|
|
content = yamlencode({
|
|
all = {
|
|
children = {
|
|
nomad_servers = {
|
|
hosts = module.nomad_cluster.ansible_inventory.all.children.nomad_servers.hosts
|
|
}
|
|
}
|
|
vars = {
|
|
ansible_user = "ubuntu"
|
|
ansible_ssh_private_key_file = "~/.ssh/id_rsa"
|
|
ansible_ssh_common_args = "-o StrictHostKeyChecking=no"
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
# 生成部署后配置脚本
|
|
resource "local_file" "post_deploy_script" {
|
|
filename = "${path.module}/generated/post-deploy.sh"
|
|
content = templatefile("${path.module}/templates/post-deploy.sh", {
|
|
cluster_overview = module.nomad_cluster.cluster_overview
|
|
endpoints = module.nomad_cluster.cluster_endpoints
|
|
})
|
|
|
|
file_permission = "0755"
|
|
}
|
|
|
|
# 生成跨数据中心测试任务
|
|
resource "local_file" "cross_dc_test_job" {
|
|
filename = "${path.module}/generated/cross-dc-test.nomad"
|
|
content = templatefile("${path.module}/templates/cross-dc-test.nomad", {
|
|
datacenters = ["dc1", "dc2", "dc3"]
|
|
})
|
|
} |