From 90885e49cfdf2f56bb2d50a1c93563af376d078e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Petazzoni?= Date: Tue, 4 Jan 2022 18:51:35 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9E=95=20Add=20Terraform=20configurations=20?= =?UTF-8?q?for=20GKE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prepare-tf/main.tf | 2 +- prepare-tf/modules/googlecloud/main.tf | 25 +++++++++ prepare-tf/modules/googlecloud/outputs.tf | 31 +++++++++++ prepare-tf/modules/googlecloud/providers.tf | 8 +++ prepare-tf/modules/googlecloud/variables.tf | 51 +++++++++++++++++++ .../oraclecloud/{provider.tf => providers.tf} | 0 6 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 prepare-tf/modules/googlecloud/main.tf create mode 100644 prepare-tf/modules/googlecloud/outputs.tf create mode 100644 prepare-tf/modules/googlecloud/providers.tf create mode 100644 prepare-tf/modules/googlecloud/variables.tf rename prepare-tf/modules/oraclecloud/{provider.tf => providers.tf} (100%) diff --git a/prepare-tf/main.tf b/prepare-tf/main.tf index b8b326b0..91d8337b 100644 --- a/prepare-tf/main.tf +++ b/prepare-tf/main.tf @@ -1,5 +1,5 @@ module "clusters" { - source = "./modules/linode" + source = "./modules/oraclecloud" for_each = local.clusters cluster_name = each.value.cluster_name min_nodes_per_pool = var.min_nodes_per_pool diff --git a/prepare-tf/modules/googlecloud/main.tf b/prepare-tf/modules/googlecloud/main.tf new file mode 100644 index 00000000..8c25804e --- /dev/null +++ b/prepare-tf/modules/googlecloud/main.tf @@ -0,0 +1,25 @@ +resource "google_container_cluster" "_" { + name = var.cluster_name + project = "prepare-tf" + location = "europe-north1-a" + min_master_version = var.k8s_version + initial_node_count = var.min_nodes_per_pool + #max_size = max(var.min_nodes_per_pool, var.max_nodes_per_pool) + #autoscaling = true + #autohealing = true + + node_config { + tags = var.common_tags + machine_type = local.node_type + } + + # This is not strictly necessary. + # We'll see if we end up using it. + # (If it is removed, make sure to also remove the corresponding + # key+cert variables from outputs.tf!) + master_auth { + client_certificate_config { + issue_client_certificate = true + } + } +} diff --git a/prepare-tf/modules/googlecloud/outputs.tf b/prepare-tf/modules/googlecloud/outputs.tf new file mode 100644 index 00000000..b5099bdb --- /dev/null +++ b/prepare-tf/modules/googlecloud/outputs.tf @@ -0,0 +1,31 @@ +data "google_client_config" "_" {} + +output "kubeconfig" { + value = <<-EOT + apiVersion: v1 + kind: Config + current-context: ${google_container_cluster._.name} + clusters: + - name: ${google_container_cluster._.name} + cluster: + server: https://${google_container_cluster._.endpoint} + certificate-authority-data: ${google_container_cluster._.master_auth[0].cluster_ca_certificate} + contexts: + - name: ${google_container_cluster._.name} + context: + cluster: ${google_container_cluster._.name} + user: client-token + users: + - name: client-cert + user: + client-key-data: ${google_container_cluster._.master_auth[0].client_key} + client-certificate-data: ${google_container_cluster._.master_auth[0].client_certificate} + - name: client-token + user: + token: ${data.google_client_config._.access_token} + EOT +} + +output "cluster_id" { + value = google_container_cluster._.id +} diff --git a/prepare-tf/modules/googlecloud/providers.tf b/prepare-tf/modules/googlecloud/providers.tf new file mode 100644 index 00000000..53fca6a2 --- /dev/null +++ b/prepare-tf/modules/googlecloud/providers.tf @@ -0,0 +1,8 @@ +terraform { + required_providers { + google = { + source = "hashicorp/google" + version = "4.5.0" + } + } +} diff --git a/prepare-tf/modules/googlecloud/variables.tf b/prepare-tf/modules/googlecloud/variables.tf new file mode 100644 index 00000000..02e20386 --- /dev/null +++ b/prepare-tf/modules/googlecloud/variables.tf @@ -0,0 +1,51 @@ +variable "cluster_name" { + type = string + default = "deployed-with-terraform" +} + +variable "common_tags" { + type = list(string) + default = [] +} + +variable "node_size" { + type = string + default = "M" +} + +variable "min_nodes_per_pool" { + type = number + default = 2 +} + +variable "max_nodes_per_pool" { + type = number + default = 5 +} + +# FIXME +variable "enable_arm_pool" { + type = bool + default = false +} + +variable "node_types" { + type = map(string) + default = { + "S" = "e2-small" + "M" = "e2-medium" + "L" = "e2-standard-2" + } +} + +locals { + node_type = var.node_types[var.node_size] +} + +# See supported versions with: +# gcloud container get-server-config --region=europe-north1 '--format=flattened(channels)' +# But it's also possible to just specify e.g. "1.20" and it figures it out. +variable "k8s_version" { + type = string + default = "1.21" +} diff --git a/prepare-tf/modules/oraclecloud/provider.tf b/prepare-tf/modules/oraclecloud/providers.tf similarity index 100% rename from prepare-tf/modules/oraclecloud/provider.tf rename to prepare-tf/modules/oraclecloud/providers.tf