- Deploying Vert.x in Quarkus Application on GKE
- Development Environment
- Technologies Used
- Local Deployment with Minikube
- Deployment to Google Kubernetes Engine (GKE)
- Conclusion
This project demonstrates deploying a Quarkus-based Vert.x application to Google Kubernetes Engine (GKE).
- Operating System: macOS 13.2.1 (Build 22D68)
- 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.
- Ensure Minikube is installed and initialized:
minikube start
Configure the local Docker client to use the Docker daemon running inside Minikube:
eval $(minikube docker-env)
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
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
Make a request to the deployed service to ensure successful deployment:
kubectl exec -it vertx-quarkus-demo-<POD_ID> -- /bin/bash
curl http://vertx-quarkus-demo/greeting
Initialize and configure the Google Cloud SDK for authentication:
gcloud auth login
gcloud init
Configure Docker authentication information to interact with Google Artifact Registry for Docker:
gcloud auth configure-docker
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 Kubernetes cluster on Google Kubernetes Engine:
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 Quarkus application to the GKE cluster:
mvn clean package -Dquarkus.kubernetes.deploy=true
To expose a Quarkus application to the public via Ingress with a global static IP address, follow these steps:
-
Create a Global Static IP Address:
gcloud compute addresses create {A_NAME_FOR_GLOBAL_STATIC_IP} --global
-
Update Configuration: Add the following configuration, ensuring to include double quotation marks as shown:
quarkus: kubernetes: ingress: expose: true annotations: "kubernetes.io/ingress.global-static-ip-name": "{A_NAME_FOR_GLOBAL_STATIC_IP}"
-
Verify Configuration: Once configured, the generated
kubernetes.yml
manifest should contain the following in themetadata.annotations
section:metadata: annotations: kubernetes.io/ingress.global-static-ip-name: {A_NAME_FOR_GLOBAL_STATIC_IP}
-
Check Deployment: Verify if the application is deployed with the reserved static IP address:
kubectl get ingress
Example output:
NAME CLASS HOSTS ADDRESS PORTS AGE {PROJECT} <none> * {GIVEN_STATIC_IP} 80 31m
-
Test Deployment: Ensure the application is accessible using the reserved static IP address:
http http://{GIVEN_STATIC_IP}/
To point your domain to the deployed application using the reserved static IP address, you can use the Google Cloud DNS service:
gcloud dns --project={YOUR_PROJECT_NAME} record-sets create {ENTER_PREFIX_HERE}.{YOUR_DNS_NAME} --zone={YOUR_ZONE} --type="A" --ttl="300" --rrdatas={RESERVED_STATIC_IP}
By following these steps, you can deploy your Vert.x in Quarkus application both locally with Minikube for testing and on Google Kubernetes Engine (GKE) for production. This streamlined deployment process leverages modern tools like Jib and GKE to simplify container image building and Kubernetes orchestration.