Skip to content

Commit 1c0097b

Browse files
authored
Merge pull request #136 from pluralsh/marcin/prod-4407-plural-up-aks-upgrades-dont-upgrade-node-pools
fix: Fix Azure node upgrades
2 parents d5e59bd + 7159bca commit 1c0097b

7 files changed

Lines changed: 47 additions & 17 deletions

File tree

setup/stacks/mgmt.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ spec:
3636
labels:
3737
azure.workload.identity/use: "true"
3838
serviceAccount: "stacks"
39+
nodeSelector:
40+
platform.plural.sh/stack-runner: "true"
3941
[[ end ]]
4042
git:
4143
ref: main

terraform/clouds/azure/aks.tf

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,38 @@
11
locals {
22
node_pool_add = {
33
(local.active_node_group) = {
4-
orchestrator_version = var.kubernetes_version,
5-
node_taints = local.upgrading ? ["platform.plural.sh/draining=true:NoSchedule"] : [],
4+
orchestrator_version = local.node_orchestrator_version,
5+
node_taints = local.upgrading ? ["platform.plural.sh/draining=true:NoSchedule"] : [],
6+
node_labels = local.upgrading ? {} : {
7+
"platform.plural.sh/stack-runner" = "true"
8+
},
69
},
7-
(local.drain_node_group) = {
8-
orchestrator_version = var.next_kubernetes_version,
10+
(local.drain_node_group) = {
11+
orchestrator_version = local.next_kubernetes_version,
12+
node_labels = local.upgrading ? {
13+
"platform.plural.sh/stack-runner" = "true"
14+
} : {},
915
}
1016
}
1117

12-
full_node_pools = {for k, v in var.node_pools: k => merge(v, try(lookup(local.node_pool_add, k), {})) if k != local.drain_node_group || local.upgrading == true}
18+
full_node_pools = { for k, v in var.node_pools : k => merge(v, try(lookup(local.node_pool_add, k), {})) if k != local.drain_node_group || local.upgrading == true }
1319
}
1420

15-
1621
module "aks" {
1722
source = "Azure/aks/azurerm"
1823
version = "9.2.0"
1924

20-
kubernetes_version = var.next_kubernetes_version
25+
kubernetes_version = local.next_kubernetes_version
26+
orchestrator_version = local.node_orchestrator_version
2127
cluster_name = var.cluster_name
2228
resource_group_name = local.resource_group.name
2329
prefix = var.cluster_name
2430
os_disk_size_gb = 60
2531
sku_tier = "Standard"
2632
rbac_aad = false
2733
vnet_subnet_id = azurerm_subnet.network.id
28-
node_pools = {for name, pool in local.full_node_pools : name => merge(pool, {name = name, vnet_subnet_id = azurerm_subnet.network.id})}
29-
34+
node_pools = { for name, pool in local.full_node_pools : name => merge(pool, { name = name, vnet_subnet_id = azurerm_subnet.network.id }) }
35+
3036
ebpf_data_plane = "cilium"
3137
network_plugin_mode = "overlay"
3238
network_plugin = "azure"
@@ -35,4 +41,4 @@ module "aks" {
3541

3642
workload_identity_enabled = var.workload_identity_enabled
3743
oidc_issuer_enabled = var.workload_identity_enabled
38-
}
44+
}

terraform/clouds/azure/locals.tf

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,12 @@ locals {
77
rg = var.create_resource_group ? azurerm_resource_group.main[0] : data.azurerm_resource_group.main[0]
88
db_url = format("postgresql://console:%s@%s:5432/console", random_password.password.result, try(azurerm_postgresql_flexible_server.postgres[0].fqdn, ""))
99

10-
upgrading = var.kubernetes_version != var.next_kubernetes_version
10+
next_kubernetes_version = var.next_kubernetes_version != "" ? var.next_kubernetes_version : var.kubernetes_version
11+
upgrading = var.kubernetes_version != local.next_kubernetes_version
1112
split_vsn = [ for i in split(".", var.kubernetes_version): tonumber(i) ]
1213
vsn_even = ((tonumber(local.split_vsn[0]) * 100 + tonumber(local.split_vsn[1])) % 2) == 0
1314
active_node_group = local.vsn_even ? "blue" : "green"
1415
drain_node_group = local.vsn_even ? "green" : "blue"
16+
# AKS cannot upgrade CP and node pools in one apply when both versions change.
17+
node_orchestrator_version = local.upgrading ? var.kubernetes_version : local.next_kubernetes_version
1518
}

terraform/clouds/azure/variables.tf

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@ variable "kubernetes_version" {
1919
}
2020

2121
variable "next_kubernetes_version" {
22-
type = string
23-
default = "1.34"
22+
type = string
23+
default = ""
24+
description = "AKS control plane target; leave empty to match kubernetes_version."
2425
}
2526

2627
variable "create_resource_group" {

terraform/modules/clusters/azure/aks.tf

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,22 @@ module "aks" {
22
source = "Azure/aks/azurerm"
33
version = "9.2.0"
44

5-
kubernetes_version = var.kubernetes_version
5+
kubernetes_version = local.next_kubernetes_version
6+
orchestrator_version = local.node_orchestrator_version
67
cluster_name = var.cluster
78
resource_group_name = data.azurerm_resource_group.default.name
89
prefix = var.cluster
910
os_disk_size_gb = 60
1011
sku_tier = "Standard"
1112
rbac_aad = false
1213
vnet_subnet_id = local.network.sn_subnet_id
13-
node_pools = {for name, pool in var.node_pools : name => merge(pool, {name = name, vnet_subnet_id = local.network.sn_subnet_id})}
14+
node_pools = {
15+
for name, pool in var.node_pools : name => merge(pool, {
16+
name = name
17+
vnet_subnet_id = local.network.sn_subnet_id
18+
orchestrator_version = local.node_orchestrator_version
19+
})
20+
}
1421

1522
ebpf_data_plane = "cilium"
1623
network_plugin_mode = "overlay"
Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
locals {
2-
identity = jsondecode(data.plural_service_context.identity.configuration)
3-
network = jsondecode(data.plural_service_context.network.configuration)
2+
identity = jsondecode(data.plural_service_context.identity.configuration)
3+
network = jsondecode(data.plural_service_context.network.configuration)
4+
# Empty next_kubernetes_version means in sync with kubernetes_version (safe before scaffolds passes both).
5+
next_kubernetes_version = var.next_kubernetes_version != "" ? var.next_kubernetes_version : var.kubernetes_version
6+
upgrading = var.kubernetes_version != local.next_kubernetes_version
7+
# AKS upgrades control plane and node pools in separate applies; see clouds/azure/aks.tf.
8+
node_orchestrator_version = local.upgrading ? var.kubernetes_version : local.next_kubernetes_version
49
}

terraform/modules/clusters/azure/variables.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ variable "kubernetes_version" {
1616
default = "1.34"
1717
}
1818

19+
variable "next_kubernetes_version" {
20+
type = string
21+
default = ""
22+
description = "AKS control plane target; leave empty to match kubernetes_version."
23+
}
24+
1925
variable "resource_group_name" {
2026
type = string
2127
default = "plural"

0 commit comments

Comments
 (0)