# simple-template ## What is created ty thah template This example is using local state. You need an empty google project for tests. 1. VPC network with one subnet 2. GKE cluster with an external endpoint and services network (be careful with that!) 3. Workload nodepool with one node 3. Namespace `this-is-demo-cluster` ## How to use the code 1. Create a `terraform.tfvars` file with a few variables ```shell project = "your-gcp-project" ``` `region`, `zone` and `environment_name` are optional 2. Create the cluster All commands will be applied via Terraform 1.8.0 or via OpenTofu, the same version. I use alias `t` for the commands. ```shell t init t apply ``` 3. Get the credentials for the new cluster (configure kubeconfig) You can see all useful commands and links in the output: ```shell t output ``` There is a manual command: ```shell gcloud container clusters get-credentials $(t output -raw kubernetes_cluster_name) --zone $(t output -raw zone) --project $(t output -raw project) ``` Or just use `./get-credentials.sh` 4. Destroy all resources ```shell t destroy ``` ## Additional info Some manual tests. ### terraform ✅ create cluster
✅ `./get-credentials.sh`
✅ manual cred command
✅ output `gcloud_gke_get_creds` command
✅ create simple nginx pod `kubectl run nginx --image=nginx:latest -n default && kubectl get po -w`
✅ `flux install && kubectl get po -n flux-system -w`
✅ destroy cluster ### opentofu ✅ create cluster
✅ `./get-credentials.sh`
✅ manual cred command
✅ output `gcloud_gke_get_creds` command
✅ create simple nginx pod `kubectl run nginx --image=nginx:latest -n default && kubectl get po -w`
✅ `flux install && kubectl get po -n flux-system -w`
✅ destroy cluster ## Requirements | Name | Version | |------|---------| | [terraform](#requirement\_terraform) | ~>1.8.0 | | [google](#requirement\_google) | ~>5.42.0 | | [kubernetes](#requirement\_kubernetes) | ~>2.32.0 | ## Providers | Name | Version | |------|---------| | [google](#provider\_google) | 5.42.0 | | [kubernetes](#provider\_kubernetes) | 2.32.0 | ## Modules No modules. ## Resources | Name | Type | |------|------| | [google_compute_network.vpc](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_network) | resource | | [google_compute_subnetwork.subnet](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_subnetwork) | resource | | [google_container_cluster.primary](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/container_cluster) | resource | | [google_container_node_pool.primary_nodes](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/container_node_pool) | resource | | [google_project_service.service_networking](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/project_service) | resource | | [kubernetes_namespace.this-is-demo-cluster](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/namespace) | resource | | [google_client_config.primary](https://registry.terraform.io/providers/hashicorp/google/latest/docs/data-sources/client_config) | data source | ## Inputs | Name | Description | Type | Default | Required | |------|-------------|------|---------|:--------:| | [project](#input\_project) | Google Project to create resources in | `string` | `"demo"` | no | | [region](#input\_region) | The region to host the cluster in | `string` | `"us-central1"` | no | | [zone](#input\_zone) | The region to host the cluster in | `string` | `"us-central1-b"` | no | ## Outputs | Name | Description | |------|-------------| | [gcloud\_gke\_get\_creds](#output\_gcloud\_gke\_get\_creds) | Command to get GKE credentials | | [gcloud\_gke\_link](#output\_gcloud\_gke\_link) | GKE web ui link | | [gcloud\_vpc\_link](#output\_gcloud\_vpc\_link) | VPC web ui link | | [kubernetes\_cluster\_host](#output\_kubernetes\_cluster\_host) | GKE Cluster Host | | [kubernetes\_cluster\_name](#output\_kubernetes\_cluster\_name) | GKE Cluster Name | | [project](#output\_project) | GCloud Project ID | | [region](#output\_region) | GCloud Region | | [zone](#output\_zone) | GCloud Project ID |