‏ ‏ ‎ ‏ ‏ ‎

1. Precondition

  • Docker should be installed.

2. Create the Project

quarkusio get started
Figure 1. quarkus.io → START CODING
  • Folgende Libraries werden ausgewählt:

    • RESTEasy Reactive Jackson

2.1. Variante 1 - download the zip

  • Generate your application

  • DOWNLOAD THE ZIP

  • Extract the zip

  • cd primer-leocloud

  • open project in IDE

2.2. Variante 2 - use a git repo

2.2.1. Push to git-repo

quarkusio push to github
quarkusio github info

2.2.2. Clone git-repo

intellij community startscreen
github repo todo
Figure 2. copy the url into the clipboard
intellij get from vcs
Figure 3. paste url in intellij-form
intellij trust project

3. Demo-Code and http-requests

primer leocloud democode

4. Install kubernetes extension

Liste aller Extensions
./mvnw quarkus:list-extensions
Installieren der benötigten Extensions
./mvnw quarkus:add-extension -Dextensions="kubernetes,jib"

5. Docker-Image-Registry

5.1. Erstellen eines Zugriffstokens

  1. Öffnen von https://github.com

  2. Settings - <> Developer Settings - Personal Access Tokens - Tokens (classic) - Generate new token - Generate new token (classic)

  3. Give the token a name i.e. ghcr-token

  4. Give a expiration date i.e. 90 days

  5. Check write:packages and workflow

    token ghcr
  6. Click Generate token

    token ghcr2
  7. Copy the token into a text-file

    token ghcr3

5.2. Login into Registry

  • Wir verwenden die github-registry!

docker login ghcr.io
output
Username: t.stuetz@htl-leonding.ac.at (1)
Password: *********  (2)
Login Succeeded
1 Use your github account name
2 For the password use the token

6. Config Quarkus App

# github-account-name
quarkus.container-image.group=htl-leonding

quarkus.container-image.name=primer-leocloud
quarkus.container-image.tag=1.0.0

# LeoCloud namespace
quarkus.kubernetes.namespace=student-t-stuetz

# docker registry
quarkus.container-image.registry=ghcr.io


# ingress
quarkus.kubernetes.ingress.expose=true
quarkus.kubernetes.ingress.host=student.cloud.htl-leonding.ac.at
# leocloud-prefix
quarkus.kubernetes.ports.http.path=/t.stuetz(/|$)(.*)$

# leocloud-prefix
quarkus.http.root-path=t.stuetz

# für debuggen (requests werden in quarkus log angezeigt)
quarkus.http.access-log.enabled=true

7. Create and Push the Container Image using Jib

7.1. Push Docker Image into Docker Registry (jar)

./mvnw clean package -DskipTests -Dquarkus.container-image.push=true
output
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------< at.htl:primer-leocloud >-----------------------
[INFO] Building primer-leocloud 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ primer-leocloud ---
[INFO] Deleting /Users/stuetz/work/2023-ph-seminar/labs/primer-leocloud/target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ primer-leocloud ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO]
[INFO] --- quarkus-maven-plugin:2.13.3.Final:generate-code (default) @ primer-leocloud ---
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ primer-leocloud ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /Users/stuetz/work/2023-ph-seminar/labs/primer-leocloud/target/classes
[INFO]
[INFO] --- quarkus-maven-plugin:2.13.3.Final:generate-code-tests (default) @ primer-leocloud ---
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ primer-leocloud ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/stuetz/work/2023-ph-seminar/labs/primer-leocloud/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ primer-leocloud ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to /Users/stuetz/work/2023-ph-seminar/labs/primer-leocloud/target/test-classes
[INFO]
[INFO] --- maven-surefire-plugin:3.0.0-M7:test (default-test) @ primer-leocloud ---
[INFO] Tests are skipped.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ primer-leocloud ---
[INFO] Building jar: /Users/stuetz/work/2023-ph-seminar/labs/primer-leocloud/target/primer-leocloud-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- quarkus-maven-plugin:2.13.3.Final:build (default) @ primer-leocloud ---
[INFO] Checking for existing resources in: /Users/stuetz/work/2023-ph-seminar/labs/primer-leocloud/src/main/kubernetes.
[INFO] [io.quarkus.container.image.jib.deployment.JibProcessor] Starting (local) container image build for jar using jib.
[WARNING] [io.quarkus.container.image.jib.deployment.JibProcessor] Base image 'registry.access.redhat.com/ubi8/openjdk-17-runtime:1.14' does not use a specific image digest - build may not be reproducible
[INFO] [io.quarkus.container.image.jib.deployment.JibProcessor] LogEvent [level=INFO, message=trying docker-credential-desktop for registry.cloud.htl-leonding.ac.at]
[INFO] [io.quarkus.container.image.jib.deployment.JibProcessor] LogEvent [level=LIFECYCLE, message=Using credentials from Docker config (/Users/stuetz/.docker/config.json) for registry.cloud.htl-leonding.ac.at/t.stuetz/primer-leocloud:1.0.0]
[INFO] [io.quarkus.container.image.jib.deployment.JibProcessor] Using base image with digest: sha256:43618c504657b12e121945ad6c52ce426758fbd2158b820a9fc5babd2970bdde
[INFO] [io.quarkus.container.image.jib.deployment.JibProcessor] Container entrypoint set to [java, -Djava.util.logging.manager=org.jboss.logmanager.LogManager, -jar, quarkus-run.jar]
[INFO] [io.quarkus.container.image.jib.deployment.JibProcessor] Pushed container image registry.cloud.htl-leonding.ac.at/t.stuetz/primer-leocloud:1.0.0 (sha256:7ba60a294b437f9053c840c135eb449b30b40e677272288d069d3f34269bfbef)

[INFO] [io.quarkus.deployment.QuarkusAugmentor] Quarkus augmentation completed in 67824ms
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:09 min
[INFO] Finished at: 2022-11-06T18:22:50+01:00
[INFO] ------------------------------------------------------------------------

7.2. Make Docker Image in Package public

packages in github
  • click your package

  • click Package settings

packages in github 2
  • Click Change visibility in "Danger Zone"

  • Check Public

  • Confirm package name

  • Click I understand the consequences; change package visibility

packages in github 3

8. Deploy your application to your Kubernetes cluster

kubectl apply -f target/kubernetes/kubernetes.yaml
output
service/primer-leocloud created
deployment.apps/primer-leocloud created

8.1. Delete your Cluster

kubectl delete -f target/kubernetes/kubernetes.yml

9. Zugriff auf die App

kubectl get pod -o wide
NAME                                    READY   STATUS    RESTARTS   AGE   IP             NODE   NOMINATED NODE   READINESS GATES
kubernetes-dashboard-6db7c545bb-j9lzq   1/1     Running   0          38d   10.244.1.28    hulk   <none>           <none>
primer-leocloud-86dd7864f4-7xllm        1/1     Running   0          16m   10.244.1.204   hulk   <none>           <none>

10. Neu kompilieren, bauen und deployen

./mvnw clean package -Dquarkus.kubernetes.deploy=true

11. Sources