Skip to content

Commit 8af68be

Browse files
committed
Merge remote-tracking branch 'origin/marcin/prod-3721-implement-node-bluegreen-for-mgmt-clusters' into marcin/prod-3721-implement-node-bluegreen-for-mgmt-clusters
2 parents 8f8616f + 5268092 commit 8af68be

3 files changed

Lines changed: 63 additions & 8 deletions

File tree

terraform/clouds/gcp/gke.tf

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,34 @@
1+
locals {
2+
node_pool_add = {
3+
(local.active_node_group) = {
4+
cluster_version = var.kubernetes_version,
5+
},
6+
(local.drain_node_group) = {
7+
cluster_version = var.next_kubernetes_version,
8+
}
9+
}
10+
11+
full_node_pools = {
12+
for k, v in var.node_pools : k => merge(v, try(lookup(local.node_pool_add, k), {}))
13+
if k != local.drain_node_group || local.upgrading == true
14+
}
15+
16+
node_pool_taints_add = {
17+
(local.active_node_group) = local.upgrading ?
18+
[{ key = "platform.plural.sh/pending", value = "upgrade", effect = "NO_SCHEDULE" }] : [],
19+
}
20+
21+
full_node_pools_taints = {
22+
for k, v in var.node_pools_taints : k => concat(v, try(lookup(local.node_pool_taints_add, k), []))
23+
if k != local.drain_node_group || local.upgrading == true
24+
}
25+
}
26+
127
module "gke" {
228
source = "terraform-google-modules/kubernetes-engine/google"
329
version = "~> 33.0"
430

5-
kubernetes_version = var.kubernetes_version
31+
kubernetes_version = var.next_kubernetes_version
632
project_id = var.project_id
733
name = var.cluster_name
834
regional = true
@@ -14,8 +40,8 @@ module "gke" {
1440
ip_range_services = var.ip_range_services_name
1541
create_service_account = true
1642
deletion_protection = var.deletion_protection
17-
node_pools = var.node_pools
18-
node_pools_taints = var.node_pools_taints
43+
node_pools = [for k, v in local.full_node_pools : merge(v, { name = k })]
44+
node_pools_taints = local.full_node_pools_taints
1945
node_pools_labels = var.node_pools_labels
2046
node_pools_tags = var.node_pools_tags
2147

@@ -27,6 +53,5 @@ module "gke" {
2753
google_project_service.iam,
2854
google_project_service.storage,
2955
google_project_service.dns,
30-
# local.db_created,
3156
]
3257
}

terraform/clouds/gcp/locals.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,10 @@ locals {
44
db_url = format("postgresql://console:%s@%s:5432/console", random_password.password.result, try(module.pg[0].private_ip_address, ""))
55
network_name = format("%s-%s", var.cluster_name, var.network)
66
subnetwork_name = format("%s-%s", var.cluster_name, var.subnetwork)
7+
8+
upgrading = var.kubernetes_version != var.next_kubernetes_version
9+
split_vsn = [for i in split(".", var.kubernetes_version) : tonumber(i)]
10+
vsn_even = ((tonumber(local.split_vsn[0]) * 100 + tonumber(local.split_vsn[1])) % 2) == 0
11+
active_node_group = local.vsn_even ? "blue" : "green"
12+
drain_node_group = local.vsn_even ? "green" : "blue"
713
}

terraform/clouds/gcp/variables.tf

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,24 +18,48 @@ variable "kubernetes_version" {
1818
default = "1.32"
1919
}
2020

21+
variable "next_kubernetes_version" {
22+
type = string
23+
default = "1.32"
24+
}
25+
2126
variable "node_pools" {
2227
type = list(any)
23-
default = [{ name = "default-node-pool", machine_type = "n2-standard-2" }]
28+
default = [
29+
{
30+
name = "green",
31+
machine_type = "n2-standard-2"
32+
min_count = 0
33+
initial_node_count = 3
34+
max_count = 10
35+
# Must be set to false to allow for blue-green deployments
36+
auto_upgrade = false
37+
},
38+
{
39+
name = "blue"
40+
machine_type = "n2-standard-2"
41+
min_count = 0
42+
initial_node_count = 3
43+
max_count = 10
44+
# Must be set to false to allow for blue-green deployments
45+
auto_upgrade = false
46+
}
47+
]
2448
}
2549

2650
variable "node_pools_taints" {
2751
type = map(list(object({ key = string, value = string, effect = string })))
28-
default = { "all" : [], "default-node-pool" : [] }
52+
default = { "all" : [], "green" : [], "blue" : [] }
2953
}
3054

3155
variable "node_pools_labels" {
3256
type = map(map(string))
33-
default = { "all" : {}, "default-node-pool" : {} }
57+
default = { "all" : {}, "green" : {}, "blue" : {} }
3458
}
3559

3660
variable "node_pools_tags" {
3761
type = map(list(string))
38-
default = { "all" : [], "default-node-pool" : [] }
62+
default = { "all" : [], "green" : [], "blue" : [] }
3963
}
4064

4165
variable "project_id" {

0 commit comments

Comments
 (0)