Skip to content

Commit 8ed1b92

Browse files
authored
Added gke (#15)
1 parent f5f04b8 commit 8ed1b92

File tree

4 files changed

+152
-0
lines changed

4 files changed

+152
-0
lines changed
27 KB
Loading

cicd/github/gcp/terraform/gke.tf

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
module "gke_auth" {
2+
source = "terraform-google-modules/kubernetes-engine/google//modules/auth"
3+
version = "24.1.0"
4+
depends_on = [module.gke]
5+
project_id = var.project_id
6+
location = module.gke.location
7+
cluster_name = module.gke.name
8+
}
9+
10+
resource "local_file" "kubeconfig" {
11+
content = module.gke_auth.kubeconfig_raw
12+
filename = "kubeconfig-${var.env_name}"
13+
}
14+
15+
module "gcp-network" {
16+
source = "terraform-google-modules/network/google"
17+
version = "6.0.0"
18+
project_id = var.project_id
19+
network_name = "${var.network}-${var.env_name}"
20+
21+
subnets = [
22+
{
23+
subnet_name = "${var.subnetwork}-${var.env_name}"
24+
subnet_ip = var.main_subnet
25+
subnet_region = var.region
26+
},
27+
]
28+
29+
secondary_ranges = {
30+
"${var.subnetwork}-${var.env_name}" = [
31+
{
32+
range_name = var.ip_range_pods_name
33+
ip_cidr_range = var.ip_range_pods
34+
},
35+
{
36+
range_name = var.ip_range_services_name
37+
ip_cidr_range = var.ip_range_services
38+
},
39+
]
40+
}
41+
}
42+
43+
data "google_client_config" "default" {}
44+
45+
provider "kubernetes" {
46+
host = "https://${module.gke.endpoint}"
47+
token = data.google_client_config.default.access_token
48+
cluster_ca_certificate = base64decode(module.gke.ca_certificate)
49+
}
50+
51+
module "gke" {
52+
source = "terraform-google-modules/kubernetes-engine/google//modules/private-cluster"
53+
version = "24.1.0"
54+
project_id = var.project_id
55+
name = "${var.cluster_name}-${var.env_name}"
56+
regional = true
57+
region = var.region
58+
network = module.gcp-network.network_name
59+
subnetwork = module.gcp-network.subnets_names[0]
60+
ip_range_pods = var.ip_range_pods_name
61+
ip_range_services = var.ip_range_services_name
62+
63+
node_pools = [
64+
{
65+
name = var.node_pool_name
66+
machine_type = var.node_machine_type
67+
node_locations = var.node_locations
68+
min_count = var.min_nodes
69+
max_count = var.max_nodes
70+
disk_size_gb = var.node_disk_size
71+
},
72+
]
73+
}

cicd/github/gcp/terraform/output.tf

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
output "cluster_name" {
2+
description = "Cluster name"
3+
value = module.gke.name
4+
}

cicd/github/gcp/terraform/variables.tf

+75
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,79 @@ variable "github_oidc_workload_identity_pool_provider_url" {
5353
description = "The github oidc provider URL. Will also be used as the name of the identity provider"
5454
type = string
5555
default = "token.actions.githubusercontent.com"
56+
}
57+
58+
variable "cluster_name" {
59+
description = "The name for the GKE cluster"
60+
default = "learnk8s-cluster"
61+
}
62+
63+
variable "env_name" {
64+
description = "The environment for the GKE cluster"
65+
default = "prod"
66+
}
67+
68+
variable "network" {
69+
description = "The VPC network created to host the cluster in"
70+
default = "gke-network"
71+
}
72+
73+
variable "subnetwork" {
74+
description = "The subnetwork created to host the cluster in"
75+
default = "gke-subnet"
76+
}
77+
78+
variable "ip_range_pods_name" {
79+
description = "The secondary ip range to use for pods"
80+
default = "ip-range-pods"
81+
}
82+
83+
variable "ip_range_pods" {
84+
description = "IP range for pods"
85+
default = "10.20.0.0/16"
86+
}
87+
88+
variable "ip_range_services_name" {
89+
description = "The secondary ip range to use for services"
90+
default = "ip-range-services"
91+
}
92+
93+
variable "ip_range_services" {
94+
description = "IP range for services"
95+
default = "10.30.0.0/16"
96+
}
97+
98+
variable "node_machine_type" {
99+
description = "The machine type for node pool"
100+
default = "e2-medium"
101+
}
102+
103+
variable "node_locations" {
104+
description = "Comma seperated list of locations"
105+
default = "us-east1-b,us-east1-c,us-east1-d"
106+
}
107+
108+
variable "node_pool_name" {
109+
description = "Name of node pool"
110+
default = "node-pool"
111+
}
112+
113+
variable "min_nodes" {
114+
description = "Minimum number of nodes"
115+
default = 1
116+
}
117+
118+
variable "max_nodes" {
119+
description = "Maximum number of nodes"
120+
default = 2
121+
}
122+
123+
variable "node_disk_size" {
124+
description = "Size of node disk in GB"
125+
default = 30
126+
}
127+
128+
variable "main_subnet" {
129+
description = "Main subnet for cluster"
130+
default = "10.10.0.0/16"
56131
}

0 commit comments

Comments
 (0)