Use module to run web/worker

This commit is contained in:
Serge Logvinov
2022-05-08 19:51:21 +03:00
parent c2aa29a3eb
commit aa5d217856
9 changed files with 170 additions and 103 deletions

View File

@@ -4,7 +4,7 @@ module "controlplane" {
for_each = { for idx, name in local.regions : name => idx }
region = each.key
instance_count = lookup(try(var.controlplane[each.key], {}), "count", 0)
instance_flavor = "d2-2"
instance_flavor = lookup(try(var.controlplane[each.key], {}), "instance_type", "d2-2")
instance_image = data.openstack_images_image_v2.talos[each.key].id
instance_params = merge(var.kubernetes, {
ipv4_local_network = local.network[each.key].cidr

View File

@@ -1,62 +1,18 @@
# resource "openstack_networking_port_v2" "web" {
# for_each = { for idx, name in local.regions : name => idx }
# region = each.key
# name = "web-${lower(each.key)}-${each.value + 1}"
# network_id = local.network[each.key].id
# admin_state_up = true
module "web" {
source = "./modules/worker"
for_each = { for idx, name in local.regions : name => idx }
region = each.key
instance_count = lookup(try(var.instances[each.key], {}), "web_count", 0)
instance_name = "web"
instance_flavor = lookup(try(var.instances[each.key], {}), "web_instance_type", 0)
instance_image = data.openstack_images_image_v2.talos[each.key].id
instance_params = merge(var.kubernetes, {
ipv4_local_network = local.network[each.key].cidr
ipv4_local_gw = local.network_public[each.key].gateway
lbv4 = module.controlplane[each.key].controlplane_lb
})
# fixed_ip {
# subnet_id = local.network_public[each.key].id
# ip_address = cidrhost(local.network_public[each.key].cidr, 21 + each.value)
# }
# }
# locals {
# web_labels = "project.io/node-pool=web"
# }
# # resource "openstack_compute_instance_v2" "web" {
# # for_each = { for idx, name in local.regions : name => idx }
# # region = each.key
# # name = "web-${lower(each.key)}-${each.value + 1}"
# # flavor_name = "d2-2"
# # image_id = data.openstack_images_image_v2.talos[each.key].id
# # key_pair = data.openstack_compute_keypair_v2.terraform[each.key].name
# # user_data = templatefile("${path.module}/templates/worker.yaml.tpl",
# # merge(var.kubernetes, {
# # name = "web-${lower(each.key)}-${each.value + 1}"
# # lbv4 = openstack_networking_port_v2.vip[each.key].fixed_ip[0].ip_address
# # nodeSubnets = local.network_public[each.key].cidr
# # labels = local.web_labels
# # })
# # )
# # network {
# # name = local.network_external[each.key].name
# # }
# # network {
# # port = openstack_networking_port_v2.web[each.key].id
# # }
# # lifecycle {
# # ignore_changes = [flavor_name, image_id, user_data]
# # }
# # }
# resource "local_file" "web" {
# for_each = { for idx, name in local.regions : name => idx }
# content = templatefile("${path.module}/templates/worker.yaml.tpl",
# merge(var.kubernetes, {
# name = "web-${lower(each.key)}-${each.value + 1}"
# lbv4 = openstack_networking_port_v2.vip[each.key].fixed_ip[0].ip_address
# nodeSubnets = local.network_public[each.key].cidr
# labels = local.web_labels
# })
# )
# filename = "_cfgs/web-${lower(each.key)}-${each.value + 1}.yaml"
# file_permission = "0600"
# }
network_internal = local.network_public[each.key]
network_external = local.network_external[each.key]
}

View File

@@ -1,44 +1,17 @@
# resource "openstack_networking_port_v2" "worker" {
# for_each = { for idx, name in local.regions : name => idx }
# region = each.key
# name = "worker-${lower(each.key)}-${each.value + 1}"
# network_id = local.network[each.key].id
# admin_state_up = true
module "worker" {
source = "./modules/worker"
for_each = { for idx, name in local.regions : name => idx }
region = each.key
instance_count = lookup(try(var.instances[each.key], {}), "worker_count", 0)
instance_name = "worker"
instance_flavor = lookup(try(var.instances[each.key], {}), "worker_instance_type", 0)
instance_image = data.openstack_images_image_v2.talos[each.key].id
instance_params = merge(var.kubernetes, {
ipv4_local_network = local.network[each.key].cidr
ipv4_local_gw = local.network_public[each.key].gateway
lbv4 = module.controlplane[each.key].controlplane_lb
})
# fixed_ip {
# subnet_id = local.network_private[each.key].id
# ip_address = cidrhost(local.network_private[each.key].cidr, 31 + each.value)
# }
# }
# locals {
# worker_labels = "project.io/node-pool=worker"
# }
# # resource "openstack_compute_instance_v2" "worker" {
# # for_each = { for idx, name in local.regions : name => idx }
# # region = each.key
# # name = "worker-${lower(each.key)}-${each.value + 1}"
# # flavor_name = "d2-2"
# # image_id = data.openstack_images_image_v2.talos[each.key].id
# # key_pair = data.openstack_compute_keypair_v2.terraform[each.key].name
# # user_data = templatefile("${path.module}/templates/worker.yaml.tpl",
# # merge(var.kubernetes, {
# # name = "web-${lower(each.key)}-${each.value + 1}"
# # lbv4 = openstack_networking_port_v2.vip[each.key].fixed_ip[0].ip_address
# # nodeSubnets = local.network_private[each.key].cidr
# # labels = local.web_labels
# # })
# # )
# # network {
# # port = openstack_networking_port_v2.worker[each.key].id
# # }
# # lifecycle {
# # ignore_changes = [flavor_name, image_id, user_data]
# # }
# # }
network_internal = local.network_public[each.key]
}

View File

@@ -1,4 +1,9 @@
output "controlplane_lb" {
description = "Kubernetes controlplane local loadbalancer ip"
value = local.ipv4_local_vip
}
output "controlplane_endpoints" {
description = "Kubernetes controlplane endpoint"
value = [for ip in try(openstack_networking_port_v2.controlplane_public[*].all_fixed_ips, []) : ip]

View File

@@ -0,0 +1,63 @@
resource "openstack_networking_port_v2" "worker" {
count = var.instance_count
region = var.region
name = "${var.instance_name}-${lower(var.region)}-${count.index + 1}"
network_id = var.network_internal.network_id
admin_state_up = true
fixed_ip {
subnet_id = var.network_internal.subnet_id
ip_address = cidrhost(var.network_internal.cidr, var.instance_ip_start + count.index)
}
}
locals {
worker_labels = "topology.kubernetes.io/region=nova,topology.kubernetes.io/zone=${var.region},project.io/node-pool=${var.instance_name}"
}
resource "openstack_compute_instance_v2" "worker" {
count = var.instance_count
region = var.region
name = "${var.instance_name}-${lower(var.region)}-${count.index + 1}"
flavor_name = var.instance_flavor
image_id = var.instance_image
user_data = templatefile("${path.module}/../../templates/worker.yaml.tpl",
merge(var.instance_params, {
name = "${var.instance_name}-${lower(var.region)}-${count.index + 1}"
labels = local.worker_labels
iface = try(var.network_external.name, "") == "" ? "eth0" : "eth1"
nodeSubnets = var.network_internal.cidr
})
)
dynamic "network" {
for_each = try([var.network_external.name], [])
content {
name = network.value
}
}
network {
port = openstack_networking_port_v2.worker[count.index].id
}
lifecycle {
ignore_changes = [flavor_name, image_id, user_data]
}
}
resource "local_file" "controlplane" {
count = var.instance_count
content = templatefile("${path.module}/../../templates/worker.yaml.tpl",
merge(var.instance_params, {
name = "${var.instance_name}-${lower(var.region)}-${count.index + 1}"
labels = local.worker_labels
iface = try(var.network_external.name, "") == "" ? "eth0" : "eth1"
nodeSubnets = var.network_internal.cidr
})
)
filename = "_cfgs/${var.instance_name}-${lower(var.region)}-${count.index + 1}.yaml"
file_permission = "0600"
}

View File

@@ -0,0 +1,5 @@
output "worker_endpoints" {
description = "Kubernetes worker endpoint"
value = [for ip in try(openstack_networking_port_v2.worker[*].all_fixed_ips, []) : ip]
}

View File

@@ -0,0 +1,46 @@
variable "region" {
description = "Region"
type = string
}
variable "network_internal" {
description = "Internal network"
}
variable "network_external" {
description = "External network"
default = {}
}
variable "instance_count" {
description = "Instances in region"
type = number
}
variable "instance_name" {
description = "Instance name prefix"
type = string
default = "worker"
}
variable "instance_flavor" {
description = "Instance type"
type = string
}
variable "instance_image" {
description = "Instance image"
type = string
}
variable "instance_params" {
description = "Instance template parameters"
type = map(string)
}
variable "instance_ip_start" {
description = "Instances in region"
type = number
default = 21
}

View File

@@ -0,0 +1,10 @@
terraform {
required_providers {
openstack = {
source = "terraform-provider-openstack/openstack"
version = "~> 1.47.0"
}
}
required_version = ">= 1.0"
}

View File

@@ -20,10 +20,19 @@ machine:
network:
hostname: "${name}"
interfaces:
- interface: ${iface}
dhcp: true
routes:
- network: ${ipv4_local_network}
gateway: ${ipv4_local_gw}
- interface: dummy0
addresses:
- 169.254.2.53/32
- fd00::169:254:2:53/128
extraHostEntries:
- ip: ${lbv4}
aliases:
- ${apiDomain}
sysctls:
net.core.somaxconn: 65535
net.core.netdev_max_backlog: 4096