Skip to content
This repository was archived by the owner on Jan 17, 2026. It is now read-only.

YuuneesIBH/KdG-Integrationproject2_Part2_DevOps_GCP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

KdG IP3 DevOps - GCP Kubernetes Deployment

Complete DevOps setup voor het deployen van het Integration Project 3 platform naar Google Cloud Platform (GCP) met Kubernetes.

📋 Overzicht

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

🏗️ Architectuur

GCP
└── GKE Cluster
    ├── Namespace: platform
    │   ├── Frontend (React/Angular/Vue)
    │   ├── Backend (Spring Boot/Kotlin)
    │   └── Integration-Events (Spring Boot/Kotlin)
    └── Namespace: games (later)
        └── Individual game deployments

🚀 Quick Start Guide

Vereisten

Installeer de volgende tools op je lokale machine:

  1. Google Cloud SDK (gcloud)

  2. Terraform

  3. kubectl

  4. Git

    • Al geïnstalleerd? Test: git --version

Stap 1: Repository Setup

# Clone de repository
git clone <jouw-devops-repo-url>
cd KdG-Integrationproject2_DevOps_GCP

# Maak scripts executable
chmod +x scripts/*.sh

Stap 2: GCP Project Setup

# 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.sh

Dit script:

  • ✅ Authenticeert met GCP
  • ✅ Enabled required APIs
  • ✅ Creëert service account voor Terraform
  • ✅ Genereert gcp-key.json (NEVER COMMIT!)

Stap 3: Terraform Configuratie

# Kopieer en bewerk terraform variabelen
cd terraform
cp terraform.tfvars.example terraform.tfvars
nano terraform.tfvars

# Vul in:
# - project_id
# - region en zone
# - cluster instellingen

Belangrijke settings:

  • use_preemptible = true → Goedkoper, maar nodes kunnen gestopt worden
  • use_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

Stap 4: Deploy GKE Cluster

# Terug naar root
cd ..

# Deploy cluster (duurt 5-10 minuten)
./scripts/1-deploy-cluster.sh

Dit script:

  • ✅ Terraform init
  • ✅ Terraform plan (review)
  • ✅ Terraform apply (na bevestiging)
  • ✅ Creëert GKE cluster met 2 nodes

Stap 5: Configure kubectl

# Configureer kubectl om met cluster te connecten
./scripts/2-configure-kubectl.sh

Test de verbinding:

kubectl get nodes
# Je zou 2 nodes moeten zien

Stap 6: Install NGINX Ingress Controller

# Installeer NGINX voor externe toegang
./scripts/3-install-nginx-ingress.sh

Dit geeft je een External IP → noteer deze! Dit is het adres waarop je frontend straks bereikbaar is.

Stap 7: GitLab Registry Access

# Setup GitLab credentials voor private registry
./scripts/4-setup-gitlab-secret.sh

Je hebt nodig:

Stap 8: Update Frontend Deployment

# Bewerk de deployment met jullie image URL
nano kubernetes/frontend/deployment.yaml

Verander:

image: registry.gitlab.com/GROEP/frontend:latest

Naar jullie echte GitLab registry URL, bijvoorbeeld:

image: registry.gitlab.com/kdg-ti/ip3-2024/team5/frontend:latest

Ook:

  • Check de containerPort (80 of 3000?)
  • Voeg environment variables toe indien nodig

Stap 9: Deploy Frontend

# Deploy de frontend!
./scripts/5-deploy-frontend.sh

Dit script:

  • ✅ Creëert namespace platform
  • ✅ Deploy frontend pods
  • ✅ Creëert ClusterIP service
  • ✅ Configureert Ingress rules
  • ✅ Wacht tot pods ready zijn

Stap 10: Test je Deployment

# 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-nginx

Open browser → http://<EXTERNAL-IP> → Je frontend zou nu moeten werken! 🎉

📊 Handige Commands

Pods bekijken

# 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>

Deployment updates

# 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

Debugging

# 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 platform

🔄 Backend & Integration-Events Toevoegen

Later, wanneer backend en integration-events klaar zijn:

  1. Kopieer kubernetes/frontend/ naar kubernetes/backend/
  2. Pas deployment.yaml aan:
    • Image URL naar backend image
    • Container port naar backend port (8080?)
    • Environment variabelen (database, RabbitMQ, etc.)
  3. Update kubernetes/ingress/ingress-rules.yaml:
    • Voeg /api path toe → backend-service
    • Voeg /events path toe → integration-events-service
  4. Deploy:
    kubectl apply -f kubernetes/backend/deployment.yaml
    kubectl apply -f kubernetes/ingress/ingress-rules.yaml

🎮 Games Deployment (Later)

Games in aparte deployment units volgens IP3 requirements:

  1. Creëer namespace: kubectl create namespace games
  2. Per game een eigen deployment
  3. Ingress routing via subpaths: /games/game1, /games/game2, etc.

💰 Cost Management

Belangrijk! GKE kost geld. Om kosten te besparen:

Cluster stopzetten (na werksessie)

# 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

Cluster opnieuw starten

# 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 platform

Cluster volledig verwijderen

cd terraform
terraform destroy
# Bevestig met 'yes'

🔒 Security Best Practices

  • gcp-key.json is in .gitignore → NEVER COMMIT!
  • terraform.tfvars is in .gitignore → NEVER COMMIT!
  • ✅ Gebruik secrets voor gevoelige data
  • ✅ GitLab Access Tokens met minimale scopes
  • ✅ Resource limits in deployments

📚 Documentatie Links

🆘 Troubleshooting

Pods starten niet

# 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

Can't pull from GitLab registry

# 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

Ingress geeft geen IP

# 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

👥 Team

  • Ops Team: Beheert infrastructuur, monitoring, en cluster
  • Dev Team: Levert Docker images en deployment manifests
  • Deployment Agreement: Zie docs/deployment-agreement.md

📝 Next Steps

  1. ✅ Frontend deployment werkend
  2. ⏳ Backend deployment toevoegen
  3. ⏳ Integration-Events deployment toevoegen
  4. ⏳ Monitoring setup (Prometheus + Grafana)
  5. ⏳ CI/CD pipeline in GitLab
  6. ⏳ Games deployments

Succes met het deployen! 🚀

About

DevOps repository for KdG Integration Project 2 – Part 2. Focuses on Infrastructure as Code with Terraform, GitLab CI/CD pipelines, Docker containerization and Kubernetes deployments on Google Cloud Platform (GKE), following modern DevOps and cloud-native best practices.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors