- Docker
- Kubernetes
- kubectl
PENTING: Image untuk semua services sudah tersedia secara public di Docker Hub dan sudah dikonfigurasi di deployment YAML:
farrellmuhammadhanau/auth-service:latestfarrellmuhammadhanau/attendee-service:latestfarrellmuhammadhanau/room-service:latestyodh4/class-service:latestyodh4/schedule-service:latestyodh4/attendance-service:latest
Anda dapat langsung ke Step 2 jika ingin menggunakan image yang sudah ada.
Masuk ke folder microservice yang ingin di-deploy:
cd [nama-service]-service/
# Build image
docker build -t [docker-username]/[nama-service]-service:latest .
# Push ke Docker Hub
docker push [docker-username]/[nama-service]-service:latestContoh:
cd auth-service/
docker build -t yourusername/auth-service:latest .
docker push yourusername/auth-service:latestKemudian update image name di deployment YAML:
Edit file deployment/[nama-service]-service/[nama-service]-service-deployment.yaml:
spec:
containers:
- name: [nama-service]
image: yourusername/[nama-service]-service:latest # Ganti dengan image Anda
imagePullPolicy: AlwaysAtau gunakan command kubectl:
kubectl set image deployment/[nama-service] \
[nama-service]=yourusername/[nama-service]-service:latestMasuk ke folder deployment untuk service tersebut:
cd deployment/[nama-service]-service/
# Deploy PersistentVolumeClaim
kubectl apply -f postgres-pvc.yaml
# Deploy PostgreSQL
kubectl apply -f postgres-deployment.yaml
# Verify
kubectl get pods | grep postgresPastikan image name di [nama-service]-service-deployment.yaml sudah sesuai dengan yang Anda push.
# Deploy microservice
kubectl apply -f [nama-service]-service-deployment.yaml
# Verify
kubectl get pods
kubectl get servicesServices menggunakan LoadBalancer dan akan mendapat IP public otomatis:
# Watch sampai External IP assigned
kubectl get service [nama-service]-service --watch
# Atau cek semua services
kubectl get servicesOutput example:
NAME TYPE EXTERNAL-IP PORT(S) AGE
auth-service LoadBalancer xxx.xxx.xxx.x 8000:31234/TCP 5m
- Auth Service
- Attendee Service
- Room Service
- Class Service (update
ATTENDEE_SERVICE_URLdengan IP dari step 4) - Schedule Service (update
ROOM_SERVICE_URLdanCLASS_SERVICE_URL) - Attendance Service (update semua service URLs)
Note: Beberapa services memerlukan environment variable berisi IP dari services lain. Update deployment YAML jika diperlukan, lalu apply ulang.
# Check status
kubectl get pods
kubectl get services
# Check logs jika ada error
kubectl logs <pod-name>
# Test endpoint
curl http://<EXTERNAL-IP>:8000/docsSetelah semua services di-deploy, beberapa services memerlukan IP dari services lain untuk berkomunikasi.
Jalankan di setiap VM atau cluster:
kubectl get servicesCatat IP untuk setiap service (gunakan Public IP VM jika EXTERNAL-IP menunjukkan private IP):
Auth Service: http://<IP>:8000
Attendee Service: http://<IP>:8000
Room Service: http://<IP>:8000
Class Service: http://<IP>:8000
Schedule Service: http://<IP>:8000
Edit deployment/class-service/class-service-deployment.yaml:
env:
- name: ATTENDEE_SERVICE_URL
value: http://<ATTENDEE-SERVICE-IP>:8000Edit deployment/schedule-service/schedule-service-deployment.yaml:
env:
- name: ROOM_SERVICE_URL
value: http://<ROOM-SERVICE-IP>:8000
- name: CLASS_SERVICE_URL
value: http://<CLASS-SERVICE-IP>:8000Edit deployment/attendance-service/attendance-service-deployment.yaml:
env:
- name: ATTENDEE_SERVICE_URL
value: http://<ATTENDEE-SERVICE-IP>:8000
- name: CLASS_SERVICE_URL
value: http://<CLASS-SERVICE-IP>:8000
- name: SCHEDULE_SERVICE_URL
value: http://<SCHEDULE-SERVICE-IP>:8000
- name: ROOM_SERVICE_URL
value: http://<ROOM-SERVICE-IP>:8000Setelah edit YAML, apply ulang deployment:
# Class Service
kubectl apply -f deployment/class-service/class-service-deployment.yaml
kubectl rollout restart deployment class-service
# Schedule Service
kubectl apply -f deployment/schedule-service/schedule-service-deployment.yaml
kubectl rollout restart deployment schedule-service
# Attendance Service
kubectl apply -f deployment/attendance-service/attendance-service-deployment.yaml
kubectl rollout restart deployment attendance-serviceCheck logs untuk memastikan tidak ada connection error:
kubectl logs -f deployment/class-service
kubectl logs -f deployment/schedule-service
kubectl logs -f deployment/attendance-serviceNote: IP akan berbeda setiap kali deploy di environment baru, jadi langkah ini wajib dilakukan saat setup pertama kali.