Skip to content

Commit 1d73e9d

Browse files
Fix issue with regional cluster roll outs causing version skews
Regional clusters are created using the newest version of GKE that is available across all zones in which the masters live. When a GKE version roll out occurs, the available versions across the zones can become skewed for zonal clusters with version x.y.z-gke.a being the only available zonal version in one zone but version x.y[+1].z[+1]-gke.a[+1] being the only zonal version available in another zone. The Terraform module only checks for the version available in the first zone returned by a call to the google_compute_zones data resource. Consequently, the module will fail to create a regional cluster during a roll out due to the version available in that zone not being available across all the zones for regional clusters.
1 parent c105646 commit 1d73e9d

File tree

18 files changed

+101
-35
lines changed

18 files changed

+101
-35
lines changed

auth.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,4 @@ provider "kubernetes" {
3131
host = "https://${local.cluster_endpoint}"
3232
token = "${data.google_client_config.default.access_token}"
3333
cluster_ca_certificate = "${base64decode(local.cluster_ca_certificate)}"
34-
}
34+
}

autogen/cluster_regional.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ resource "google_container_cluster" "primary" {
3131

3232
network = "${replace(data.google_compute_network.gke_network.self_link, "https://www.googleapis.com/compute/v1/", "")}"
3333
subnetwork = "${replace(data.google_compute_subnetwork.gke_subnetwork.self_link, "https://www.googleapis.com/compute/v1/", "")}"
34-
min_master_version = "${local.kubernetes_version}"
34+
min_master_version = "${local.kubernetes_version_regional}"
3535

3636
logging_service = "${var.logging_service}"
3737
monitoring_service = "${var.monitoring_service}"
@@ -104,7 +104,7 @@ resource "google_container_node_pool" "pools" {
104104
project = "${var.project_id}"
105105
region = "${var.region}"
106106
cluster = "${var.name}"
107-
version = "${lookup(var.node_pools[count.index], "auto_upgrade", false) ? "" : lookup(var.node_pools[count.index], "version", local.node_version)}"
107+
version = "${lookup(var.node_pools[count.index], "auto_upgrade", false) ? "" : lookup(var.node_pools[count.index], "version", local.node_version_regional)}"
108108
initial_node_count = "${lookup(var.node_pools[count.index], "initial_node_count", lookup(var.node_pools[count.index], "min_count", 1))}"
109109

110110
autoscaling {

autogen/cluster_zonal.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ resource "google_container_cluster" "zonal_primary" {
3131

3232
network = "${replace(data.google_compute_network.gke_network.self_link, "https://www.googleapis.com/compute/v1/", "")}"
3333
subnetwork = "${replace(data.google_compute_subnetwork.gke_subnetwork.self_link, "https://www.googleapis.com/compute/v1/", "")}"
34-
min_master_version = "${local.kubernetes_version}"
34+
min_master_version = "${local.kubernetes_version_zonal}"
3535

3636
logging_service = "${var.logging_service}"
3737
monitoring_service = "${var.monitoring_service}"
@@ -104,7 +104,7 @@ resource "google_container_node_pool" "zonal_pools" {
104104
project = "${var.project_id}"
105105
zone = "${var.zones[0]}"
106106
cluster = "${var.name}"
107-
version = "${lookup(var.node_pools[count.index], "auto_upgrade", false) ? "" : lookup(var.node_pools[count.index], "version", local.node_version)}"
107+
version = "${lookup(var.node_pools[count.index], "auto_upgrade", false) ? "" : lookup(var.node_pools[count.index], "version", local.node_version_zonal)}"
108108
initial_node_count = "${lookup(var.node_pools[count.index], "initial_node_count", lookup(var.node_pools[count.index], "min_count", 1))}"
109109

110110
autoscaling {

autogen/main.tf

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,12 @@ resource "random_shuffle" "available_zones" {
3131
}
3232

3333
locals {
34-
kubernetes_version = "${var.kubernetes_version != "latest" ? var.kubernetes_version : data.google_container_engine_versions.region.latest_node_version}"
35-
node_version = "${var.node_version != "" ? var.node_version : local.kubernetes_version}"
36-
custom_kube_dns_config = "${length(keys(var.stub_domains)) > 0 ? true : false}"
37-
network_project_id = "${var.network_project_id != "" ? var.network_project_id : var.project_id}"
34+
kubernetes_version_regional = "${var.kubernetes_version != "latest" ? var.kubernetes_version : data.google_container_engine_versions.region.latest_master_version}"
35+
kubernetes_version_zonal = "${var.kubernetes_version != "latest" ? var.kubernetes_version : data.google_container_engine_versions.zone.latest_master_version}"
36+
node_version_regional = "${var.node_version != "" && var.regional ? var.node_version : local.kubernetes_version_regional}"
37+
node_version_zonal = "${var.node_version != "" && !var.regional ? var.node_version : local.kubernetes_version_zonal}"
38+
custom_kube_dns_config = "${length(keys(var.stub_domains)) > 0 ? true : false}"
39+
network_project_id = "${var.network_project_id != "" ? var.network_project_id : var.project_id}"
3840

3941
cluster_type = "${var.regional ? "regional" : "zonal"}"
4042

@@ -149,7 +151,17 @@ locals {
149151
Get available container engine versions
150152
*****************************************/
151153
data "google_container_engine_versions" "region" {
152-
provider = "{% if private_cluster %}google-beta{%else %}google{% endif %}"
153-
zone = "${data.google_compute_zones.available.names[0]}"
154+
provider = "google-beta"
155+
region = "${var.region}"
156+
project = "${var.project_id}"
157+
}
158+
159+
data "google_container_engine_versions" "zone" {
160+
provider = "google-beta"
161+
// Work around to prevent a lack of zone declaration from causing regional cluster creation from erroring out due to error
162+
//
163+
// data.google_container_engine_versions.zone: Cannot determine zone: set in this resource, or set provider-level zone.
164+
//
165+
zone = "${var.zones[0] == "" ? data.google_compute_zones.available.names[0] : var.zones[0]}"
154166
project = "${var.project_id}"
155167
}

cluster_regional.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ resource "google_container_cluster" "primary" {
3131

3232
network = "${replace(data.google_compute_network.gke_network.self_link, "https://www.googleapis.com/compute/v1/", "")}"
3333
subnetwork = "${replace(data.google_compute_subnetwork.gke_subnetwork.self_link, "https://www.googleapis.com/compute/v1/", "")}"
34-
min_master_version = "${local.kubernetes_version}"
34+
min_master_version = "${local.kubernetes_version_regional}"
3535

3636
logging_service = "${var.logging_service}"
3737
monitoring_service = "${var.monitoring_service}"
@@ -97,7 +97,7 @@ resource "google_container_node_pool" "pools" {
9797
project = "${var.project_id}"
9898
region = "${var.region}"
9999
cluster = "${var.name}"
100-
version = "${lookup(var.node_pools[count.index], "auto_upgrade", false) ? "" : lookup(var.node_pools[count.index], "version", local.node_version)}"
100+
version = "${lookup(var.node_pools[count.index], "auto_upgrade", false) ? "" : lookup(var.node_pools[count.index], "version", local.node_version_regional)}"
101101
initial_node_count = "${lookup(var.node_pools[count.index], "initial_node_count", lookup(var.node_pools[count.index], "min_count", 1))}"
102102

103103
autoscaling {

cluster_zonal.tf

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ resource "google_container_cluster" "zonal_primary" {
3131

3232
network = "${replace(data.google_compute_network.gke_network.self_link, "https://www.googleapis.com/compute/v1/", "")}"
3333
subnetwork = "${replace(data.google_compute_subnetwork.gke_subnetwork.self_link, "https://www.googleapis.com/compute/v1/", "")}"
34-
min_master_version = "${local.kubernetes_version}"
34+
min_master_version = "${local.kubernetes_version_zonal}"
3535

3636
logging_service = "${var.logging_service}"
3737
monitoring_service = "${var.monitoring_service}"
@@ -97,7 +97,7 @@ resource "google_container_node_pool" "zonal_pools" {
9797
project = "${var.project_id}"
9898
zone = "${var.zones[0]}"
9999
cluster = "${var.name}"
100-
version = "${lookup(var.node_pools[count.index], "auto_upgrade", false) ? "" : lookup(var.node_pools[count.index], "version", local.node_version)}"
100+
version = "${lookup(var.node_pools[count.index], "auto_upgrade", false) ? "" : lookup(var.node_pools[count.index], "version", local.node_version_zonal)}"
101101
initial_node_count = "${lookup(var.node_pools[count.index], "initial_node_count", lookup(var.node_pools[count.index], "min_count", 1))}"
102102

103103
autoscaling {
@@ -107,7 +107,7 @@ resource "google_container_node_pool" "zonal_pools" {
107107

108108
management {
109109
auto_repair = "${lookup(var.node_pools[count.index], "auto_repair", true)}"
110-
auto_upgrade = "${lookup(var.node_pools[count.index], "auto_upgrade", true)}"
110+
auto_upgrade = "${lookup(var.node_pools[count.index], "auto_upgrade", false)}"
111111
}
112112

113113
node_config {

examples/deploy_service/main.tf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ provider "google" {
2424
version = "~> 1.20"
2525
}
2626

27+
provider "google-beta" {
28+
credentials = "${file(var.credentials_path)}"
29+
region = "${var.region}"
30+
}
31+
2732
provider "kubernetes" {
2833
load_config_file = false
2934
host = "https://${module.gke.endpoint}"

examples/node_pool/main.tf

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ provider "google" {
2424
region = "${var.region}"
2525
}
2626

27+
provider "google-beta" {
28+
credentials = "${file(var.credentials_path)}"
29+
region = "${var.region}"
30+
}
31+
2732
module "gke" {
2833
source = "../../"
2934
project_id = "${var.project_id}"
@@ -43,6 +48,7 @@ module "gke" {
4348
min_count = 1
4449
max_count = 2
4550
service_account = "${var.compute_engine_service_account}"
51+
auto_upgrade = true
4652
},
4753
{
4854
name = "pool-02"
@@ -53,7 +59,6 @@ module "gke" {
5359
disk_type = "pd-standard"
5460
image_type = "COS"
5561
auto_repair = false
56-
auto_upgrade = false
5762
service_account = "${var.compute_engine_service_account}"
5863
},
5964
]

examples/shared_vpc/main.tf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ provider "google" {
2424
region = "${var.region}"
2525
}
2626

27+
provider "google-beta" {
28+
credentials = "${file(var.credentials_path)}"
29+
region = "${var.region}"
30+
}
31+
2732
module "gke" {
2833
source = "../../"
2934
project_id = "${var.project_id}"

examples/simple_regional/main.tf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ provider "google" {
2323
region = "${var.region}"
2424
}
2525

26+
provider "google-beta" {
27+
credentials = "${file(var.credentials_path)}"
28+
region = "${var.region}"
29+
}
30+
2631
module "gke" {
2732
source = "../../"
2833
project_id = "${var.project_id}"

0 commit comments

Comments
 (0)