diff --git a/MIGRATION.md b/MIGRATION.md index 1c7d686..43a1ddf 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -1,22 +1,22 @@ -# Migration Guide: Docker Compose β†’ Kubernetes +# Panduan Migrasi: Docker Compose β†’ Kubernetes Panduan migrasi CloudLab dari Docker Compose ke Kubernetes. -## πŸ“Š Comparison Overview +## Tinjauan Perbandingan -| Aspect | Docker Compose | Kubernetes | +| Aspek | Docker Compose | Kubernetes | |--------|---------------|------------| -| **Orchestration** | Single host | Multi-node cluster | -| **Scaling** | Manual (`docker-compose scale`) | Auto-scaling (HPA) | -| **High Availability** | Limited | Built-in (replicas, self-healing) | -| **Load Balancing** | Basic | Advanced (Services, Ingress) | -| **Storage** | Docker volumes | PersistentVolumes | -| **Networking** | Bridge network | Service mesh, Network Policies | -| **Configuration** | Environment variables | ConfigMaps, Secrets | +| **Orkestrasi** | Single host | Multi-node cluster | +| **Penskalaan (Scaling)** | Manual (`docker-compose scale`) | Otomatis (HPA) | +| **Ketersediaan Tinggi** | Terbatas | Built-in (replika, pemulihan mandiri) | +| **Load Balancing** | Dasar | Lanjutan (Services, Ingress) | +| **Penyimpanan** | Docker volumes | PersistentVolumes | +| **Jaringan** | Bridge network | Service mesh, Network Policies | +| **Konfigurasi** | Environment variables | ConfigMaps, Secrets | | **Deployment** | `docker-compose up` | `kubectl apply` | -| **Monitoring** | Manual setup | Native integration | +| **Monitoring** | Setup manual | Integrasi native | -## πŸ”„ Mapping Components +## Pemetaan Komponen ### Services β†’ Deployments + Services @@ -39,7 +39,7 @@ kind: Deployment metadata: name: nodejs-app spec: - replicas: 3 # HA dengan multiple replicas + replicas: 3 # High Availability dengan multiple replicas template: spec: containers: @@ -72,9 +72,9 @@ networks: ``` **Kubernetes:** -- Services provide DNS-based service discovery -- Network Policies untuk traffic control (optional) -- Pods dapat communicate via service names +- Services menyediakan penemuan layanan berbasis DNS +- Network Policies untuk kontrol lalu lintas (opsional) +- Pods dapat berkomunikasi melalui nama service ### Volumes β†’ PersistentVolumeClaims @@ -108,324 +108,324 @@ depends_on: ``` **Kubernetes:** -- Readiness probes ensure service is ready -- Init containers untuk startup dependencies -- Service discovery handles availability - -## πŸ“ Migration Steps - -### Phase 1: Preparation - -1. **Audit Current Setup** - ```bash - # List running services - docker-compose ps - - # Check resource usage - docker stats - - # Export configurations - docker-compose config > docker-compose-backup.yml - ``` - -2. **Build and Tag Images** - ```bash - # Build images dengan versioning - cd apps/demo-apps/nodejs-app - docker build -t cloudlab-nodejs-app:1.0.0 . - docker tag cloudlab-nodejs-app:1.0.0 cloudlab-nodejs-app:latest - - cd ../python-app - docker build -t cloudlab-python-app:1.0.0 . - docker tag cloudlab-python-app:1.0.0 cloudlab-python-app:latest - ``` - -3. **Backup Data** - ```bash - # Backup Grafana data - docker cp cloudlab-grafana:/var/lib/grafana ./backup/grafana - - # Backup Prometheus data - docker cp cloudlab-prometheus:/prometheus ./backup/prometheus - ``` - -### Phase 2: Setup Kubernetes - -1. **Choose Cluster Type** - - Local: Minikube or Kind - - Cloud: GKE, EKS, or AKS - - On-premise: kubeadm or k3s - -2. **Install Required Tools** - ```bash - # kubectl - curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" - sudo install kubectl /usr/local/bin/ - - # Minikube (untuk local) - curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 - sudo install minikube-linux-amd64 /usr/local/bin/minikube - ``` - -3. **Start Cluster** - ```bash - # Minikube - minikube start --cpus=4 --memory=8192 - minikube addons enable ingress - minikube addons enable metrics-server - ``` - -### Phase 3: Deploy to Kubernetes - -1. **Prepare Images** - ```bash - # For Minikube - minikube image load cloudlab-nodejs-app:latest - minikube image load cloudlab-python-app:latest - - # For other clusters, push to registry - # docker push your-registry/cloudlab-nodejs-app:latest - ``` - -2. **Generate SSL Certificates** - ```bash - # Generate self-signed cert - openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ - -keyout /tmp/tls.key -out /tmp/tls.crt \ - -subj "/C=ID/ST=Jakarta/L=Jakarta/O=CloudLab/OU=Dev/CN=cloudlab.local" - - # Update secret - TLS_CRT=$(cat /tmp/tls.crt | base64 -w 0) - TLS_KEY=$(cat /tmp/tls.key | base64 -w 0) - sed -i "s|tls.crt:.*|tls.crt: $TLS_CRT|" k8s/base/secrets/ssl-certs.yaml - sed -i "s|tls.key:.*|tls.key: $TLS_KEY|" k8s/base/secrets/ssl-certs.yaml - ``` - -3. **Deploy Resources** - ```bash - # Deploy dengan kustomize - kubectl apply -k k8s/ - - # Wait for rollout - kubectl rollout status deployment/nodejs-app -n cloudlab-apps - kubectl rollout status deployment/python-app -n cloudlab-apps - kubectl rollout status deployment/grafana -n cloudlab-monitoring - kubectl rollout status statefulset/prometheus -n cloudlab-monitoring - ``` - -4. **Verify Deployment** - ```bash - # Check pods - kubectl get pods -n cloudlab-apps - kubectl get pods -n cloudlab-monitoring - - # Check services - kubectl get svc -n cloudlab-apps - kubectl get svc -n cloudlab-monitoring - - # Check ingress - kubectl get ingress -A - ``` - -### Phase 4: Data Migration - -1. **Restore Grafana Data** - ```bash - # Copy backup ke pod - kubectl cp ./backup/grafana grafana-:/var/lib/grafana -n cloudlab-monitoring - - # Restart Grafana - kubectl rollout restart deployment/grafana -n cloudlab-monitoring - ``` - -2. **Restore Prometheus Data** - ```bash - # Copy backup ke pod - kubectl cp ./backup/prometheus prometheus-0:/prometheus -n cloudlab-monitoring - - # Restart Prometheus - kubectl rollout restart statefulset/prometheus -n cloudlab-monitoring - ``` - -### Phase 5: Testing - -1. **Functional Testing** - ```bash - # Port forward untuk testing - kubectl port-forward svc/nodejs-app 3001:3001 -n cloudlab-apps & - kubectl port-forward svc/python-app 5000:5000 -n cloudlab-apps & - kubectl port-forward svc/grafana 3000:3000 -n cloudlab-monitoring & - - # Test endpoints - curl http://localhost:3001/health - curl http://localhost:5000/health - curl http://localhost:3000/api/health - ``` - -2. **Load Testing** - ```bash - # Generate load - kubectl run -it --rm load-generator --image=busybox -- /bin/sh - while true; do wget -q -O- http://nodejs-app.cloudlab-apps.svc.cluster.local:3001; done - - # Watch autoscaling - kubectl get hpa -n cloudlab-apps --watch - ``` - -3. **Monitoring Testing** - ```bash - # Check Prometheus targets - kubectl port-forward svc/prometheus 9090:9090 -n cloudlab-monitoring - # Open http://localhost:9090/targets - - # Check Grafana dashboards - # Open http://localhost:3000 - ``` - -### Phase 6: Cutover - -1. **Update DNS/Hosts** - ```bash - # Get Ingress IP - kubectl get ingress -n cloudlab-apps - - # Update /etc/hosts - echo "$(minikube ip) cloudlab.local grafana.cloudlab.local" | sudo tee -a /etc/hosts - ``` - -2. **Stop Docker Compose** - ```bash - # Stop services - docker-compose down - - # Keep volumes untuk backup - # docker-compose down -v # Only if you want to remove volumes - ``` - -3. **Verify Production Traffic** - ```bash - # Test via Ingress - curl https://cloudlab.local - curl https://grafana.cloudlab.local - ``` - -## πŸ”™ Rollback Procedure - -Jika ada masalah, rollback ke Docker Compose: +- Readiness probes memastikan layanan siap menerima trafik +- Init containers untuk dependensi startup +- Service discovery menangani ketersediaan + +## Tahapan Migrasi + +### Fase 1: Persiapan + +1. **Audit Setup Saat Ini** + ```bash + # List running services + docker-compose ps + + # Cek penggunaan resource + docker stats + + # Ekspor konfigurasi + docker-compose config > docker-compose-backup.yml + ``` + +2. **Build dan Tag Images** + ```bash + # Build images dengan versioning + cd apps/demo-apps/nodejs-app + docker build -t cloudlab-nodejs-app:1.0.0 . + docker tag cloudlab-nodejs-app:1.0.0 cloudlab-nodejs-app:latest + + cd ../python-app + docker build -t cloudlab-python-app:1.0.0 . + docker tag cloudlab-python-app:1.0.0 cloudlab-python-app:latest + ``` + +3. **Backup Data** + ```bash + # Backup Grafana data + docker cp cloudlab-grafana:/var/lib/grafana ./backup/grafana + + # Backup Prometheus data + docker cp cloudlab-prometheus:/prometheus ./backup/prometheus + ``` + +### Fase 2: Setup Kubernetes + +1. **Pilih Tipe Cluster** + - Lokal: Minikube atau Kind + - Cloud: GKE, EKS, atau AKS + - On-premise: kubeadm atau k3s + +2. **Install Tools yang Dibutuhkan** + ```bash + # kubectl + curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" + sudo install kubectl /usr/local/bin/ + + # Minikube (untuk lokal) + curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 + sudo install minikube-linux-amd64 /usr/local/bin/minikube + ``` + +3. **Mulai Cluster** + ```bash + # Minikube + minikube start --cpus=4 --memory=8192 + minikube addons enable ingress + minikube addons enable metrics-server + ``` + +### Fase 3: Deploy ke Kubernetes + +1. **Siapkan Images** + ```bash + # Untuk Minikube + minikube image load cloudlab-nodejs-app:latest + minikube image load cloudlab-python-app:latest + + # Untuk cluster lain, push ke registry + # docker push your-registry/cloudlab-nodejs-app:latest + ``` + +2. **Generate Sertifikat SSL** + ```bash + # Generate self-signed cert + openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ + -keyout /tmp/tls.key -out /tmp/tls.crt \ + -subj "/C=ID/ST=Jakarta/L=Jakarta/O=CloudLab/OU=Dev/CN=cloudlab.local" + + # Update secret + TLS_CRT=$(cat /tmp/tls.crt | base64 -w 0) + TLS_KEY=$(cat /tmp/tls.key | base64 -w 0) + sed -i "s|tls.crt:.*|tls.crt: $TLS_CRT|" k8s/base/secrets/ssl-certs.yaml + sed -i "s|tls.key:.*|tls.key: $TLS_KEY|" k8s/base/secrets/ssl-certs.yaml + ``` + +3. **Deploy Resources** + ```bash + # Deploy dengan kustomize + kubectl apply -k k8s/ + + # Tunggu rollout selesai + kubectl rollout status deployment/nodejs-app -n cloudlab-apps + kubectl rollout status deployment/python-app -n cloudlab-apps + kubectl rollout status deployment/grafana -n cloudlab-monitoring + kubectl rollout status statefulset/prometheus -n cloudlab-monitoring + ``` + +4. **Verifikasi Deployment** + ```bash + # Cek pods + kubectl get pods -n cloudlab-apps + kubectl get pods -n cloudlab-monitoring + + # Cek services + kubectl get svc -n cloudlab-apps + kubectl get svc -n cloudlab-monitoring + + # Cek ingress + kubectl get ingress -A + ``` + +### Fase 4: Migrasi Data + +1. **Restore Data Grafana** + ```bash + # Copy backup ke pod + kubectl cp ./backup/grafana grafana-:/var/lib/grafana -n cloudlab-monitoring + + # Restart Grafana + kubectl rollout restart deployment/grafana -n cloudlab-monitoring + ``` + +2. **Restore Data Prometheus** + ```bash + # Copy backup ke pod + kubectl cp ./backup/prometheus prometheus-0:/prometheus -n cloudlab-monitoring + + # Restart Prometheus + kubectl rollout restart statefulset/prometheus -n cloudlab-monitoring + ``` + +### Fase 5: Pengujian (Testing) + +1. **Pengujian Fungsional** + ```bash + # Port forward untuk testing + kubectl port-forward svc/nodejs-app 3001:3001 -n cloudlab-apps & + kubectl port-forward svc/python-app 5000:5000 -n cloudlab-apps & + kubectl port-forward svc/grafana 3000:3000 -n cloudlab-monitoring & + + # Test endpoints + curl http://localhost:3001/health + curl http://localhost:5000/health + curl http://localhost:3000/api/health + ``` + +2. **Pengujian Beban (Load Testing)** + ```bash + # Generate load + kubectl run -it --rm load-generator --image=busybox -- /bin/sh + while true; do wget -q -O- http://nodejs-app.cloudlab-apps.svc.cluster.local:3001; done + + # Watch autoscaling + kubectl get hpa -n cloudlab-apps --watch + ``` + +3. **Pengujian Monitoring** + ```bash + # Cek target Prometheus + kubectl port-forward svc/prometheus 9090:9090 -n cloudlab-monitoring + # Buka http://localhost:9090/targets + + # Cek dashboard Grafana + # Buka http://localhost:3000 + ``` + +### Fase 6: Cutover + +1. **Update DNS/Hosts** + ```bash + # Dapatkan IP Ingress + kubectl get ingress -n cloudlab-apps + + # Update /etc/hosts + echo "$(minikube ip) cloudlab.local grafana.cloudlab.local" | sudo tee -a /etc/hosts + ``` + +2. **Hentikan Docker Compose** + ```bash + # Hentikan services + docker-compose down + + # Simpan volumes untuk backup + # docker-compose down -v # Hanya jika ingin menghapus volumes + ``` + +3. **Verifikasi Trafik Produksi** + ```bash + # Test via Ingress + curl https://cloudlab.local + curl https://grafana.cloudlab.local + ``` + +## Prosedur Rollback + +Jika terjadi masalah, rollback kembali ke Docker Compose: ```bash -# 1. Stop Kubernetes deployment +# 1. Hapus deployment Kubernetes kubectl delete -k k8s/ -# 2. Start Docker Compose +# 2. Jalankan Docker Compose docker-compose up -d -# 3. Verify services +# 3. Verifikasi services docker-compose ps ``` -## ⚠️ Common Issues +## Masalah Umum (Common Issues) -### Issue 1: ImagePullBackOff +### Masalah 1: ImagePullBackOff -**Problem:** Kubernetes tidak bisa pull image +**Masalah:** Kubernetes tidak bisa mengambil image. -**Solution:** +**Solusi:** ```bash -# For Minikube, load image langsung +# Untuk Minikube, load image langsung minikube image load cloudlab-nodejs-app:latest -# For other clusters, push ke registry +# Untuk cluster lain, push ke registry docker tag cloudlab-nodejs-app:latest your-registry/cloudlab-nodejs-app:latest docker push your-registry/cloudlab-nodejs-app:latest # Update kustomization.yaml dengan registry URL ``` -### Issue 2: Pods Pending +### Masalah 2: Pods Pending -**Problem:** Pods stuck di Pending state +**Masalah:** Pods tertahan di status Pending. -**Solution:** +**Solusi:** ```bash -# Check node resources +# Cek resource node kubectl top nodes -# Check pod events +# Cek event pod kubectl describe pod -n cloudlab-apps # Scale down jika resource tidak cukup kubectl scale deployment nodejs-app --replicas=1 -n cloudlab-apps ``` -### Issue 3: Ingress Not Working +### Masalah 3: Ingress Not Working -**Problem:** Tidak bisa access via Ingress +**Masalah:** Tidak bisa akses via Ingress. -**Solution:** +**Solusi:** ```bash -# Check Ingress controller +# Cek Ingress controller kubectl get pods -n ingress-nginx -# For Minikube, enable ingress addon +# Untuk Minikube, enable ingress addon minikube addons enable ingress -# For Minikube, run tunnel +# Untuk Minikube, jalankan tunnel minikube tunnel ``` -### Issue 4: PVC Pending +### Masalah 4: PVC Pending -**Problem:** PersistentVolumeClaim stuck di Pending +**Masalah:** PersistentVolumeClaim tertahan di status Pending. -**Solution:** +**Solusi:** ```bash -# Check storage class +# Cek storage class kubectl get storageclass -# For Minikube, enable storage provisioner +# Untuk Minikube, enable storage provisioner minikube addons enable storage-provisioner -# Check PVC events +# Cek event PVC kubectl describe pvc grafana-storage -n cloudlab-monitoring ``` -## πŸ“Š Performance Comparison +## Perbandingan Performa -### Resource Usage +### Penggunaan Sumber Daya -| Metric | Docker Compose | Kubernetes (3 replicas) | +| Metrik | Docker Compose | Kubernetes (3 replika) | |--------|---------------|------------------------| -| **Memory** | ~2GB | ~4GB | +| **Memori** | ~2GB | ~4GB | | **CPU** | ~1 core | ~2 cores | -| **Startup Time** | ~30s | ~60s | -| **Scalability** | Manual | Auto (HPA) | +| **Waktu Startup** | ~30s | ~60s | +| **Skalabilitas** | Manual | Otomatis (HPA) | -### Benefits Gained +### Manfaat -βœ… **High Availability**: Multiple replicas dengan self-healing -βœ… **Auto-scaling**: HPA based on CPU/memory -βœ… **Rolling Updates**: Zero-downtime deployments -βœ… **Better Monitoring**: Native Prometheus integration -βœ… **Cloud Portability**: Deploy anywhere -βœ… **Production Ready**: Enterprise-grade orchestration +- **High Availability**: Multiple replicas dengan pemulihan mandiri +- **Auto-scaling**: HPA berdasarkan CPU/memory +- **Rolling Updates**: Deployment tanpa downtime +- **Monitoring Lebih Baik**: Integrasi native Prometheus +- **Portabilitas Cloud**: Deploy di mana saja +- **Kesiapan Produksi**: Orkestrasi kelas enterprise -## πŸ“š Next Steps +## Langkah Selanjutnya -1. **Setup CI/CD**: Update GitHub Actions untuk Kubernetes deployment -2. **Implement GitOps**: ArgoCD atau FluxCD untuk automated sync -3. **Add Monitoring**: Prometheus Operator, Grafana dashboards -4. **Security Hardening**: Network Policies, RBAC, Pod Security -5. **Backup Strategy**: Velero untuk cluster backup -6. **Service Mesh**: Istio atau Linkerd untuk advanced traffic management +1. **Setup CI/CD**: Update GitHub Actions untuk deployment Kubernetes +2. **Implementasi GitOps**: ArgoCD atau FluxCD untuk sinkronisasi otomatis +3. **Tambah Monitoring**: Prometheus Operator, dashboard Grafana +4. **Penguatan Keamanan**: Network Policies, RBAC, Pod Security +5. **Strategi Backup**: Velero untuk backup cluster +6. **Service Mesh**: Istio atau Linkerd untuk manajemen trafik tingkat lanjut -## πŸ”— References +## Referensi -- [Kubernetes Documentation](https://kubernetes.io/docs/) -- [Docker Compose to Kubernetes](https://kubernetes.io/docs/tasks/configure-pod-container/translate-compose-kubernetes/) -- [Kompose Tool](https://kompose.io/) - Auto-convert Compose to K8s -- [Kustomize](https://kustomize.io/) +- [Dokumentasi Kubernetes](https://kubernetes.io/docs/) +- [Docker Compose ke Kubernetes](https://kubernetes.io/docs/tasks/configure-pod-container/translate-compose-kubernetes/) +- [Kompose Tool](https://kompose.io/) - Konversi otomatis Compose ke K8s +- [Kustomize](https://kustomize.io/) --- -**Migration Complete! Welcome to Kubernetes! πŸŽ‰** +**Migrasi Selesai! Selamat Datang di Kubernetes!** diff --git a/README.md b/README.md index 9dcb3d7..0a39b05 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # CloudLab Environment -Comprehensive cloud laboratory environment dengan Docker containerization, reverse proxy, monitoring stack, dan CI/CD pipeline. +Lingkungan laboratorium cloud komprehensif dengan kontainerisasi Docker, reverse proxy, monitoring stack, dan pipeline CI/CD. -## πŸ—οΈ Arsitektur +## Arsitektur ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” @@ -32,27 +32,27 @@ Comprehensive cloud laboratory environment dengan Docker containerization, rever β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` -## πŸš€ Quick Start +## Panduan Memulai Cepat (Quick Start) -CloudLab dapat di-deploy dengan dua cara: +CloudLab dapat di-deploy dengan dua metode: -### Option 1: Docker Compose (Recommended untuk Development) +### Opsi 1: Docker Compose (Disarankan untuk Pengembangan) -#### Prerequisites +#### Prasyarat - Docker Engine 20.10+ - Docker Compose 2.0+ - Git -#### Installation +#### Instalasi -1. **Clone repository** +1. **Clone repositori** ```bash git clone cd cloud-lab ``` -2. **Generate SSL certificates** (sudah otomatis dibuat) +2. **Generate sertifikat SSL** (sudah otomatis dibuat) ```bash # Jika perlu regenerate: openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ @@ -61,19 +61,19 @@ CloudLab dapat di-deploy dengan dua cara: -subj "/C=ID/ST=Jakarta/L=Jakarta/O=CloudLab/OU=Dev/CN=localhost" ``` -3. **Start semua services** +3. **Jalankan semua layanan** ```bash docker-compose up -d ``` -4. **Verify services running** +4. **Verifikasi layanan berjalan** ```bash docker-compose ps ``` -## πŸ“Š Service Endpoints +## Endpoint Layanan -| Service | URL | Credentials | +| Layanan | URL | Kredensial | |---------|-----|-------------| | **Node.js App** | https://localhost/ | - | | **Python API** | https://localhost/api | - | @@ -81,7 +81,7 @@ CloudLab dapat di-deploy dengan dua cara: | **Prometheus** | http://localhost:9090 | - | | **Nginx Status** | https://localhost/nginx_status | Internal only | -### Health Checks +### Pemeriksaan Kesehatan (Health Checks) ```bash # Node.js App @@ -97,39 +97,39 @@ curl http://localhost:9090/-/healthy curl http://localhost:3000/api/health ``` -### Option 2: Kubernetes (Recommended untuk Production) +### Opsi 2: Kubernetes (Disarankan untuk Produksi) -#### Prerequisites +#### Prasyarat - kubectl v1.28+ - Kubernetes cluster (Minikube/Kind/GKE/EKS/AKS) - Docker Engine 20.10+ - Git -#### Quick Deploy +#### Deployment Cepat ```bash -# 1. Clone repository +# 1. Clone repositori git clone cd cloud-lab -# 2. Run deployment script +# 2. Jalankan skrip deployment ./k8s/scripts/deploy.sh -# 3. Access applications via port-forward +# 3. Akses aplikasi via port-forward kubectl port-forward svc/nodejs-app 3001:3001 -n cloudlab-apps kubectl port-forward svc/grafana 3000:3000 -n cloudlab-monitoring ``` -**οΏ½ Dokumentasi Lengkap:** -- [Kubernetes Deployment Guide](k8s/README.md) - Setup dan deployment detail -- [Migration Guide](MIGRATION.md) - Migrasi dari Docker Compose ke Kubernetes +**Dokumentasi Lengkap:** +- [Panduan Deployment Kubernetes](k8s/README.md) - Setup dan deployment detail +- [Panduan Migrasi](MIGRATION.md) - Migrasi dari Docker Compose ke Kubernetes -## πŸ“Š Service Endpoints +## Endpoint Layanan ### Docker Compose -| Service | URL | Credentials | +| Layanan | URL | Kredensial | |---------|-----|-------------| | **Node.js App** | https://localhost/ | - | | **Python API** | https://localhost/api | - | @@ -139,14 +139,14 @@ kubectl port-forward svc/grafana 3000:3000 -n cloudlab-monitoring ### Kubernetes (via Port Forward) -| Service | Command | URL | +| Layanan | Perintah | URL | |---------|---------|-----| | **Node.js App** | `kubectl port-forward svc/nodejs-app 3001:3001 -n cloudlab-apps` | http://localhost:3001 | | **Python API** | `kubectl port-forward svc/python-app 5000:5000 -n cloudlab-apps` | http://localhost:5000 | | **Grafana** | `kubectl port-forward svc/grafana 3000:3000 -n cloudlab-monitoring` | http://localhost:3000 | | **Prometheus** | `kubectl port-forward svc/prometheus 9090:9090 -n cloudlab-monitoring` | http://localhost:9090 | -### Health Checks (Docker Compose) +### Pemeriksaan Kesehatan (Docker Compose) ```bash # Node.js App @@ -162,10 +162,10 @@ curl http://localhost:9090/-/healthy curl http://localhost:3000/api/health ``` -### Health Checks (Kubernetes) +### Pemeriksaan Kesehatan (Kubernetes) ```bash -# Check pod status +# Cek status pod kubectl get pods -n cloudlab-apps kubectl get pods -n cloudlab-monitoring @@ -177,107 +177,107 @@ kubectl port-forward svc/python-app 5000:5000 -n cloudlab-apps & curl http://localhost:5000/health ``` -## 🎯 Deployment Comparison +## Perbandingan Deployment -| Feature | Docker Compose | Kubernetes | +| Fitur | Docker Compose | Kubernetes | |---------|---------------|------------| -| **Setup Complexity** | ⭐ Simple | ⭐⭐⭐ Advanced | -| **Scalability** | Manual | Auto (HPA) | -| **High Availability** | Limited | Built-in | -| **Production Ready** | Development | Production | -| **Resource Usage** | ~2GB RAM | ~4GB RAM | -| **Learning Curve** | Easy | Moderate | +| **Kompleksitas Setup** | Sederhana | Lanjutan | +| **Skalabilitas** | Manual | Otomatis (HPA) | +| **Ketersediaan Tinggi** | Terbatas | Built-in | +| **Kesiapan Produksi** | Pengembangan | Produksi | +| **Penggunaan Sumber Daya** | ~2GB RAM | ~4GB RAM | +| **Kurva Pembelajaran** | Mudah | Menengah | **Rekomendasi:** -- πŸ”§ **Development**: Gunakan Docker Compose untuk development lokal yang cepat -- πŸš€ **Production**: Gunakan Kubernetes untuk production deployment dengan HA dan auto-scaling +- **Pengembangan**: Gunakan Docker Compose untuk pengembangan lokal yang cepat +- **Produksi**: Gunakan Kubernetes untuk deployment produksi dengan HA dan auto-scaling -## πŸ”§ Development (Docker Compose) +## Pengembangan (Docker Compose) ### Struktur Direktori -> **πŸ’‘ Catatan Penting:** Folder `apps/` dan `k8s/apps/` adalah **BERBEDA** dan **TIDAK duplikasi**! -> - `apps/` = Source code aplikasi (untuk build Docker images) -> - `k8s/apps/` = Kubernetes deployment configs (untuk deploy ke cluster) +> **Catatan Penting:** Direktori `apps/` dan `k8s/apps/` adalah **BERBEDA** dan **TIDAK duplikasi**! +> - `apps/` = Kode sumber aplikasi (untuk build Docker images) +> - `k8s/apps/` = Konfigurasi deployment Kubernetes (untuk deploy ke cluster) ``` cloud-lab/ -β”œβ”€β”€ apps/ # πŸ“¦ APPLICATION SOURCE CODE +β”œβ”€β”€ apps/ # APPLICATION SOURCE CODE β”‚ └── demo-apps/ # (Digunakan untuk build Docker images) β”‚ β”œβ”€β”€ nodejs-app/ # Node.js Express application -β”‚ β”‚ β”œβ”€β”€ Dockerfile # ← Build instructions -β”‚ β”‚ β”œβ”€β”€ package.json # ← Dependencies -β”‚ β”‚ └── server.js # ← Application code +β”‚ β”‚ β”œβ”€β”€ Dockerfile # ← Instruksi build +β”‚ β”‚ β”œβ”€β”€ package.json # ← Dependensi +β”‚ β”‚ └── server.js # ← Kode aplikasi β”‚ └── python-app/ # Python Flask API -β”‚ β”œβ”€β”€ Dockerfile # ← Build instructions -β”‚ β”œβ”€β”€ requirements.txt # ← Dependencies -β”‚ └── app.py # ← Application code +β”‚ β”œβ”€β”€ Dockerfile # ← Instruksi build +β”‚ β”œβ”€β”€ requirements.txt # ← Dependensi +β”‚ └── app.py # ← Kode aplikasi β”‚ -β”œβ”€β”€ ci/ # πŸ”„ CI/CD PIPELINE +β”œβ”€β”€ ci/ # CI/CD PIPELINE β”‚ β”œβ”€β”€ github-actions.yml # GitHub Actions workflow -β”‚ └── README.md # CI/CD documentation +β”‚ └── README.md # Dokumentasi CI/CD β”‚ -β”œβ”€β”€ monitoring/ # πŸ“Š MONITORING (Docker Compose) +β”œβ”€β”€ monitoring/ # MONITORING (Docker Compose) β”‚ β”œβ”€β”€ prometheus.yml # Prometheus config -β”‚ β”œβ”€β”€ alerts.yml # Alert rules +β”‚ β”œβ”€β”€ alerts.yml # Aturan alert β”‚ └── grafana/ β”‚ β”œβ”€β”€ datasources.yml # Grafana datasources β”‚ β”œβ”€β”€ dashboards.yml # Dashboard provisioning β”‚ └── dashboards/ # Dashboard JSON files β”‚ -β”œβ”€β”€ nginx/ # 🌐 REVERSE PROXY (Docker Compose) +β”œβ”€β”€ nginx/ # REVERSE PROXY (Docker Compose) β”‚ β”œβ”€β”€ nginx.conf # Main Nginx config -β”‚ β”œβ”€β”€ ssl/ # SSL certificates -β”‚ └── conf.d/ # Additional configs +β”‚ β”œβ”€β”€ ssl/ # Sertifikat SSL +β”‚ └── conf.d/ # Konfigurasi tambahan β”‚ -β”œβ”€β”€ k8s/ # ☸️ KUBERNETES MANIFESTS -β”‚ β”‚ # (Deployment configurations, BUKAN source code) -β”‚ β”œβ”€β”€ README.md # Kubernetes deployment guide +β”œβ”€β”€ k8s/ # KUBERNETES MANIFESTS +β”‚ β”‚ # (Konfigurasi deployment, BUKAN source code) +β”‚ β”œβ”€β”€ README.md # Panduan deployment Kubernetes β”‚ β”œβ”€β”€ kustomization.yaml # Kustomize config -β”‚ β”œβ”€β”€ base/ # Base configurations +β”‚ β”œβ”€β”€ base/ # Konfigurasi dasar β”‚ β”‚ β”œβ”€β”€ namespace.yaml # Namespaces β”‚ β”‚ β”œβ”€β”€ configmaps/ # ConfigMaps (Nginx, Prometheus) β”‚ β”‚ └── secrets/ # Secrets (SSL, credentials) -β”‚ β”œβ”€β”€ apps/ # πŸš€ APPLICATION DEPLOYMENTS +β”‚ β”œβ”€β”€ apps/ # APPLICATION DEPLOYMENTS β”‚ β”‚ β”œβ”€β”€ nodejs-app/ # (YAML configs, bukan source code!) -β”‚ β”‚ β”‚ β”œβ”€β”€ deployment.yaml # ← How to deploy -β”‚ β”‚ β”‚ β”œβ”€β”€ service.yaml # ← How to expose -β”‚ β”‚ β”‚ └── hpa.yaml # ← How to scale +β”‚ β”‚ β”‚ β”œβ”€β”€ deployment.yaml # ← Cara deploy +β”‚ β”‚ β”‚ β”œβ”€β”€ service.yaml # ← Cara expose +β”‚ β”‚ β”‚ └── hpa.yaml # ← Cara scale β”‚ β”‚ └── python-app/ β”‚ β”‚ β”œβ”€β”€ deployment.yaml β”‚ β”‚ β”œβ”€β”€ service.yaml β”‚ β”‚ └── hpa.yaml -β”‚ β”œβ”€β”€ monitoring/ # Monitoring stack for K8s +β”‚ β”œβ”€β”€ monitoring/ # Monitoring stack untuk K8s β”‚ β”‚ β”œβ”€β”€ prometheus/ # Prometheus StatefulSet β”‚ β”‚ └── grafana/ # Grafana Deployment -β”‚ β”œβ”€β”€ ingress/ # Ingress configs -β”‚ β”‚ β”œβ”€β”€ ingress.yaml # Routing rules -β”‚ β”‚ └── cert-manager.yaml # SSL automation -β”‚ └── scripts/ # Helper scripts -β”‚ β”œβ”€β”€ deploy.sh # Automated deployment -β”‚ └── cleanup.sh # Cleanup script +β”‚ β”œβ”€β”€ ingress/ # Konfigurasi Ingress +β”‚ β”‚ β”œβ”€β”€ ingress.yaml # Aturan routing +β”‚ β”‚ └── cert-manager.yaml # Otomasi SSL +β”‚ └── scripts/ # Skrip pembantu +β”‚ β”œβ”€β”€ deploy.sh # Deployment otomatis +β”‚ └── cleanup.sh # Skrip pembersihan β”‚ -β”œβ”€β”€ scripts/ # πŸ› οΈ UTILITY SCRIPTS (Docker Compose) +β”œβ”€β”€ scripts/ # UTILITY SCRIPTS (Docker Compose) β”‚ β”œβ”€β”€ setup.sh β”‚ └── cleanup.sh β”‚ -β”œβ”€β”€ docker-compose.yml # 🐳 Docker Compose orchestration -β”œβ”€β”€ MIGRATION.md # πŸ“– Migration guide -└── README.md # This file +β”œβ”€β”€ docker-compose.yml # Orkestrasi Docker Compose +β”œβ”€β”€ MIGRATION.md # Panduan migrasi +└── README.md # File ini ``` #### Penjelasan Struktur -**Separation of Concerns:** +**Pemisahan Tanggung Jawab (Separation of Concerns):** -| Directory | Purpose | Used By | Contains | +| Direktori | Tujuan | Digunakan Oleh | Berisi | |-----------|---------|---------|----------| | `apps/` | **Source code** untuk build images | Docker Compose & Kubernetes | Dockerfile, source code, dependencies | | `k8s/apps/` | **Deployment configs** untuk K8s | Kubernetes only | YAML manifests (deployment, service, hpa) | | `monitoring/` | Monitoring configs | Docker Compose only | Prometheus/Grafana configs | | `k8s/monitoring/` | Monitoring configs | Kubernetes only | K8s manifests untuk Prometheus/Grafana | -**Workflow:** +**Alur Kerja:** ``` 1. Build: apps/demo-apps/nodejs-app/ β†’ docker build β†’ cloudlab-nodejs-app:latest 2. Deploy: k8s/apps/nodejs-app/ β†’ kubectl apply β†’ Running pods in cluster @@ -286,7 +286,6 @@ cloud-lab/ **Analogi:** - `apps/` = Dapur (tempat masak/build) - `k8s/apps/` = Buku menu (cara sajikan/deploy) -``` ### Melihat Logs (Docker Compose) @@ -302,12 +301,12 @@ docker-compose logs -f prometheus docker-compose logs -f grafana ``` -## οΏ½πŸ”§ Operations (Kubernetes) +## Operasi (Kubernetes) ### Melihat Logs ```bash -# View logs +# Lihat logs kubectl logs -f deployment/nodejs-app -n cloudlab-apps kubectl logs -f deployment/python-app -n cloudlab-apps kubectl logs -f statefulset/prometheus -n cloudlab-monitoring @@ -322,11 +321,11 @@ kubectl logs -l app=nodejs-app -n cloudlab-apps --tail=100 # Manual scaling kubectl scale deployment nodejs-app --replicas=5 -n cloudlab-apps -# Check HPA status +# Cek status HPA kubectl get hpa -n cloudlab-apps ``` -### Cleanup +### Pembersihan (Cleanup) ```bash # Docker Compose @@ -354,7 +353,7 @@ kubectl delete -k k8s/ 3. Update `k8s/kustomization.yaml` untuk include resources baru 4. Deploy: `kubectl apply -k k8s/` -> **πŸ’‘ Tip:** Dengan matrix strategy di CI/CD, menambah aplikasi baru ke pipeline sangat mudah - cukup tambah 1 entry di matrix tanpa duplikasi kode. Lihat [`ci/README.md`](ci/README.md) untuk detail. +> **Tip:** Dengan strategi matriks di CI/CD, menambah aplikasi baru ke pipeline sangat mudah - cukup tambah 1 entri di matriks tanpa duplikasi kode. Lihat [`ci/README.md`](ci/README.md) untuk detail. ### Melihat Logs @@ -370,40 +369,40 @@ docker-compose logs -f prometheus docker-compose logs -f grafana ``` -## πŸ“ˆ Monitoring +## Monitoring ### Prometheus Metrics -Setiap aplikasi expose metrics di endpoint `/metrics`: +Setiap aplikasi mengekspos metrics di endpoint `/metrics`: - Node.js: http://localhost:3001/metrics - Python: http://localhost:5000/metrics ### Grafana Dashboards 1. Login ke Grafana: http://localhost:3000 -2. Credentials: `admin` / `admin123` -3. Prometheus datasource sudah auto-configured -4. Dashboards yang tersedia: +2. Kredensial: `admin` / `admin123` +3. Prometheus datasource sudah dikonfigurasi otomatis +4. Dashboard yang tersedia: - **CloudLab Overview** - Monitoring semua services (request rate, response time, error rate, CPU, memory, status) - **Node.js Application** - Metrics khusus Node.js (event loop lag, heap memory) - **Python API** - Metrics khusus Flask API (endpoint performance, resource usage) -Dashboards akan otomatis ter-load saat Grafana start. +Dashboard akan otomatis dimuat saat Grafana dimulai. -### Alert Rules +### Aturan Alert -Alert rules didefinisikan di `monitoring/alerts.yml`: -- Service down detection -- High CPU usage -- High memory usage -- HTTP error rate monitoring +Aturan alert didefinisikan di `monitoring/alerts.yml`: +- Deteksi layanan down +- Penggunaan CPU tinggi +- Penggunaan memori tinggi +- Monitoring tingkat error HTTP -## πŸ”’ Security +## Keamanan ### SSL/TLS -- Self-signed certificates untuk development -- Untuk production, gunakan Let's Encrypt: +- Self-signed certificates untuk pengembangan +- Untuk produksi, gunakan Let's Encrypt: ```bash # Install certbot sudo apt-get install certbot @@ -414,16 +413,16 @@ Alert rules didefinisikan di `monitoring/alerts.yml`: # Update nginx/nginx.conf dengan path certificate baru ``` -### Security Headers +### Header Keamanan -Nginx sudah dikonfigurasi dengan security headers: +Nginx sudah dikonfigurasi dengan header keamanan: - X-Frame-Options - X-Content-Type-Options - X-XSS-Protection -## πŸ§ͺ Testing +## Pengujian (Testing) -### Manual Testing +### Pengujian Manual ```bash # Test Node.js endpoints @@ -440,17 +439,17 @@ curl -k https://localhost/api/products/1 curl http://localhost:9090/api/v1/targets ``` -### Automated Testing (CI/CD) +### Pengujian Otomatis (CI/CD) -Pipeline CI/CD menggunakan **GitHub Actions** dengan **matrix strategy** untuk scalability: +Pipeline CI/CD menggunakan **GitHub Actions** dengan **strategi matriks** untuk skalabilitas: -**Pipeline Stages:** -1. **Validate** - Validasi Docker Compose dan Nginx config -2. **Build Apps** - Build semua aplikasi secara parallel menggunakan matrix -3. **Security Scan** - Vulnerability scanning dengan Trivy -4. **Integration Tests** - Test lengkap semua services +**Tahapan Pipeline:** +1. **Validate** - Validasi Docker Compose dan konfigurasi Nginx +2. **Build Apps** - Build semua aplikasi secara paralel menggunakan matriks +3. **Security Scan** - Pemindaian kerentanan dengan Trivy +4. **Integration Tests** - Tes lengkap semua layanan -**Matrix Strategy untuk Build:** +**Strategi Matriks untuk Build:** ```yaml strategy: matrix: @@ -464,14 +463,14 @@ strategy: ``` **Keuntungan:** -- βœ… **Scalable** - Mudah menambah aplikasi baru -- βœ… **Parallel** - Semua apps di-build bersamaan -- βœ… **DRY** - Tidak ada duplikasi kode -- βœ… **Maintainable** - Satu template untuk semua apps +- **Scalable** - Mudah menambah aplikasi baru +- **Parallel** - Semua apps di-build bersamaan +- **DRY** - Tidak ada duplikasi kode +- **Maintainable** - Satu template untuk semua apps **Menambah Aplikasi ke CI/CD:** -Cukup tambahkan entry baru di matrix di file `ci/github-actions.yml`: +Cukup tambahkan entri baru di matriks di file `ci/github-actions.yml`: ```yaml - name: golang-app image: cloudlab-golang-app @@ -484,49 +483,49 @@ Cukup tambahkan entry baru di matrix di file `ci/github-actions.yml`: Lihat dokumentasi lengkap di [`ci/README.md`](ci/README.md) -## 🚒 Deployment +## Deployment -### Development +### Pengembangan ```bash docker-compose up -d ``` -### Production +### Produksi -1. Update environment variables -2. Replace SSL certificates dengan production certs -3. Update Grafana admin password +1. Update variabel lingkungan +2. Ganti sertifikat SSL dengan sertifikat produksi +3. Update password admin Grafana 4. Deploy dengan: ```bash docker-compose -f docker-compose.yml up -d ``` -## πŸ› οΈ Troubleshooting +## Pemecahan Masalah (Troubleshooting) ### Port sudah digunakan ```bash -# Check port usage +# Cek penggunaan port sudo lsof -i :80 sudo lsof -i :443 sudo lsof -i :3000 sudo lsof -i :9090 -# Stop conflicting services atau ubah port di docker-compose.yml +# Hentikan layanan yang konflik atau ubah port di docker-compose.yml ``` -### Container tidak start +### Container tidak mulai ```bash -# Check logs +# Cek logs docker-compose logs # Rebuild container docker-compose up -d --build --force-recreate ``` -### SSL Certificate Error +### Error Sertifikat SSL ```bash # Regenerate certificates @@ -536,20 +535,20 @@ openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -subj "/C=ID/ST=Jakarta/L=Jakarta/O=CloudLab/OU=Dev/CN=localhost" ``` -### Prometheus tidak scrape metrics +### Prometheus tidak mengambil metrics -1. Check Prometheus targets: http://localhost:9090/targets -2. Verify service expose `/metrics` endpoint -3. Check network connectivity antar containers -4. Review `monitoring/prometheus.yml` configuration +1. Cek target Prometheus: http://localhost:9090/targets +2. Verifikasi service mengekspos endpoint `/metrics` +3. Cek konektivitas jaringan antar container +4. Review konfigurasi `monitoring/prometheus.yml` -### Grafana tidak bisa connect ke Prometheus +### Grafana tidak bisa terhubung ke Prometheus -1. Check Prometheus running: `docker-compose ps prometheus` -2. Verify datasource config di `monitoring/grafana/datasources.yml` -3. Test connection dari Grafana UI: Configuration β†’ Data Sources +1. Cek Prometheus berjalan: `docker-compose ps prometheus` +2. Verifikasi config datasource di `monitoring/grafana/datasources.yml` +3. Test koneksi dari Grafana UI: Configuration β†’ Data Sources -## πŸ“ Maintenance +## Pemeliharaan (Maintenance) ### Backup Data @@ -564,42 +563,42 @@ docker cp cloudlab-prometheus:/prometheus ./backup/prometheus ### Update Images ```bash -# Pull latest images +# Pull images terbaru docker-compose pull # Recreate containers docker-compose up -d --force-recreate ``` -### Cleanup +### Pembersihan ```bash -# Stop semua services +# Hentikan semua layanan docker-compose down -# Remove volumes (WARNING: akan hapus data) +# Hapus volumes (PERINGATAN: akan menghapus data) docker-compose down -v -# Remove unused images +# Hapus images yang tidak digunakan docker image prune -a ``` -## 🀝 Contributing +## Kontribusi -1. Fork repository -2. Create feature branch -3. Commit changes +1. Fork repositori +2. Buat feature branch +3. Commit perubahan 4. Push ke branch -5. Create Pull Request +5. Buat Pull Request -## πŸ“„ License +## Lisensi MIT License -## πŸ“ž Support +## Dukungan -Untuk issues atau questions, silakan buat issue di repository. +Untuk masalah atau pertanyaan, silakan buat issue di repository. --- -**Built with ❀️ for CloudLab** +**Dibuat untuk CloudLab** diff --git a/ci/README.md b/ci/README.md index 8d10043..33dcf26 100644 --- a/ci/README.md +++ b/ci/README.md @@ -1,18 +1,18 @@ -# CI/CD Pipeline Documentation +# Dokumentasi Pipeline CI/CD -## Overview +## Ikhtisar Pipeline CI/CD CloudLab menggunakan GitHub Actions untuk otomasi build, test, dan deployment aplikasi. ## Struktur Pipeline -### 1. Validate +### 1. Validate (Validasi) Memvalidasi konfigurasi sebelum build: -- Docker Compose configuration -- Nginx configuration +- Konfigurasi Docker Compose +- Konfigurasi Nginx -### 2. Build Apps (Matrix Strategy) -Build semua aplikasi menggunakan **matrix strategy** untuk scalability: +### 2. Build Apps (Strategi Matriks) +Build semua aplikasi menggunakan **strategi matriks** untuk skalabilitas: ```yaml strategy: @@ -35,30 +35,30 @@ strategy: fail-fast: false ``` -**Keuntungan Matrix Strategy:** -- βœ… **Scalable**: Mudah menambah aplikasi baru -- βœ… **DRY**: Tidak ada duplikasi kode -- βœ… **Parallel**: Semua apps di-build secara parallel -- βœ… **Maintainable**: Satu template untuk semua apps +**Keuntungan Strategi Matriks:** +- **Scalable**: Mudah menambah aplikasi baru +- **DRY (Don't Repeat Yourself)**: Tidak ada duplikasi kode +- **Parallel**: Semua aplikasi di-build secara paralel +- **Maintainable**: Satu template untuk semua aplikasi -### 3. Security Scan -Scan vulnerabilities menggunakan Trivy untuk semua aplikasi. +### 3. Security Scan (Pemindaian Keamanan) +Scan kerentanan menggunakan Trivy untuk semua aplikasi. -### 4. Integration Test -Test integrasi lengkap: +### 4. Integration Test (Uji Integrasi) +Uji integrasi lengkap meliputi: - Nginx reverse proxy -- Node.js app melalui Nginx +- Aplikasi Node.js melalui Nginx - Python API melalui Nginx -- Prometheus metrics +- Metrics Prometheus - Grafana dashboard -- Prometheus targets +- Target Prometheus -### 5. Deploy (Optional) -Deployment ke production (saat ini di-comment, uncomment saat siap deploy). +### 5. Deploy (Opsional) +Deployment ke produksi (saat ini dinonaktifkan, aktifkan saat siap deploy). ## Menambah Aplikasi Baru -Untuk menambah aplikasi baru, cukup tambahkan entry di matrix `build-apps`: +Untuk menambah aplikasi baru, cukup tambahkan entri di matriks `build-apps`: ```yaml build-apps: @@ -80,13 +80,13 @@ build-apps: ``` **Tidak perlu:** -- ❌ Duplikasi job baru -- ❌ Copy-paste steps -- ❌ Update multiple places +- Duplikasi job baru +- Copy-paste langkah-langkah +- Update di banyak tempat **Cukup:** -- βœ… Tambah 1 entry di matrix -- βœ… Semua steps otomatis apply +- Tambah 1 entri di matriks +- Semua langkah otomatis diterapkan ## Workflow Triggers @@ -94,7 +94,7 @@ Pipeline berjalan otomatis pada: - Push ke branch `main` atau `develop` - Pull request ke branch `main` -## Environment Variables +## Variabel Lingkungan (Environment Variables) ```yaml env: @@ -103,36 +103,36 @@ env: PYTHON_APP_IMAGE: cloudlab-python-app ``` -## Cache Strategy +## Strategi Cache -Setiap aplikasi memiliki cache scope terpisah untuk optimasi build time: +Setiap aplikasi memiliki cakupan cache terpisah untuk optimasi waktu build: ```yaml cache-from: type=gha,scope=${{ matrix.app.name }} cache-to: type=gha,mode=max,scope=${{ matrix.app.name }} ``` -## Testing Strategy +## Strategi Pengujian -Setiap aplikasi di-test dengan: -1. Health check endpoint -2. Metrics endpoint -3. Integration test melalui Nginx +Setiap aplikasi diuji dengan: +1. Endpoint pemeriksaan kesehatan (Health check) +2. Endpoint metrics +3. Uji integrasi melalui Nginx -## Best Practices +## Praktik Terbaik (Best Practices) -1. **Fail-fast: false** - Lanjutkan build apps lain meskipun satu gagal +1. **Fail-fast: false** - Lanjutkan build aplikasi lain meskipun satu gagal 2. **Scoped cache** - Cache terpisah per aplikasi untuk efisiensi -3. **Dynamic naming** - Gunakan `${{ matrix.app.name }}` untuk naming -4. **Consistent structure** - Semua apps harus punya health & metrics endpoint +3. **Penamaan Dinamis** - Gunakan `${{ matrix.app.name }}` untuk penamaan +4. **Struktur Konsisten** - Semua aplikasi harus memiliki endpoint health & metrics -## Troubleshooting +## Pemecahan Masalah (Troubleshooting) ### Build gagal untuk satu app -Karena `fail-fast: false`, apps lain tetap di-build. Check logs untuk app yang gagal. +Karena `fail-fast: false`, aplikasi lain tetap di-build. Periksa logs untuk aplikasi yang gagal. -### Cache issues -Hapus cache dengan re-run workflow atau clear GitHub Actions cache. +### Masalah Cache +Hapus cache dengan menjalankan ulang workflow atau membersihkan cache GitHub Actions. -### Integration test timeout -Sesuaikan `sleep_time` di matrix config jika aplikasi butuh waktu startup lebih lama. +### Timeout pada Uji Integrasi +Sesuaikan `sleep_time` di konfigurasi matriks jika aplikasi membutuhkan waktu startup lebih lama. diff --git a/k8s/FAQ.md b/k8s/FAQ.md index 5cb381f..d6f0ef1 100644 --- a/k8s/FAQ.md +++ b/k8s/FAQ.md @@ -1,6 +1,6 @@ -# FAQ - Frequently Asked Questions +# FAQ - Pertanyaan yang Sering Diajukan -## ❓ Pertanyaan Umum +## Pertanyaan Umum ### 1. Mengapa ada folder `apps/` dan `k8s/apps/`? Apakah duplikasi? @@ -9,13 +9,13 @@ | Folder | Fungsi | Berisi | Digunakan Untuk | |--------|--------|--------|-----------------| | `apps/` | Source code aplikasi | Dockerfile, source code, dependencies | Build Docker images | -| `k8s/apps/` | Deployment configuration | YAML manifests (deployment, service, hpa) | Deploy ke Kubernetes | +| `k8s/apps/` | Konfigurasi Deployment | YAML manifests (deployment, service, hpa) | Deploy ke Kubernetes | **Analogi:** - `apps/` = Dapur (tempat masak/build aplikasi) - `k8s/apps/` = Buku menu (cara sajikan/deploy aplikasi) -**Workflow:** +**Alur Kerja:** ``` apps/demo-apps/nodejs-app/ β”œβ”€β”€ Dockerfile ─┐ @@ -36,7 +36,7 @@ k8s/apps/nodejs-app/ ### 3. Kenapa ada `monitoring/` dan `k8s/monitoring/`? -Sama seperti `apps/`, ini juga separation of concerns: +Sama seperti `apps/`, ini juga pemisahan tanggung jawab (separation of concerns): | Folder | Untuk | Berisi | |--------|-------|--------| @@ -45,23 +45,23 @@ Sama seperti `apps/`, ini juga separation of concerns: ### 4. Apakah saya bisa menggunakan Docker Compose dan Kubernetes bersamaan? -**TIDAK direkomendasikan** untuk production. Pilih salah satu: -- **Development**: Docker Compose (lebih simple) -- **Production**: Kubernetes (lebih robust, scalable) +**TIDAK direkomendasikan** untuk produksi. Pilih salah satu: +- **Pengembangan**: Docker Compose (lebih sederhana) +- **Produksi**: Kubernetes (lebih kuat, dapat diskalakan) -Tapi untuk testing, Anda bisa run keduanya di environment berbeda. +Tapi untuk pengujian, Anda bisa menjalankan keduanya di environment berbeda. ### 5. Bagaimana cara menambah aplikasi baru? **Untuk Docker Compose:** -1. Buat folder di `apps/demo-apps//` +1. Buat direktori di `apps/demo-apps//` 2. Tambahkan Dockerfile dan source code 3. Update `docker-compose.yml` 4. Update `nginx/nginx.conf` untuk routing **Untuk Kubernetes:** -1. Buat folder di `apps/demo-apps//` (sama seperti di atas) -2. Buat folder di `k8s/apps//` +1. Buat direktori di `apps/demo-apps//` (sama seperti di atas) +2. Buat direktori di `k8s/apps//` 3. Buat `deployment.yaml`, `service.yaml`, `hpa.yaml` 4. Update `k8s/kustomization.yaml` 5. Update `k8s/ingress/ingress.yaml` untuk routing @@ -94,7 +94,7 @@ images: ### 7. Bagaimana cara update aplikasi yang sudah running? -**Option 1: Rebuild image dan redeploy** +**Opsi 1: Rebuild image dan redeploy** ```bash # 1. Rebuild image cd apps/demo-apps/nodejs-app @@ -110,7 +110,7 @@ kubectl set image deployment/nodejs-app nodejs-app=cloudlab-nodejs-app:v2 -n clo kubectl rollout status deployment/nodejs-app -n cloudlab-apps ``` -**Option 2: Update code dan apply** +**Opsi 2: Update kode dan apply** ```bash # 1. Edit source code di apps/ # 2. Rebuild dan load image @@ -118,29 +118,29 @@ kubectl rollout status deployment/nodejs-app -n cloudlab-apps kubectl rollout restart deployment/nodejs-app -n cloudlab-apps ``` -### 8. Pods stuck di "Pending" status, kenapa? +### 8. Pods tertahan di status "Pending", kenapa? **Penyebab umum:** - Tidak cukup resources (CPU/memory) di cluster - PersistentVolume tidak tersedia -- Node selector tidak match +- Node selector tidak cocok **Debugging:** ```bash -# Check pod events +# Cek event pod kubectl describe pod -n cloudlab-apps -# Check node resources +# Cek resource node kubectl top nodes -# Check PVC status +# Cek status PVC kubectl get pvc -n cloudlab-monitoring ``` **Solusi:** -- Scale down replicas jika resource terbatas -- Enable storage provisioner untuk Minikube -- Adjust resource requests/limits +- Kurangi jumlah replika (Scale down) jika resource terbatas +- Aktifkan storage provisioner untuk Minikube +- Sesuaikan permintaan/limit resource ### 9. Bagaimana cara melihat logs dari semua pods? @@ -155,17 +155,17 @@ stern nodejs-app -n cloudlab-apps ### 10. Apakah HPA (autoscaling) langsung bekerja? **TIDAK otomatis.** HPA membutuhkan: -1. **Metrics Server** harus installed +1. **Metrics Server** harus terinstal ```bash # Untuk Minikube minikube addons enable metrics-server - # Verify + # Verifikasi kubectl top nodes kubectl top pods -n cloudlab-apps ``` -2. **Load** yang cukup untuk trigger scaling +2. **Beban (Load)** yang cukup untuk memicu scaling ```bash # Generate load kubectl run -it --rm load-generator --image=busybox -- /bin/sh @@ -175,10 +175,10 @@ stern nodejs-app -n cloudlab-apps kubectl get hpa -n cloudlab-apps --watch ``` -### 11. SSL certificates tidak bekerja, kenapa? +### 11. Sertifikat SSL tidak bekerja, kenapa? **Penyebab:** -- Secret `cloudlab-tls` masih menggunakan placeholder values +- Secret `cloudlab-tls` masih menggunakan nilai placeholder **Solusi:** ```bash @@ -198,26 +198,26 @@ kubectl delete secret cloudlab-tls -n cloudlab-apps kubectl apply -f k8s/base/secrets/ssl-certs.yaml ``` -**Untuk production:** +**Untuk produksi:** Install cert-manager dan gunakan Let's Encrypt: ```bash kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.0/cert-manager.yaml kubectl apply -f k8s/ingress/cert-manager.yaml ``` -### 12. Bagaimana cara cleanup semua resources? +### 12. Bagaimana cara membersihkan (cleanup) semua resources? -**Option 1: Menggunakan script** +**Opsi 1: Menggunakan skrip** ```bash ./k8s/scripts/cleanup.sh ``` -**Option 2: Manual** +**Opsi 2: Manual** ```bash -# Delete via kustomization +# Hapus via kustomization kubectl delete -k k8s/ -# Atau delete namespaces (cascade delete semua resources) +# Atau hapus namespaces (cascade delete semua resources) kubectl delete namespace cloudlab-apps kubectl delete namespace cloudlab-monitoring ``` @@ -235,61 +235,61 @@ kubectl cp grafana-:/var/lib/grafana ./backup/grafana -n cloudlab-monito kubectl cp prometheus-0:/prometheus ./backup/prometheus -n cloudlab-monitoring ``` -### 14. Bagaimana cara access Grafana/Prometheus dari luar cluster? +### 14. Bagaimana cara akses Grafana/Prometheus dari luar cluster? -**Option 1: Port Forward (Development)** +**Opsi 1: Port Forward (Pengembangan)** ```bash kubectl port-forward svc/grafana 3000:3000 -n cloudlab-monitoring -# Access: http://localhost:3000 +# Akses: http://localhost:3000 ``` -**Option 2: Ingress (Production)** +**Opsi 2: Ingress (Produksi)** ```bash -# Sudah configured di k8s/ingress/ingress.yaml -# Access: https://grafana.cloudlab.local (setelah update /etc/hosts) +# Sudah dikonfigurasi di k8s/ingress/ingress.yaml +# Akses: https://grafana.cloudlab.local (setelah update /etc/hosts) ``` -**Option 3: NodePort (Testing)** +**Opsi 3: NodePort (Pengujian)** ```bash -# Edit service type +# Edit tipe service kubectl patch svc grafana -n cloudlab-monitoring -p '{"spec":{"type":"NodePort"}}' -# Get NodePort +# Dapatkan NodePort kubectl get svc grafana -n cloudlab-monitoring -# Access via Minikube IP +# Akses via IP Minikube minikube ip # http://: ``` ### 15. Dimana saya bisa belajar lebih lanjut tentang Kubernetes? -**Official Resources:** -- [Kubernetes Documentation](https://kubernetes.io/docs/) -- [Kubernetes Tutorials](https://kubernetes.io/docs/tutorials/) -- [kubectl Cheat Sheet](https://kubernetes.io/docs/reference/kubectl/cheatsheet/) +**Sumber Daya Resmi:** +- [Dokumentasi Kubernetes](https://kubernetes.io/docs/) +- [Tutorial Kubernetes](https://kubernetes.io/docs/tutorials/) +- [Cheat Sheet kubectl](https://kubernetes.io/docs/reference/kubectl/cheatsheet/) -**Interactive Learning:** -- [Katacoda Kubernetes Scenarios](https://www.katacoda.com/courses/kubernetes) +**Pembelajaran Interaktif:** +- [Skenario Katacoda Kubernetes](https://www.katacoda.com/courses/kubernetes) - [Play with Kubernetes](https://labs.play-with-k8s.com/) -**Books:** -- "Kubernetes Up & Running" by Kelsey Hightower -- "The Kubernetes Book" by Nigel Poulton +**Buku:** +- "Kubernetes Up & Running" oleh Kelsey Hightower +- "The Kubernetes Book" oleh Nigel Poulton -**YouTube Channels:** +**Saluran YouTube:** - TechWorld with Nana - Just me and Opensource - KodeKloud --- -## πŸ†˜ Masih Ada Pertanyaan? +## Masih Ada Pertanyaan? Jika pertanyaan Anda tidak terjawab di sini: -1. Check [main README](../README.md) -2. Check [k8s/README.md](README.md) -3. Check [MIGRATION.md](../MIGRATION.md) +1. Cek [README utama](../README.md) +2. Cek [k8s/README.md](README.md) +3. Cek [MIGRATION.md](../MIGRATION.md) 4. Buat issue di repository -**Happy Learning! πŸš€** +**Selamat Belajar!** diff --git a/k8s/README.md b/k8s/README.md index 8543742..dfc5174 100644 --- a/k8s/README.md +++ b/k8s/README.md @@ -1,42 +1,42 @@ -# Kubernetes Deployment Guide +# Panduan Deployment Kubernetes Panduan lengkap untuk deploy CloudLab ke Kubernetes cluster. -## πŸ“‹ Prerequisites +## Prasyarat -### Required Tools +### Alat yang Dibutuhkan - **kubectl** v1.28+ - Kubernetes CLI - **Docker** v20.10+ - Container runtime -- **Kubernetes cluster** - Salah satu dari: - - Minikube (local development) +- **Cluster Kubernetes** - Salah satu dari: + - Minikube (pengembangan lokal) - Kind (Kubernetes in Docker) - - GKE/EKS/AKS (cloud managed) + - GKE/EKS/AKS (managed cloud) - kubeadm/k3s (self-managed) -### Optional Tools +### Alat Opsional - **Helm** v3.0+ - Package manager - **k9s** - Terminal UI untuk Kubernetes - **kubectx/kubens** - Context dan namespace switching - **kustomize** - Configuration management (built-in kubectl) -## πŸ“ Understanding Directory Structure +## Memahami Struktur Direktori -> **⚠️ PENTING:** Jangan bingung antara `apps/` dan `k8s/apps/` - mereka **BERBEDA**! +> **PENTING:** Jangan bingung antara direktori `apps/` dan `k8s/apps/` - keduanya **BERBEDA**. ``` cloud-lab/ -β”œβ”€β”€ apps/ # πŸ“¦ SOURCE CODE (untuk build images) +β”œβ”€β”€ apps/ # SOURCE CODE (untuk build images) β”‚ └── demo-apps/ β”‚ β”œβ”€β”€ nodejs-app/ # ← Dockerfile, package.json, server.js β”‚ └── python-app/ # ← Dockerfile, requirements.txt, app.py β”‚ -└── k8s/ # ☸️ KUBERNETES CONFIGS (untuk deploy) - └── apps/ # πŸš€ DEPLOYMENT MANIFESTS +└── k8s/ # KUBERNETES CONFIGS (untuk deploy) + └── apps/ # DEPLOYMENT MANIFESTS β”œβ”€β”€ nodejs-app/ # ← deployment.yaml, service.yaml, hpa.yaml └── python-app/ # ← deployment.yaml, service.yaml, hpa.yaml ``` -**Workflow:** +**Alur Kerja:** 1. **Build** dari `apps/` β†’ Docker image 2. **Deploy** dengan `k8s/apps/` β†’ Running pods @@ -44,20 +44,20 @@ cloud-lab/ - `apps/` = Resep masakan (cara buat) - `k8s/apps/` = Menu restoran (cara sajikan) -Lihat [main README](../README.md#struktur-direktori) untuk penjelasan lengkap. +Lihat [README utama](../README.md#struktur-direktori) untuk penjelasan lengkap. -## πŸš€ Quick Start +## Panduan Memulai Cepat (Quick Start) -### 1. Setup Kubernetes Cluster +### 1. Setup Cluster Kubernetes -#### Option A: Minikube (Recommended untuk Development) +#### Opsi A: Minikube (Disarankan untuk Pengembangan) ```bash # Install Minikube curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube -# Start cluster dengan resources yang cukup +# Mulai cluster dengan resources yang cukup minikube start --cpus=4 --memory=8192 --disk-size=20g # Enable addons @@ -65,12 +65,12 @@ minikube addons enable ingress minikube addons enable metrics-server minikube addons enable storage-provisioner -# Verify cluster +# Verifikasi cluster kubectl cluster-info kubectl get nodes ``` -#### Option B: Kind (Kubernetes in Docker) +#### Opsi B: Kind (Kubernetes in Docker) ```bash # Install Kind @@ -78,7 +78,7 @@ curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64 chmod +x ./kind sudo mv ./kind /usr/local/bin/kind -# Create cluster dengan config +# Buat cluster dengan konfigurasi cat < -n cloudlab-apps -# Execute command di pod +# Eksekusi perintah di pod kubectl exec -it -n cloudlab-apps -- /bin/sh -# Check events +# Cek events kubectl get events -n cloudlab-apps --sort-by='.lastTimestamp' -# Check resource usage +# Cek penggunaan resource kubectl top nodes kubectl top pods -n cloudlab-apps ``` -## πŸ§ͺ Testing +## Pengujian (Testing) -### Health Checks +### Pemeriksaan Kesehatan (Health Checks) ```bash # Test health endpoints via port-forward @@ -329,7 +329,7 @@ kubectl port-forward svc/python-app 5000:5000 -n cloudlab-apps & curl http://localhost:5000/health ``` -### Load Testing +### Pengujian Beban (Load Testing) ```bash # Generate load untuk test autoscaling @@ -342,30 +342,30 @@ while true; do wget -q -O- http://nodejs-app.cloudlab-apps.svc.cluster.local:300 kubectl get hpa -n cloudlab-apps --watch ``` -## πŸ”’ Security +## Keamanan -### Network Policies (Optional) +### Network Policies (Opsional) ```bash -# Apply network policies untuk isolasi +# Terapkan network policies untuk isolasi kubectl apply -f k8s/network-policies/ ``` ### RBAC ```bash -# Check service accounts +# Cek service accounts kubectl get serviceaccounts -n cloudlab-monitoring -# Check roles +# Cek roles kubectl get clusterroles | grep prometheus kubectl get clusterrolebindings | grep prometheus ``` -### Secrets Management +### Manajemen Secrets ```bash -# View secrets (encoded) +# Lihat secrets (encoded) kubectl get secrets -n cloudlab-apps kubectl get secrets -n cloudlab-monitoring @@ -373,95 +373,95 @@ kubectl get secrets -n cloudlab-monitoring kubectl get secret cloudlab-tls -n cloudlab-apps -o jsonpath='{.data.tls\.crt}' | base64 -d ``` -## 🧹 Cleanup +## Pembersihan (Cleanup) ```bash -# Delete semua resources +# Hapus semua resources kubectl delete -k k8s/ -# Atau delete per namespace +# Atau hapus per namespace kubectl delete namespace cloudlab-apps kubectl delete namespace cloudlab-monitoring -# Delete cluster (Minikube) +# Hapus cluster (Minikube) minikube delete -# Delete cluster (Kind) +# Hapus cluster (Kind) kind delete cluster ``` -## πŸ› οΈ Troubleshooting +## Pemecahan Masalah (Troubleshooting) -### Pods tidak start +### Pods tidak mulai ```bash -# Check pod status +# Cek status pod kubectl get pods -n cloudlab-apps -# Describe pod untuk lihat events +# Deskripsikan pod untuk melihat events kubectl describe pod -n cloudlab-apps -# Check logs +# Cek logs kubectl logs -n cloudlab-apps -# Common issues: +# Masalah umum: # - ImagePullBackOff: Image tidak ditemukan # - CrashLoopBackOff: Container crash saat start # - Pending: Tidak cukup resources ``` -### Ingress tidak accessible +### Ingress tidak dapat diakses ```bash -# Check ingress controller +# Cek ingress controller kubectl get pods -n ingress-nginx -# Check ingress resource +# Cek resource ingress kubectl describe ingress cloudlab-ingress -n cloudlab-apps -# Check service endpoints +# Cek endpoints service kubectl get endpoints -n cloudlab-apps -# Untuk Minikube, pastikan tunnel running +# Untuk Minikube, pastikan tunnel berjalan minikube tunnel ``` -### Prometheus tidak scrape metrics +### Prometheus tidak mengambil metrics ```bash -# Check Prometheus targets +# Cek targets Prometheus kubectl port-forward svc/prometheus 9090:9090 -n cloudlab-monitoring # Buka http://localhost:9090/targets -# Check service discovery +# Cek service discovery kubectl get servicemonitors -n cloudlab-monitoring -# Check pod annotations +# Cek anotasi pod kubectl get pod -n cloudlab-apps -o yaml | grep prometheus.io ``` -### Storage issues +### Masalah penyimpanan (Storage) ```bash -# Check PVCs +# Cek PVCs kubectl get pvc -n cloudlab-monitoring -# Check PVs +# Cek PVs kubectl get pv -# Describe PVC untuk lihat events +# Deskripsikan PVC untuk melihat events kubectl describe pvc grafana-storage -n cloudlab-monitoring -# Untuk Minikube, pastikan storage provisioner enabled +# Untuk Minikube, pastikan storage provisioner aktif minikube addons enable storage-provisioner ``` -## πŸ“š Advanced Topics +## Topik Tingkat Lanjut -### Helm Deployment +### Deployment Menggunakan Helm ```bash -# Install dengan Helm (jika helm charts sudah dibuat) +# Install dengan Helm (jika chart helm sudah dibuat) helm install cloudlab ./helm/cloudlab -n cloudlab-apps --create-namespace # Upgrade @@ -495,26 +495,26 @@ kubectl label namespace cloudlab-apps istio-injection=enabled kubectl rollout restart deployment -n cloudlab-apps ``` -## πŸ”— Resources +## Sumber Daya -- [Kubernetes Documentation](https://kubernetes.io/docs/) -- [kubectl Cheat Sheet](https://kubernetes.io/docs/reference/kubectl/cheatsheet/) -- [Kustomize Documentation](https://kustomize.io/) -- [Helm Documentation](https://helm.sh/docs/) -- [Prometheus Operator](https://prometheus-operator.dev/) +- [Dokumentasi Kubernetes](https://kubernetes.io/docs/) +- [Cheat Sheet kubectl](https://kubernetes.io/docs/reference/kubectl/cheatsheet/) +- [Dokumentasi Kustomize](https://kustomize.io/) +- [Dokumentasi Helm](https://helm.sh/docs/) +- [Operator Prometheus](https://prometheus-operator.dev/) -## ❓ FAQ +## FAQ -Punya pertanyaan? Check [FAQ.md](FAQ.md) untuk jawaban pertanyaan umum seperti: +Punya pertanyaan? Cek [FAQ.md](FAQ.md) untuk jawaban pertanyaan umum seperti: - Mengapa ada `apps/` dan `k8s/apps/`? - Bagaimana cara update aplikasi? - Troubleshooting pods yang pending - Dan banyak lagi... -## πŸ“ž Support +## Dukungan -Untuk issues atau pertanyaan, silakan buat issue di repository. +Untuk masalah atau pertanyaan, silakan buat issue di repository. --- -**Happy Kubernetes Deployment! πŸš€** +**Selamat Melakukan Deployment Kubernetes!** diff --git a/monitoring/grafana/DASHBOARDS.md b/monitoring/grafana/DASHBOARDS.md index a561462..6a57b06 100644 --- a/monitoring/grafana/DASHBOARDS.md +++ b/monitoring/grafana/DASHBOARDS.md @@ -1,115 +1,115 @@ -# Grafana Dashboards - CloudLab +# Dashboard Grafana - CloudLab -## Available Dashboards +## Dashboard Tersedia ### 1. CloudLab Overview **UID**: `cloudlab-overview` -Dashboard utama untuk monitoring semua services dalam CloudLab environment. +Dashboard utama untuk memantau semua layanan dalam lingkungan CloudLab. -**Panels**: -- HTTP Request Rate - Request per second untuk semua services -- HTTP Response Time - p50 dan p95 percentiles -- Error Rate (5xx) - Gauge untuk monitoring error rate -- CPU Usage - CPU usage per service -- Memory Usage - Memory consumption per service -- Service Status - Up/Down status untuk semua services +**Panel**: +- HTTP Request Rate - Permintaan per detik untuk semua layanan +- HTTP Response Time - Persentil p50 dan p95 +- Error Rate (5xx) - Gauge untuk memantau tingkat kesalahan +- CPU Usage - Penggunaan CPU per layanan +- Memory Usage - Konsumsi memori per layanan +- Service Status - Status Up/Down untuk semua layanan -**Refresh**: 5 seconds -**Time Range**: Last 15 minutes +**Refresh**: 5 detik +**Rentang Waktu**: 15 menit terakhir --- ### 2. Node.js Application **UID**: `cloudlab-nodejs` -Dashboard khusus untuk monitoring Node.js Express application. +Dashboard khusus untuk memantau aplikasi Node.js Express. -**Panels**: -- Request Rate by Endpoint - Breakdown request rate per endpoint -- Response Time Percentiles - p50 dan p95 per route -- Event Loop Lag - Node.js event loop performance -- Heap Memory Usage - Heap used vs heap total +**Panel**: +- Request Rate by Endpoint - Rincian tingkat permintaan per endpoint +- Response Time Percentiles - p50 dan p95 per rute +- Event Loop Lag - Performa event loop Node.js +- Heap Memory Usage - Heap digunakan vs heap total -**Refresh**: 5 seconds -**Time Range**: Last 15 minutes +**Refresh**: 5 detik +**Rentang Waktu**: 15 menit terakhir **Metrics**: -- `http_requests_total` - Total HTTP requests -- `http_request_duration_seconds` - Request duration histogram -- `nodejs_eventloop_lag_seconds` - Event loop lag -- `nodejs_heap_size_used_bytes` - Heap memory used -- `nodejs_heap_size_total_bytes` - Total heap size +- `http_requests_total` - Total permintaan HTTP +- `http_request_duration_seconds` - Histogram durasi permintaan +- `nodejs_eventloop_lag_seconds` - Lag event loop +- `nodejs_heap_size_used_bytes` - Memori heap yang digunakan +- `nodejs_heap_size_total_bytes` - Total ukuran heap --- ### 3. Python API **UID**: `cloudlab-python` -Dashboard khusus untuk monitoring Python Flask API. +Dashboard khusus untuk memantau Python Flask API. -**Panels**: -- API Request Rate - Request per second per endpoint -- API Response Time - p50 dan p95 percentiles -- CPU Usage - Process CPU usage -- Memory Usage - Process memory consumption -- Error Rate - Error rate gauge +**Panel**: +- API Request Rate - Permintaan per detik per endpoint +- API Response Time - Persentil p50 dan p95 +- CPU Usage - Penggunaan CPU proses +- Memory Usage - Konsumsi memori proses +- Error Rate - Gauge tingkat kesalahan -**Refresh**: 5 seconds -**Time Range**: Last 15 minutes +**Refresh**: 5 detik +**Rentang Waktu**: 15 menit terakhir **Metrics**: -- `http_requests_total` - Total HTTP requests -- `http_request_duration_seconds` - Request duration histogram -- `process_cpu_seconds_total` - CPU time -- `process_resident_memory_bytes` - Memory usage +- `http_requests_total` - Total permintaan HTTP +- `http_request_duration_seconds` - Histogram durasi permintaan +- `process_cpu_seconds_total` - Waktu CPU +- `process_resident_memory_bytes` - Penggunaan memori --- -## Accessing Dashboards +## Mengakses Dashboard -1. Start CloudLab services: +1. Mulai layanan CloudLab: ```bash docker-compose up -d ``` -2. Open Grafana: +2. Buka Grafana: ``` http://localhost:3000 ``` -3. Login dengan credentials: +3. Login dengan kredensial: - Username: `admin` - Password: `admin123` -4. Dashboards akan otomatis tersedia di: +4. Dashboard akan otomatis tersedia di: - Home β†’ Dashboards β†’ CloudLab Overview - Home β†’ Dashboards β†’ CloudLab - Node.js Application - Home β†’ Dashboards β†’ CloudLab - Python API -## Customization +## Kustomisasi -Untuk menambah atau memodifikasi dashboards: +Untuk menambah atau memodifikasi dashboard: -1. Edit JSON files di `monitoring/grafana/dashboards/` +1. Edit file JSON di `monitoring/grafana/dashboards/` 2. Atau buat dashboard baru via Grafana UI -3. Export dashboard sebagai JSON -4. Save ke `monitoring/grafana/dashboards/` +3. Ekspor dashboard sebagai JSON +4. Simpan ke `monitoring/grafana/dashboards/` 5. Restart Grafana: `docker-compose restart grafana` -## Troubleshooting +## Pemecahan Masalah (Troubleshooting) ### Dashboard tidak muncul -- Check Grafana logs: `docker-compose logs grafana` -- Verify provisioning config: `monitoring/grafana/dashboards.yml` -- Ensure JSON files valid +- Cek logs Grafana: `docker-compose logs grafana` +- Verifikasi konfigurasi provisioning: `monitoring/grafana/dashboards.yml` +- Pastikan file JSON valid -### No data in panels -- Check Prometheus targets: http://localhost:9090/targets -- Verify applications expose `/metrics` endpoint -- Check Prometheus datasource connection in Grafana +### Tidak ada data di panel +- Cek target Prometheus: http://localhost:9090/targets +- Verifikasi aplikasi mengekspos endpoint `/metrics` +- Cek koneksi datasource Prometheus di Grafana ### Metrics tidak sesuai -- Verify metric names di Prometheus: http://localhost:9090/graph -- Check PromQL queries di dashboard panels -- Ensure label selectors match your services +- Verifikasi nama metric di Prometheus: http://localhost:9090/graph +- Cek query PromQL di panel dashboard +- Pastikan label selector cocok dengan layanan Anda