Cluster.dev uses stack templates to generate users' projects in a desired cloud. GCP-GKE is a stack template that creates and provisions Kubernetes clusters in GCP cloud by means of Google Kubernetes Engine (GKE).
In this repository you will find all information and samples necessary to start an GKE cluster on GPC with Cluster.dev.
The resources to be created:
- VPC
- GKE Kubernetes cluster with addons:
- cert-manager
- ingress-nginx
- external-secrets (with GCP Secret Manager backend)
- external-dns
- argocd
- Terraform version >= 1.4
- GCP account and project.
- GCloud CLI installed and configured with your GCP account.
- kubectl installed.
- Cluster.dev client installed.
- Parent Domain
-
Create or select a Google Cloud project.
gcloud projects create cdev-demo gcloud config set project cdev-demo
-
Enable Secret Manager
gcloud services enable secretmanager.googleapis.com
-
Clone example project:
git clone https://github.com/shalb/cdev-gcp-gke.git cd examples/
-
Update project.yaml
name: demo-project kind: Project backend: default variables: organization: my-organization project: cdev-demo region: us-west1 state_bucket_name: gke-demo-state state_bucket_prefix: demo
-
Create GCO bucket for terraform backend
gcloud projects create cdev-demo gcloud config set project cdev-demo gsutil mb gs://gke-demo-state
-
Edit variables in the example's files, if necessary.
-
Run
cdev plan
-
Run
cdev apply
-
Setup DNS delegation for subdomain by creating NS records for subdomain in parent domain Run
cdev output
cdev output 12:58:52 [INFO] Printer: 'cluster.outputs', Output: domain = demo.gcp.cluster.dev. name_server = [ "ns-cloud-d1.googledomains.com.", "ns-cloud-d2.googledomains.com.", "ns-cloud-d3.googledomains.com.", "ns-cloud-d4.googledomains.com." ] region = us-west1
add records from name_server list
-
Authorize cdev/terraform to interact with GCP via SDK
gcloud auth application-default login
-
Connect to GKE cluster
gcloud components install gke-gcloud-auth-plugin gcloud container clusters get-credentials demo-cluster --zone us-west1-a --project cdev-demo
-
Retrieve ArgoCD admin password install argocd cli
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo