Skip to content

CynicDog/Akouo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Deploying Vert.x in Quarkus Application on GKE

This project demonstrates deploying a Quarkus-based Vert.x application to Google Kubernetes Engine (GKE).

Development Environment

  • Operating System: macOS 13.2.1 (Build 22D68)

Technologies Used

  • Quarkus: A Kubernetes-native Java framework designed for fast startup and low memory footprint.
  • Minikube: A tool to run a single-node Kubernetes cluster locally for development and testing.
  • Google Kubernetes Engine (GKE): A managed Kubernetes service provided by Google Cloud Platform (GCP).
  • Jib: A container image building tool that simplifies packaging Java applications into container images without needing a Dockerfile.

Local Deployment with Minikube

Prerequisites

  • Configure Kubernetes node port and Spotify credentials in application.properties file as follows:
%prod.host={minikube_ip}
%prod.port={service_port}
quarkus.kubernetes.node-port={port}
...
spotify.client-id={SPOTIFY_APP_CLIENT_ID}
spotify.client-secret={SPOTIFY_APP_CLIENT_SECRET}
  • Ensure Minikube is installed and initialized as VM, with the driver of qemu:
minikube start --driver qemu --network socket_vmnet

Minikube virtual machine driver installation: https://minikube.sigs.k8s.io/docs/drivers/qemu/

Configure Docker Client for Minikube

Configure the local Docker client to use the Docker daemon running inside Minikube:

eval $(minikube docker-env)

Persistence Configuration and Running up the Service

Generate Kubernetes Secret to initialize the database server and grant access:

kubectl create secret generic db-credentials --from-literal=username={USERNAME} --from-literal=password={PASSWORD}
kubectl apply -f postgresql_kubernetes.yml
kubectl apply -f mongodb_kubernetes.yml  

Package and Deploy the Application

Build and deploy the application to Minikube with ARM64 platform support:

mvn clean package -Dquarkus.container-image.build=true \
    -Dquarkus.jib.platforms=linux/arm64/v8 \
    -Dquarkus.kubernetes.deploy=true

Test Deployment

Make a request to the deployed service to ensure successful deployment:

http {minikube_ip}:{service_port}/api/person \
  Content-Type:application/json \
  name="John Doe" \
  age:=30

http {minikube_ip}:{service_port}/api/people   

Deployment to Google Kubernetes Engine (GKE)

Configure Google Cloud SDK

Initialize and configure the Google Cloud SDK for authentication:

gcloud auth login
gcloud init

Configure Docker Authentication for GCR

Configure Docker authentication information to interact with Google Artifact Registry for Docker:

gcloud auth configure-docker

Build and Push Container Image to GCR

Build and push the container image to Google Container Registry using Jib:

mvn clean package -Dquarkus.container-image.build=true \
    -Dquarkus.container-image.push=true \
    -Dquarkus.jib.platforms=linux/arm64/v8

Create a GKE Cluster

Create a Kubernetes cluster on Google Kubernetes Engine: Capture 2024-04-07 at 11 48 25 AM

Connect to GKE Cluster

Connect your terminal to the generated Kubernetes cluster on GKE:

gcloud container clusters get-credentials {YOUR_CLUSTER_NAME} --region {YOUR_REGION} --project {YOUR_PROJECT_ID}

Deploy the Application to GKE

Deploy the Quarkus application to the GKE cluster:

mvn clean package -Dquarkus.kubernetes.deploy=true

Conclusion