From 655a3764b9b8d1723c1ec5c78eb5b32b692c0344 Mon Sep 17 00:00:00 2001 From: Alexander Apalikov Date: Mon, 20 Apr 2020 14:13:56 +0300 Subject: [PATCH 1/3] Terraform: update cluster version, use data source Add Kubernetes version prefix parameter. `google_container_engine_versions` allows to select proper node and master version which applicable for every zone in the region. --- build/includes/terraform.mk | 6 +++++- build/terraform/gke/module.tf | 16 ++++++++++------ examples/terraform-submodules/gke/module.tf | 18 +++++++++++------- install/terraform/modules/gke/cluster.tf | 14 +++++++++++--- install/terraform/modules/gke/variables.tf | 13 +++++++------ .../en/docs/Installation/Terraform/gke.md | 1 + 6 files changed, 45 insertions(+), 23 deletions(-) diff --git a/build/includes/terraform.mk b/build/includes/terraform.mk index 7f4b8b89f9..fb41eecb51 100644 --- a/build/includes/terraform.mk +++ b/build/includes/terraform.mk @@ -81,5 +81,9 @@ endif GCP_CLUSTER_NAME=$(GCP_TF_CLUSTER_NAME) $(MAKE) gcloud-auth-cluster gcloud-terraform-destroy-cluster: +ifndef GCP_PROJECT + $(eval GCP_PROJECT=$(shell sh -c "gcloud config get-value project 2> /dev/null")) +endif $(DOCKER_RUN) bash -c 'cd $(mount_path)/build/terraform/gke && \ - terraform destroy -target module.helm_agones.helm_release.agones -auto-approve && sleep 60 && terraform destroy -auto-approve' + terraform destroy -var project=$(GCP_PROJECT) -target module.helm_agones.helm_release.agones -auto-approve && sleep 60 && \ + terraform destroy -var project=$(GCP_PROJECT) -auto-approve' diff --git a/build/terraform/gke/module.tf b/build/terraform/gke/module.tf index a99474cb52..cc45b154d0 100644 --- a/build/terraform/gke/module.tf +++ b/build/terraform/gke/module.tf @@ -97,17 +97,21 @@ variable "feature_gates" { default = "" } +variable "kubernetes_version" { + default = "1.15" +} module "gke_cluster" { source = "../../../install/terraform/modules/gke" cluster = { - "name" = var.name - "zone" = var.zone - "machineType" = var.machine_type - "initialNodeCount" = var.node_count - "project" = var.project - "network" = var.network + "name" = var.name + "zone" = var.zone + "machineType" = var.machine_type + "initialNodeCount" = var.node_count + "project" = var.project + "network" = var.network + "kubernetesVersion" = var.kubernetes_version } } diff --git a/examples/terraform-submodules/gke/module.tf b/examples/terraform-submodules/gke/module.tf index 48a46304e7..82d74b7922 100644 --- a/examples/terraform-submodules/gke/module.tf +++ b/examples/terraform-submodules/gke/module.tf @@ -46,7 +46,6 @@ variable "machine_type" { variable "node_count" { default = "4" } - variable "zone" { default = "us-west1-c" description = "The GCP zone to create the cluster in" @@ -65,6 +64,10 @@ variable "feature_gates" { default = "" } +variable "kubernetes_version" { + default = "1.15" +} + module "gke_cluster" { // *************************************************************************************************** // Update ?ref= to the agones release you are installing. For example, ?ref=release-1.3.0 corresponds @@ -73,12 +76,13 @@ module "gke_cluster" { source = "git::https://github.com/googleforgames/agones.git//install/terraform/modules/gke/?ref=master" cluster = { - "name" = var.name - "zone" = var.zone - "machineType" = var.machine_type - "initialNodeCount" = var.node_count - "project" = var.project - "network" = var.network + "name" = var.name + "zone" = var.zone + "machineType" = var.machine_type + "initialNodeCount" = var.node_count + "project" = var.project + "network" = var.network + "kubernetesVersion" = var.kubernetes_version } } diff --git a/install/terraform/modules/gke/cluster.tf b/install/terraform/modules/gke/cluster.tf index 7033ac3c0c..d3ba17d679 100644 --- a/install/terraform/modules/gke/cluster.tf +++ b/install/terraform/modules/gke/cluster.tf @@ -19,6 +19,12 @@ terraform { data "google_client_config" "default" {} +data "google_container_engine_versions" "kubernetes" { + project = var.cluster["project"] + location = var.cluster["zone"] + version_prefix = var.cluster["kubernetesVersion"] +} + # echo command used for debugging purpose # Run `terraform taint null_resource.test-setting-variables` before second execution resource "null_resource" "test-setting-variables" { @@ -27,9 +33,9 @@ resource "null_resource" "test-setting-variables" { ${format("echo Current variables set as following - name: %s, project: %s, machineType: %s, initialNodeCount: %s, network: %s, zone: %s", var.cluster["name"], var.cluster["project"], var.cluster["machineType"], var.cluster["initialNodeCount"], var.cluster["network"], - var.cluster["zone"])} +var.cluster["zone"])} EOT - } +} } resource "google_container_cluster" "primary" { @@ -38,7 +44,9 @@ resource "google_container_cluster" "primary" { project = var.cluster["project"] network = var.cluster["network"] - min_master_version = "1.14" + min_master_version = data.google_container_engine_versions.kubernetes.latest_master_version + + node_version = data.google_container_engine_versions.kubernetes.latest_node_version node_pool { name = "default" diff --git a/install/terraform/modules/gke/variables.tf b/install/terraform/modules/gke/variables.tf index 5ba0d1f10b..4ce17b3aaf 100644 --- a/install/terraform/modules/gke/variables.tf +++ b/install/terraform/modules/gke/variables.tf @@ -25,11 +25,12 @@ variable "cluster" { type = map default = { - "zone" = "us-west1-c" - "name" = "test-cluster" - "machineType" = "n1-standard-4" - "initialNodeCount" = "4" - "project" = "agones" - "network" = "default" + "zone" = "us-west1-c" + "name" = "test-cluster" + "machineType" = "n1-standard-4" + "initialNodeCount" = "4" + "project" = "agones" + "network" = "default" + "kubernetesVersion" = "1.15" } } diff --git a/site/content/en/docs/Installation/Terraform/gke.md b/site/content/en/docs/Installation/Terraform/gke.md index 8fb026d19f..db7a062a5d 100644 --- a/site/content/en/docs/Installation/Terraform/gke.md +++ b/site/content/en/docs/Installation/Terraform/gke.md @@ -92,6 +92,7 @@ Configurable parameters: - network - the name of the VPC network you want your cluster and firewall rules to be connected to (default is "default") - log_level - possible values: Fatal, Error, Warn, Info, Debug (default is "info") - feature_gates - a list of alpha and beta version features to enable. For example, "PlayerTracking=true&ContainerPortAllocation=true" +- kubernetes_version - a Kubernetes version of the GKE cluster {{% alert title="Warning" color="warning"%}} On the lines that read `source = "git::https://github.com/googleforgames/agones.git//install/terraform/modules/gke/?ref=master"` From 4576de77b9ad686a5e3aebfddf189fc8697b2975 Mon Sep 17 00:00:00 2001 From: Alexander Apalikov Date: Tue, 5 May 2020 01:04:30 +0300 Subject: [PATCH 2/3] Add locals and lookup to handle missing keys Avoid situation when missing one key could break deployment. --- examples/terraform-submodules/gke/module.tf | 17 +++----- install/terraform/modules/gke/cluster.tf | 42 ++++++++++++------- .../en/docs/Installation/Terraform/gke.md | 3 +- 3 files changed, 34 insertions(+), 28 deletions(-) diff --git a/examples/terraform-submodules/gke/module.tf b/examples/terraform-submodules/gke/module.tf index 82d74b7922..cca6939a36 100644 --- a/examples/terraform-submodules/gke/module.tf +++ b/examples/terraform-submodules/gke/module.tf @@ -64,10 +64,6 @@ variable "feature_gates" { default = "" } -variable "kubernetes_version" { - default = "1.15" -} - module "gke_cluster" { // *************************************************************************************************** // Update ?ref= to the agones release you are installing. For example, ?ref=release-1.3.0 corresponds @@ -76,13 +72,12 @@ module "gke_cluster" { source = "git::https://github.com/googleforgames/agones.git//install/terraform/modules/gke/?ref=master" cluster = { - "name" = var.name - "zone" = var.zone - "machineType" = var.machine_type - "initialNodeCount" = var.node_count - "project" = var.project - "network" = var.network - "kubernetesVersion" = var.kubernetes_version + "name" = var.name + "zone" = var.zone + "machineType" = var.machine_type + "initialNodeCount" = var.node_count + "project" = var.project + "network" = var.network } } diff --git a/install/terraform/modules/gke/cluster.tf b/install/terraform/modules/gke/cluster.tf index d3ba17d679..630ea11664 100644 --- a/install/terraform/modules/gke/cluster.tf +++ b/install/terraform/modules/gke/cluster.tf @@ -19,10 +19,22 @@ terraform { data "google_client_config" "default" {} +# A list of all parameters used in interpolation var.cluster +# Set values to default if not key was not set in original map +locals { + project = lookup(var.cluster, "project", "agones") + zone = lookup(var.cluster, "zone", "us-west1-c") + name = lookup(var.cluster, "name", "test-cluster") + machineType = lookup(var.cluster, "machineType", "n1-standard-4") + initialNodeCount = lookup(var.cluster, "initialNodeCount", "4") + network = lookup(var.cluster, "network", "default") + kubernetesVersion = lookup(var.cluster, "kubernetesVersion", "1.15") +} + data "google_container_engine_versions" "kubernetes" { - project = var.cluster["project"] - location = var.cluster["zone"] - version_prefix = var.cluster["kubernetesVersion"] + project = local.project + location = local.zone + version_prefix = local.kubernetesVersion } # echo command used for debugging purpose @@ -31,18 +43,18 @@ resource "null_resource" "test-setting-variables" { provisioner "local-exec" { command = < Date: Tue, 12 May 2020 14:51:53 +0300 Subject: [PATCH 3/3] Remove latest version to default version selection Move data source to select versions of GKE into a separate review. --- install/terraform/modules/gke/cluster.tf | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/install/terraform/modules/gke/cluster.tf b/install/terraform/modules/gke/cluster.tf index 630ea11664..181447c7c4 100644 --- a/install/terraform/modules/gke/cluster.tf +++ b/install/terraform/modules/gke/cluster.tf @@ -31,12 +31,6 @@ locals { kubernetesVersion = lookup(var.cluster, "kubernetesVersion", "1.15") } -data "google_container_engine_versions" "kubernetes" { - project = local.project - location = local.zone - version_prefix = local.kubernetesVersion -} - # echo command used for debugging purpose # Run `terraform taint null_resource.test-setting-variables` before second execution resource "null_resource" "test-setting-variables" { @@ -56,9 +50,7 @@ resource "google_container_cluster" "primary" { project = local.project network = local.network - min_master_version = data.google_container_engine_versions.kubernetes.latest_master_version - - node_version = data.google_container_engine_versions.kubernetes.latest_node_version + min_master_version = local.kubernetesVersion node_pool { name = "default"