Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adds a camel-quarkus example using the quarkus openshift extension #42

Merged
merged 1 commit into from
Sep 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ java -javaagent:target/quarkus-app/lib/main/org.jolokia.jolokia-agent-jvm-2.0.1-

## How to deploy it to Kubernetes/OpenShift

This example is intended to be used by deploying to a Kubernetes/OpenShift cluster.
This example is intended to be used by deploying to a Kubernetes/OpenShift cluster. An [alternative example](https://github.com/hawtio/hawtio-online-examples/camel-quarkus-openshift) is available should the target cluster be OpenShift.

To deploy it to a cluster, firstly change the container image parameters in [pom.xml](pom.xml) to fit your development environment. (The default image name is `quay.io/hawtio/hawtio-online-example-camel-quarkus:latest`, which should be pushed to the `hawtio` organisation on [Quay.io](https://quay.io/).)

Expand Down Expand Up @@ -80,9 +80,9 @@ $ stern -oraw hawtio-online-example-camel-quarkus
+ hawtio-online-example-camel-quarkus-77f7bf4948-74hmb › hawtio-online-example-camel-quarkus
I> No access restrictor found, access to any MBean is allowed
Jolokia: Agent started with URL https://172.17.45.52:8778/jolokia/
_____________________________________
_____________________________________
< Hawtio Online Camel Quarkus Example >
-------------------------------------
-------------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
Expand Down
6 changes: 3 additions & 3 deletions camel-quarkus/pom.xml → camel-quarkus-kubernetes/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
<version>1.0.0</version>
</parent>

<artifactId>hawtio-online-example-camel-quarkus</artifactId>
<name>Hawtio Online Camel Quarkus Example</name>
<description>Hawtio Online :: Sample Camel Quarkus 3.x application</description>
<artifactId>hawtio-online-example-camel-quarkus-kube</artifactId>
<name>Kubernetes Hawtio Online Camel Quarkus Example</name>
<description>Hawtio Online :: Sample Kubernetes Camel Quarkus 3.x application</description>

<properties>
<skipITs>true</skipITs>
Expand Down
5 changes: 5 additions & 0 deletions camel-quarkus-openshift/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
*
!target/*-runner
!target/*-runner.jar
!target/lib/*
!target/quarkus-app/*
93 changes: 93 additions & 0 deletions camel-quarkus-openshift/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# Hawtio-Enabled Camel Quarkus Example for OpenShift

This sample application shows how to make it _hawtio-enabled_ with Camel Quarkus. Once deployed on OpenShift, it will be discovered by Hawtio Online.

## Highlights

- [pom.xml](pom.xml)

This project uses the Quarkus [OpenShift](https://quarkus.io/guides/deploying-to-openshift) extension to build a container image and deploy it to an OpenShift cluster. Should the target cluster be a different version of Kubernetes then an [alternative example](https://github.com/hawtio/hawtio-online-examples/camel-quarkus-openshift) is available.

The most important part in terms of the _hawtio-enabled_ configuration is defined in the `<properties>` section. To make it _hawtio-enabled_, the Jolokia agent must be attached to the application with HTTPS and SSL client authentication configured. The client principal should match those the Hawtio Online instance provides (the default is `hawtio-online.hawtio.svc`).

```xml
<properties>
<jolokia.protocol>https</jolokia.protocol>
<jolokia.host>*</jolokia.host>
<jolokia.port>8778</jolokia.port>
<jolokia.useSslClientAuthentication>true</jolokia.useSslClientAuthentication>
<jolokia.caCert>/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt</jolokia.caCert>
<jolokia.clientPrincipal.1>cn=hawtio-online.hawtio.svc</jolokia.clientPrincipal.1>
<jolokia.extendedClientCheck>true</jolokia.extendedClientCheck>
<jolokia.discoveryEnabled>false</jolokia.discoveryEnabled>
</properties>
```

## How to run locally

Run in development mode with:

```console
mvn compile quarkus:dev
```

Or build the project and execute the runnable JAR:

```console
mvn package && java -jar target/quarkus-app/quarkus-run.jar
```

### Running with Jolokia agent locally

You can run this example with Jolokia JVM agent locally as follows:

```console
java -javaagent:target/quarkus-app/lib/main/org.jolokia.jolokia-agent-jvm-2.0.1-javaagent.jar -jar target/quarkus-app/quarkus-run.jar
```

## How to deploy it to OpenShift

This example is intended to be used by deploying to an OpenShift cluster.

To deploy it to a cluster, ensure that the console has access to the OpenShift cluster by logging into it. Then execute the following:

```console
mvn clean package -Dquarkus.kubernetes.deploy=true
```
After deployment is successful and the pod has started, the application log can be seen on the cluster like this:

```console
$ oc log hawtio-online-example-camel-quarkus-os-xxxxxxxxx-xxxxx
INFO exec -a "java" java -XX:MaxRAMPercentage=80.0 -XX:+UseParallelGC -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:+ExitOnOutOfMemoryError -javaagent:lib/main/org.jolokia.jolokia-agent-jvm-2.1.0-javaagent.jar=protocol=https,host=*,port=8778,useSslClientAuthentication=true,caCert=/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt,clientPrincipal.1=cn=hawtio-online.hawtio.svc,extendedClientCheck=true,discoveryEnabled=false -cp "." -jar /deployments/quarkus-run.jar
INFO running in /deployments
I> No access restrictor found, access to any MBean is allowed
Jolokia: Agent started with URL https://10.217.0.156:8778/jolokia/
__ ____ __ _____ ___ __ ____ ______
--/ __ \/ / / / _ | / _ \/ //_/ / / / __/
-/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
2024-09-12 13:37:27,570 INFO [org.apa.cam.qua.cor.CamelBootstrapRecorder] (main) Apache Camel Quarkus 3.14.0 is starting
2024-09-12 13:37:27,628 INFO [org.apa.cam.mai.MainSupport] (main) Apache Camel (Main) 4.7.0 is starting
2024-09-12 13:37:27,740 INFO [org.apa.cam.mai.BaseMainSupport] (main) Auto-configuration summary
2024-09-12 13:37:27,741 INFO [org.apa.cam.mai.BaseMainSupport] (main) [MicroProfilePropertiesSource] camel.context.name=SampleCamel
2024-09-12 13:37:27,848 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Detected: camel-debug JAR (Enabling Camel Debugging)
2024-09-12 13:37:27,994 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Apache Camel 4.7.0 (SampleCamel) is starting
2024-09-12 13:37:28,801 INFO [org.apa.cam.com.qua.QuartzComponent] (main) Setting org.quartz.scheduler.jmx.export=true to ensure QuartzScheduler(s) will be enlisted in JMX
2024-09-12 13:37:28,869 INFO [org.apa.cam.com.qua.QuartzEndpoint] (main) Job Camel_SampleCamel.cron (cron=0/10 * * * * ?, triggerType=CronTriggerImpl, jobClass=CamelJob) is scheduled. Next fire date is 2024-09-12T13:37:30.000+0000
2024-09-12 13:37:28,992 INFO [org.apa.cam.com.qua.QuartzEndpoint] (main) Job Camel_SampleCamel.simple (cron=null, triggerType=SimpleTriggerImpl, jobClass=CamelJob) is scheduled. Next fire date is 2024-09-12T13:37:28.987+0000
2024-09-12 13:37:29,140 INFO [org.apa.cam.mai.BaseMainSupport] (main) Property-placeholders summary
2024-09-12 13:37:29,140 INFO [org.apa.cam.mai.BaseMainSupport] (main) [MicroProfilePropertiesSource] quartz.cron=0/10 * * * * ?
2024-09-12 13:37:29,140 INFO [org.apa.cam.mai.BaseMainSupport] (main) [MicroProfilePropertiesSource] quartz.repeatInterval=10000
2024-09-12 13:37:29,141 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Routes startup (total:2)
2024-09-12 13:37:29,141 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Started cron (quartz://cron)
2024-09-12 13:37:29,141 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Started simple (quartz://simple)
2024-09-12 13:37:29,142 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Apache Camel 4.7.0 (SampleCamel) started in 1s147ms (build:0ms init:0ms start:1s147ms)
2024-09-12 13:37:29,142 INFO [org.apa.cam.imp.deb.DefaultBacklogDebugger] (main) Enabling Camel debugger
2024-09-12 13:37:29,143 INFO [org.apa.cam.com.qua.QuartzComponent] (main) Starting Quartz scheduler: org.quartz.impl.StdScheduler@44af588b
Hello Camel! - simple
2024-09-12 13:37:29,211 INFO [org.apa.cam.imp.deb.DebuggerJmxConnectorService] (Camel (camel-1) thread #1 - DebuggerJMXConnector) Debugger JMXConnector listening at: service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi/camel
Hello Camel! - cron
Hello Camel! - simple
Hello Camel! - cron
Hello Camel! - simple
```
220 changes: 220 additions & 0 deletions camel-quarkus-openshift/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>io.hawt.online.examples</groupId>
<artifactId>hawtio-online-examples</artifactId>
<version>1.0.0</version>
</parent>

<artifactId>hawtio-online-example-camel-quarkus-os</artifactId>
<name>OpenShift Hawtio Online Camel Quarkus Example</name>
<description>Hawtio Online :: Sample OpenShift Camel Quarkus 3.x application</description>

<properties>
<skipITs>true</skipITs>

<!--
The following are defined in the parent pom
* camel-version
* quarkus-version
* jolokia-version
-->

<!--
==========================================================================
=== Jolokia agent configuration for the connection with Hawtio Online
==========================================================================

It should use HTTPS and SSL client authentication at minimum.
The client principal should match those the Hawtio Online instance
provides (the default is `hawtio-online.hawtio.svc`).
-->
<jolokia.protocol>https</jolokia.protocol>
<jolokia.host>*</jolokia.host>
<jolokia.port>8778</jolokia.port>
<jolokia.useSslClientAuthentication>true</jolokia.useSslClientAuthentication>
<jolokia.caCert>/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt</jolokia.caCert>
<jolokia.clientPrincipal.1>cn=hawtio-online.hawtio.svc</jolokia.clientPrincipal.1>
<jolokia.extendedClientCheck>true</jolokia.extendedClientCheck>
<jolokia.discoveryEnabled>false</jolokia.discoveryEnabled>
</properties>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.quarkus.platform</groupId>
<artifactId>quarkus-bom</artifactId>
<version>${quarkus-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>io.quarkus.platform</groupId>
<artifactId>quarkus-camel-bom</artifactId>
<version>${quarkus-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-openshift</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-quartz</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-stream</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-mock</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-arc</artifactId>
</dependency>

<!--
This dependency is mandatory for enabling Camel management
via JMX / Hawtio.
-->
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-management</artifactId>
</dependency>

<!--
This dependency is required for viewing Camel routes source XML.
-->
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-jaxb</artifactId>
</dependency>

<!--
To enable Camel plugin debugging feature, add this dependency.
-->
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-debug</artifactId>
</dependency>

<!--
Include the jolokia agent jvm for access to JMX beans.
-->
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-agent-jvm</artifactId>
<version>${jolokia-version}</version>
<classifier>javaagent</classifier>
</dependency>

<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>

<plugins>
<plugin>
<groupId>io.quarkus.platform</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
<version>${quarkus-version}</version>
<extensions>true</extensions>
<executions>
<execution>
<goals>
<goal>build</goal>
<goal>generate-code</goal>
<goal>generate-code-tests</goal>
<goal>native-image-agent</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<parameters>true</parameters>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
<maven.home>${maven.home}</maven.home>
</systemPropertyVariables>
</configuration>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
<configuration>
<systemPropertyVariables>
<native.image.path>${project.build.directory}/${project.build.finalName}-runner</native.image.path>
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
<maven.home>${maven.home}</maven.home>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</build>

<profiles>
<profile>
<id>native</id>
<activation>
<property>
<name>native</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>native-mode-not-supported</id>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<echo message="!!! WARNING !!!" />
<echo message="Hawtio does not support Quarkus native mode!" />
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
Loading