Complete DevOps setup voor het deployen van het Integration Project 3 platform naar Google Cloud Platform (GCP) met Kubernetes.
Dit repository bevat alle configuratie en scripts om:
- GKE (Google Kubernetes Engine) cluster op te zetten met Terraform
- Frontend, Backend en Integration-Events te deployen
- NGINX Ingress Controller voor externe toegang
- Later: Games in aparte deployment units
GCP
└── GKE Cluster
├── Namespace: platform
│ ├── Frontend (React/Angular/Vue)
│ ├── Backend (Spring Boot/Kotlin)
│ └── Integration-Events (Spring Boot/Kotlin)
└── Namespace: games (later)
└── Individual game deployments
Installeer de volgende tools op je lokale machine:
-
Google Cloud SDK (gcloud)
- Download: https://cloud.google.com/sdk/docs/install
- Test:
gcloud --version
-
Terraform
- Download: https://developer.hashicorp.com/terraform/downloads
- Test:
terraform --version
-
kubectl
- Download: https://kubernetes.io/docs/tasks/tools/
- Test:
kubectl version --client
-
Git
- Al geïnstalleerd? Test:
git --version
- Al geïnstalleerd? Test:
# Clone de repository
git clone <jouw-devops-repo-url>
cd KdG-Integrationproject2_DevOps_GCP
# Maak scripts executable
chmod +x scripts/*.sh# Bewerk het script met je GCP Project ID
nano scripts/setup-gcloud.sh
# Vul in: PROJECT_ID="jouw-project-id"
# Voer setup uit
./scripts/setup-gcloud.shDit script:
- ✅ Authenticeert met GCP
- ✅ Enabled required APIs
- ✅ Creëert service account voor Terraform
- ✅ Genereert
gcp-key.json(NEVER COMMIT!)
# Kopieer en bewerk terraform variabelen
cd terraform
cp terraform.tfvars.example terraform.tfvars
nano terraform.tfvars
# Vul in:
# - project_id
# - region en zone
# - cluster instellingenBelangrijke settings:
use_preemptible = true→ Goedkoper, maar nodes kunnen gestopt wordenuse_preemptible = false→ Duurder, maar stabiel (voor productie)machine_type = "e2-medium"→ 2 vCPU, 4GB RAM (goed voor start)node_count = 2→ Start met 2 nodes
# Terug naar root
cd ..
# Deploy cluster (duurt 5-10 minuten)
./scripts/1-deploy-cluster.shDit script:
- ✅ Terraform init
- ✅ Terraform plan (review)
- ✅ Terraform apply (na bevestiging)
- ✅ Creëert GKE cluster met 2 nodes
# Configureer kubectl om met cluster te connecten
./scripts/2-configure-kubectl.shTest de verbinding:
kubectl get nodes
# Je zou 2 nodes moeten zien# Installeer NGINX voor externe toegang
./scripts/3-install-nginx-ingress.shDit geeft je een External IP → noteer deze! Dit is het adres waarop je frontend straks bereikbaar is.
# Setup GitLab credentials voor private registry
./scripts/4-setup-gitlab-secret.shJe hebt nodig:
- GitLab username
- GitLab Personal Access Token met
read_registryscope
# Bewerk de deployment met jullie image URL
nano kubernetes/frontend/deployment.yamlVerander:
image: registry.gitlab.com/GROEP/frontend:latestNaar jullie echte GitLab registry URL, bijvoorbeeld:
image: registry.gitlab.com/kdg-ti/ip3-2024/team5/frontend:latestOok:
- Check de
containerPort(80 of 3000?) - Voeg environment variables toe indien nodig
# Deploy de frontend!
./scripts/5-deploy-frontend.shDit script:
- ✅ Creëert namespace
platform - ✅ Deploy frontend pods
- ✅ Creëert ClusterIP service
- ✅ Configureert Ingress rules
- ✅ Wacht tot pods ready zijn
# Check pod status
kubectl get pods -n platform
# Check services
kubectl get svc -n platform
# Check ingress
kubectl get ingress -n platform
# Get external IP
kubectl get svc -n ingress-nginxOpen browser → http://<EXTERNAL-IP> → Je frontend zou nu moeten werken! 🎉
# Alle pods in platform namespace
kubectl get pods -n platform
# Logs van frontend pods
kubectl logs -n platform -l app=frontend --tail=100 -f
# Shell in een pod
kubectl exec -it -n platform <pod-name> -- /bin/sh
# Pod details
kubectl describe pod -n platform <pod-name># Update deployment (na image change)
kubectl rollout restart deployment frontend -n platform
# Check rollout status
kubectl rollout status deployment frontend -n platform
# Rollback naar vorige versie
kubectl rollout undo deployment frontend -n platform# Events bekijken
kubectl get events -n platform --sort-by='.lastTimestamp'
# Alle resources in namespace
kubectl get all -n platform
# Service endpoints
kubectl get endpoints -n platformLater, wanneer backend en integration-events klaar zijn:
- Kopieer
kubernetes/frontend/naarkubernetes/backend/ - Pas deployment.yaml aan:
- Image URL naar backend image
- Container port naar backend port (8080?)
- Environment variabelen (database, RabbitMQ, etc.)
- Update
kubernetes/ingress/ingress-rules.yaml:- Voeg
/apipath toe → backend-service - Voeg
/eventspath toe → integration-events-service
- Voeg
- Deploy:
kubectl apply -f kubernetes/backend/deployment.yaml kubectl apply -f kubernetes/ingress/ingress-rules.yaml
Games in aparte deployment units volgens IP3 requirements:
- Creëer namespace:
kubectl create namespace games - Per game een eigen deployment
- Ingress routing via subpaths:
/games/game1,/games/game2, etc.
Belangrijk! GKE kost geld. Om kosten te besparen:
# Schaal nodes naar 0
kubectl scale deployment --all --replicas=0 -n platform
# Stop cluster nodes (via GCP Console)
# Of: resize node pool naar 0
gcloud container clusters resize kdg-ip3-cluster \
--num-nodes=0 \
--zone=europe-west1-b# Resize node pool terug naar 2
gcloud container clusters resize kdg-ip3-cluster \
--num-nodes=2 \
--zone=europe-west1-b
# Schaal deployments terug op
kubectl scale deployment frontend --replicas=2 -n platformcd terraform
terraform destroy
# Bevestig met 'yes'- ✅
gcp-key.jsonis in.gitignore→ NEVER COMMIT! - ✅
terraform.tfvarsis in.gitignore→ NEVER COMMIT! - ✅ Gebruik secrets voor gevoelige data
- ✅ GitLab Access Tokens met minimale scopes
- ✅ Resource limits in deployments
# Check pod events
kubectl describe pod -n platform <pod-name>
# Check logs
kubectl logs -n platform <pod-name>
# Veelvoorkomende problemen:
# - ImagePullBackOff → GitLab credentials verkeerd
# - CrashLoopBackOff → App crasht, check logs
# - Pending → Niet genoeg resources, check node capacity# Verwijder en hermaak secret
kubectl delete secret gitlab-registry-secret -n platform
./scripts/4-setup-gitlab-secret.sh
kubectl rollout restart deployment frontend -n platform# Check ingress controller pods
kubectl get pods -n ingress-nginx
# Check LoadBalancer service
kubectl get svc -n ingress-nginx
# Het kan 2-3 minuten duren voor IP assigned is- Ops Team: Beheert infrastructuur, monitoring, en cluster
- Dev Team: Levert Docker images en deployment manifests
- Deployment Agreement: Zie
docs/deployment-agreement.md
- ✅ Frontend deployment werkend
- ⏳ Backend deployment toevoegen
- ⏳ Integration-Events deployment toevoegen
- ⏳ Monitoring setup (Prometheus + Grafana)
- ⏳ CI/CD pipeline in GitLab
- ⏳ Games deployments
Succes met het deployen! 🚀