Camel K から Red Hat build of Apache Camel for Quarkus への移行


Red Hat build of Apache Camel 4.8

Camel K から Red Hat build of Apache Camel for Quarkus への移行

概要

このガイドでは、Camel K から Red Hat build of Apache Camel for Quarkus に移行するための詳細を説明します。

はじめに

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、用語の置き換えは、今後の複数のリリースにわたって段階的に実施されます。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。

第1章 概要

OpenShift 上での Camel 統合のアプローチが採用され、Camel K が非推奨になりました。Red Hat Build of Camel for Quarkus をターゲットにし、既存の顧客に Camel K 統合を移行するための移行パスを提供することを目指しています。このアプローチにより、Camel K と Red Hat Build of Apache Camel for Quarkus の両方でサポートされている機能を考慮しながら、最小限の量力で Red Hat Build of Apache Camel for Quarkus へのシームレスな移行が可能になります。

アプリケーションを構築、設定、デプロイ、実行する Quarkus の方法を理解する必要があります。

1.1. 想定条件

  • 移行に必要なソースファイルは、java、xml、または yaml 形式です。
  • デプロイするターゲットシステムは OpenShift Cluster 4.15 以降です。
  • Camel K のバージョンは 1.10.7 です。
  • 移行は、Red Hat build of Apache Camel for Quarkus に対して行われます。

Camel K は Kamel CLI を使用して統合を実行し、Camel K Operator はデプロイメント、Service、Route、ConfigMap、Secret、Knative などのさまざまな Kubernetes オブジェクトとともに実行中の Pod としてそれらを管理およびデプロイします。

注記

実行中の Java プログラムは、Quarkus アプリケーション上の Camel です。

Quarkus 用の Red Hat build of Apache Camel を使用する場合、統合の構築と実行に必要なすべてのアーティファクトを含む Maven プロジェクトが開始点となります。このプロジェクトには、デプロイメント、Service、ConfigMap、およびその他のリソースが含まれますが、その設定は Camel K の設定とは異なる場合があります。たとえば、プロパティーは application.properties ファイルに保存され、Knative 設定には別のファイルが必要になる場合があります。主な目標として、インテグレーションルートが OpenShift クラスターにデプロイされ、実行されていることを確認します。

1.1.1. 要件

移行を実行するには、次のツールと設定のセットが必要です。

Red Hat build of Apache Camel に関する サポートされている設定コンポーネントの詳細 を確認します。

1.1.2. 対象外

  • Camel Spring Boot (CSB) をターゲットとして使用します。移行パスは似ていますが、CSB と JKube に合わせて調整する必要があります。さまざまな は、ドキュメント を参照してください。
  • OpenShift の管理。
  • Maven プロジェクトのカスタマイズ。

1.1.3. ユースケース

Camel K のインテグレーションはさまざまですが、通常はインテグレーションルートと設定に対応する複数のファイルで構成されます。インテグレーションルートは Java、XML、または YAML で定義できますが、設定はプロパティーファイルで、または kamel run コマンドのパラメーターとして指定できます。この移行ドキュメントでは、KameletBinding、Kamelet、Knative、および ConfigMap のプロパティーに関連するユースケースを説明します。

1.1.4. バージョン

注記

Camel K 1.10.7 は、Red Hat build of Apache Camel for Quarkus とは異なるバージョンの Camel と Quarkus を使用します。

Expand
表1.1 Camel K
アーティファクトCamel KRed Hat build of Apache Camel for Quarkus

JDK

11

21 (推奨)、17 (サポート対象)

Camel

3.18.6.redhat-00009

4.4.0.redhat-00025

Camel for Quarkus

2.13.3.redhat-00011

3.8.0.redhat-00006

Quarkus プラットフォーム

2.13.9.SP2-redhat-00003

3.8.5.redhat-00003

Kamelet Catalog

1.10.7

2.3.x

Camel K から Red Hat build of Apache Camel for Quarkus に移行すると、複数のライブラリーが同時に更新されます。したがって、基盤となるライブラリーの違いにより、Red Hat build of Apache Camel for Quarkus でインテグレーションをビルドまたは実行時にエラーが発生する場合があります。

1.1.5. プロジェクトと組織

Camel K インテグレーションルートは、Java、YAML、または XML の単一ファイルから生成されます。依存関係とビルドを整理するためのプロジェクトの概念はありません。最後に、kamel run <my app> ごとに、Pod が実行されます。

Red Hat build of Apache Camel for Quarkus には Maven プロジェクトが必要です。Maven プロジェクトを生成するには、camel export <many files> を使用します。プロジェクトをビルドすると、コンテナーイメージにはプロジェクトで定義されたすべてのインテグレーションルートが含まれます。

インテグレーションルートごとに 1 つの Pod が必要な場合は、インテグレーションルートごとに Maven プロジェクトを作成する必要があります。複数のインテグレーションルートとカスタムビルドを備えた単一の Maven プロジェクトを使用して、実行エントリーポイントが異なるコンテナーイメージを生成するなど、Pod を起動する複雑な方法は多数ありますが、これはこの移行ガイドの範囲外です。

1.2. トレイト

Camel K のトレイトは、Operator が kamel cli から kubernetes オブジェクトおよび設定にパラメーターを具体化する簡単な方法を提供します。Camel K 1.10 でサポートされているトレイトはごくわずかで、この移行パスで対応しています。camel、platform、deployment、dependencies、deployer、openapi のトレイトは、移行パスで設定に対応する必要はありません。

次のリストには、Red Hat build of Apache Camel for Quarkus におけるトレイトとそのパラメーターおよび同等のものが含まれています。

注記

Red Hat build of Apache Camel for Quarkus のプロパティーは、application.properties で設定する必要があります。プロジェクトをビルドするときに、target/kubernetes/openshift.yml に表示される kubernetes にプロパティーが含まれている必要があります。

プロパティーの詳細は、Quarkus OpenShift Extension を参照してください。

Expand
表1.2 Builder トレイト
トレイトパラメーターQuarkus パラメーター

builder.properties

application.properties にプロパティーを追加します。

Expand
表1.3 Container トレイト
トレイトパラメーターQuarkus パラメーター

container.expose

Service kubernetes オブジェクトが自動的に作成されます。

container.image

このプロパティーはソースレス Camel K インテグレーションを対象としており、これは Red Hat build of Apache Camel for Quarkus ではサポートされていないため、Quarkus には代替がありません。

container.limit-cpu

quarkus.openshift.resources.limits.cpu

container.limit-memory

quarkus.openshift.resources.limits.memory

container.liveness-failure-threshold

quarkus.openshift.liveness-probe.failure-threshold

container.liveness-initial-delay

quarkus.openshift.liveness-probe.initial-delay

container.liveness-period

quarkus.openshift.liveness-probe.period

container.liveness-success-threshold

quarkus.openshift.liveness-probe.success-threshold

container.liveness-timeout

quarkus.openshift.liveness-probe.timeout

container.name

quarkus.openshift.container-name

container.port

quarkus.openshift.ports."<port name>".container-port

container.port-name

プロパティー名にポート名を設定します。構文は quarkus.openshift.ports."<port name>".container-port です。https ポートの例は quarkus.openshift.ports.https.container-port です。

container.probes-enabled

pom.xml に quarkus maven 依存関係を追加します。

  <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-smallrye-health</artifactId>
  </dependency>
Copy to Clipboard Toggle word wrap

コンテナーに startup プローブも追加されます。遅延、タイムアウト、期間の値は異なる場合があることに注意してください。

container.readiness-failure-threshold

quarkus.openshift.readiness-probe.failure-threshold

container.readiness-initial-delay

quarkus.openshift.readiness-probe.initial-delay

container.readiness-period

quarkus.openshift.readiness-probe.period

container.readiness-success-threshold

quarkus.openshift.readiness-probe.success-threshold

container.readiness-timeout

quarkus.openshift.readiness-probe.timeout

container.request-cpu

quarkus.openshift.resources.requests.cpu

container.request-memory

quarkus.openshift.resources.requests.memory

container.service-port

quarkus.openshift.ports.<port-name>.host-port

container.service-port-name

プロパティー名にポート名を設定します。構文は quarkus.openshift.ports."<port name>".host-port です。https ポートの例は quarkus.openshift.ports.https.host-port です。

また、ルートポート名を quarkus.openshift.route.target-port に設定してください。

Expand
表1.4 Environment トレイト
トレイトパラメーターQuarkus パラメーター

environment.vars

quarkus.openshift.env.vars.<key>=<value>

environment.http-proxy

プロキシーホストを quarkus.kubernetes-client.http-proxy quarkus.kubernetes-client.https-proxy quarkus.kubernetes-client.no-proxy の値として設定する必要があります。

Expand
表1.5 Error Handler トレイト
トレイトパラメーターQuarkus パラメーター

error-handler.ref

インテグレーションルートに エラーハンドラー を手動で追加する必要があります。

Expand
表1.6 JVM トレイト
トレイトパラメーターQuarkus パラメーター

jvm.debug

quarkus.openshift.remote-debug.enabled

jvm.debug-suspend

quarkus.openshift.remote-debug.suspend

jvm.print-command

代替はありません。

jvm.debug-address

quarkus.openshift.remote-debug.address-port

jvm.options

src/main/docker/Dockerfile.jvm を編集し、JAVA_OPTS 値を変更して目的の値を設定します。

デバッグのために Camel ログレベルを上げる例:

ENV JAVA_OPTS="$JAVA_OPTS -Dquarkus.log.category.\"org.apache.camel\".level=debug"
Copy to Clipboard Toggle word wrap

注記: Docker 設定は、ベースイメージ、OpenJDK 21 の設定 に依存します。

jvm.classpath

Maven プロジェクトでクラスパスを設定する必要があります。これにより、依存関係の完全なリストが target/quarkus-app/ に収集され、後でコンテナーイメージにパッケージ化されます。

Expand
表1.7 Node Affinity トレイト
トレイトパラメーターQuarkus パラメーター
affinity.pod-affinity
affinity.pod-affinity-labels
affinity.pod-anti-affinity
affinity.pod-anti-affinity-labels
affinity.node-affinity-labels
Copy to Clipboard Toggle word wrap

Quarkus には affinity 設定はありません。

Expand
表1.8 Owner トレイト
トレイトパラメーターQuarkus パラメーター

owner.enabled

Quarkus には owner 設定はありません。

Expand
表1.9 Quarkus トレイト
トレイトパラメーターQuarkus パラメーター

quarkus.package-type

ネイティブビルドの場合は、-Dnative を使用します。

Expand
表1.10 Knative トレイト
トレイトパラメーターQuarkus パラメーター

knative.enabled

Maven 依存関係 org.apache.camel.quarkus:camel-quarkus-knative を pom.xml に追加し、次のプロパティーを設定します。

quarkus.kubernetes.deployment-target=knative
quarkus.container-image.group=<group-name>
quarkus.container-image.registry=image-registry.openshift-image-registry.svc:5000
Copy to Clipboard Toggle word wrap

quarkus.container-image.* プロパティーは、生成された knative.yml でイメージ URL を設定するために quarkus maven プラグインで必要です。

knative.configuration

camel.component.knative.environmentPath

knative.channel-sources

knative.json で設定可能です。

knative.channel-sinks

knative.json で設定可能です。

knative.endpoint-sources

knative.json で設定可能です。

knative.endpoint-sinks

knative.json で設定可能です。

knative.event-sources

knative.json で設定可能です。

knative.event-sinks

knative.json で設定可能です。

knative.filter-source-channels

knative.json で設定可能です。

knative.sink-binding

代替はありません。SinkBinding オブジェクトを作成する必要があります。

knative.auto

代替はありません。

knative.namespace-label

目的の namespace に bindings.knative.dev/include=true ラベルを手動で設定する必要があります。

Expand
表1.11 Knative Service トレイト
トレイトパラメーターQuarkus パラメーター

knative-service.enabled

quarkus.kubernetes.deployment-target=knative

knative-service.annotations

quarkus.knative.annotations.<annotation-name>=<value>

knative-service.autoscaling-class

quarkus.knative.revision-auto-scaling.auto-scaler-class

knative-service.autoscaling-metric

quarkus.knative.revision-auto-scaling.metric

knative-service.autoscaling-target

quarkus.knative.revision-auto-scaling.target

knative-service.min-scale

quarkus.knative.min-scale

knative-service.max-scale

quarkus.knative.max-scale

knative-service.rollout-duration

quarkus.knative.annotations."serving.knative.dev/rollout-duration"

knative-service.visibility

quarkus.knative.labels."networking.knative.dev/visibility"。引用符で囲む必要があります。

knative-service.auto

この動作は Red Hat build of Apache Camel for Quarkus には必要ありません。

Expand
表1.12 Prometheus トレイト
トレイトパラメーターQuarkus パラメーター

prometheus.enabled

pom.xml に次の Maven 依存関係を追加します。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-micrometer</artifactId>
</dependency>
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-micrometer-registry-prometheus</artifactId>
</dependency>
Copy to Clipboard Toggle word wrap

注記: Camel K は PodMonitor オブジェクトを作成し、Quarkus は ServiceMonitor オブジェクトを作成しますが、どちらもモニタリング機能を設定するのに適切です。

prometheus.pod-monitor

quarkus.openshift.prometheus.generate-service-monitor

prometheus.pod-monitor-labels

カスタムラベルを設定するために使用できる quarkus プロパティーはありませんが、デプロイする前に target/kubernetes/openshift.ymlServiceMonitor オブジェクトでラベルを設定できます。

Expand
表1.13 PodDisruptionBudget (PDB) トレイト
トレイトパラメーターQuarkus パラメーター
pdb.enabled
pdb.min-available
pdb.max-unavailable
Copy to Clipboard Toggle word wrap

PodDisruptionBudget オブジェクトには Quarkus 設定がありません。

Expand
表1.14 Pull Secret トレイト
トレイトパラメーターQuarkus パラメーター

pull-secret.secret-name

quarkus.openshift.image-pull-secrets

Expand
表1.15 Route トレイト
トレイトパラメーターQuarkus パラメーター

route.enabled

quarkus.openshift.route.expose

route.annotations

quarkus.openshift.route.annotations.<key>=<value

route.host

quarkus.openshift.route.host

route.tls-termination

quarkus.openshift.route.tls.termination

route.tls-certificate

quarkus.openshift.route.tls.certificate

route.tls-certificate-secret

シークレットから証明書を読み取るための quarkus プロパティーはありません。

route.tls-key

quarkus.openshift.route.tls.key

route.tls-key-secret

シークレットから鍵を読み取るための quarkus プロパティーはありません。

route.tls-ca-certificate

quarkus.openshift.route.tls.ca-certificate

route.tls-ca-certificate-secret

シークレットから CA 証明書を読み取るための quarkus プロパティーはありません。

route.tls-destination-ca-certificate

quarkus.openshift.route.tls.destination-ca-certificate

route.tls-destination-ca-certificate-secret

シークレットから宛先証明書を読み取るための quarkus プロパティーはありません。

route.tls-insecure-edge-termination-policy

quarkus.openshift.route.tls.insecure-edge-termination-policy

Expand
表1.16 Service トレイト
トレイトパラメーターQuarkus パラメーター

service.enabled

Service kubernetes オブジェクトが自動的に作成されます。これを無効にするには、デプロイメントの前に target/kubernetes/openshift.yml から kind: Service を削除する必要があります。

1.3. Kamel 実行設定

以下にリストされている kamel run コマンドには追加の設定パラメーターがあり、Red Hat build of Apache Camel for Quarkus の同等のパラメーターも含まれており、これらは src/main/resources/application.properties または pom.xml に追加する必要があります。

Expand
kamel 実行パラメーターQuarkus パラメーター

--annotation

quarkus.openshift.annotations.<annotation-name>=<value>

--build-property

pom.xml<properties> タグにプロパティーを追加します。

--dependency

pom.xml に依存関係を追加します。

--env

quarkus.openshift.env.vars.<env-name>=<value>

--label

quarkus.openshift.labels.<label-name>=<value>

--maven-repository

pom.xml にリポジトリーを追加するか、camel export --repos=<my repo> を使用します。

--logs

oc logs -f `oc get pod -l app.kubernetes.io/name=<artifact name> -oname`

--volume

quarkus.openshift.mounts.<my-volume>.path=</where/to/mount>

1.4. Kamelet、KameletBinding、Pipe

Camel K Operator は Kamelet をバンドルし、Kubernetes オブジェクトとしてインストールします。Red Hat build of Apache Camel for Quarkus プロジェクトでは、Maven プロジェクトで kamelets yaml ファイルを管理する必要があります。

kamelets yaml ファイルを管理する方法は 2 つあります。

  1. Kamelets は Maven アーティファクト org.apache.camel.kamelets:camel-kamelets としてパッケージ化およびリリースされます。この依存関係を pom.xml に追加すると、camel ルートが開始するときに、クラスパス内のその jar ファイルから kamelet yaml ファイルが読み込まれます。

オープンソースの kamelet と、アーティファクトの接尾辞が redhat-000nnn である Red Hat によって作成された kamelet があります。たとえば、`1.10.7.redhat-00015` です。これらは Red Hat Maven リポジトリー から入手できます。

2. src/main/resources/kamelets ディレクトリーに kamelet yaml ファイルを追加します。これらのファイルは、後でデプロイ可能な最終アーティファクトにパッケージ化されます。pom.xmlorg.apache.camel.kamelets:camel-kamelets を宣言しないでください。これにより、camel ルートはパッケージ化されたプロジェクトから Kamelet yaml ファイルをロードします。

KameletBinding の名前が Pipe に変更されました。したがって、ユースケース 3 を理解するには、これを考慮してください。kubernetes リソース名 KameletBinding はまだサポートされていますが、非推奨となっています。できるだけ早く名前を Pipe に変更することを推奨します。

Camel K 1.10.7 以降に多くの更新があったため、Kamelets を更新することを推奨します。たとえば、1.102.3 の jms-amqp-10-sink.kamelet.yaml を比較することができます。

カスタム Kamelet がある場合は、それに応じて更新する必要があります。

  • Kamelet ファイル内の flow の名前を template に変更します。
  • property の名前を Bean プロパティーの properties に変更します。

1.4.1. Knative

Camel K で Knative エンドポイントを使用してインテグレーションルートを実行すると、Camel K Operator によって SinkBindingsTriggerSubscription などの Knative オブジェクトがいくつか作成されます。また、Camel K Operator は、クラスターにデプロイされた Knative オブジェクトと camel-knative コンポーネントが対話するために必要な knative.json 環境ファイルを作成します。

knative.json の例

{
  "services": [
    {
      "type": "channel",
      "name": "messages",
      "url": "{{k.sink}}",
      "metadata": {
        "camel.endpoint.kind": "sink",
        "knative.apiVersion": "messaging.knative.dev/v1",
        "knative.kind": "Channel",
        "knative.reply": "false"
      }
    }
  ]
}
Copy to Clipboard Toggle word wrap

Red Hat build of Apache Camel for Quarkus は Maven プロジェクトです。これらの Knative ファイルを手動で作成し、追加の設定を提供する必要があります。Knative エンドポイントを使用したインテグレーションルートの移行は、ユースケース 2 を参照してください。

1.4.2. モニタリング

クラスターにインストールされている Kubernetes オブジェクトを識別するカスタムラベルを追加して、これらの Kubernetes を簡単に見つけられるようにすることを推奨します。デフォルトでは、quarkus openshift エクステンションによってラベル app.kubernetes.io/name=<app name> が追加されるため、このラベルを使用して作成されたオブジェクトを検索できます。

モニタリングの目的で、HawtIO 診断コンソール を使用して Camel アプリケーションを監視できます。

1.5. 移行プロセス

移行プロセスは、以下の手順で構成されます。

Expand
タスク説明

Maven プロジェクトの作成

Camel JBang の camel cli を使用してファイルをエクスポートすると、Maven プロジェクトが作成されます。

設定の調整

ファイルを追加および変更してプロジェクトを設定します。

Build

プロジェクトをビルドすると、JAR ファイルが生成されます。コンテナーイメージをビルドし、コンテナーレジストリーにプッシュします。

デプロイ

Kubernetes オブジェクトを Openshift クラスターにデプロイし、Pod を実行します。

1.5.1. 移行手順

1.5.1.1. ユースケース 1 - 設定によるシンプルなインテグレーションルート

以下のインテグレーションルートは、rest および kamelet エンドポイントを使用します。

import org.apache.camel.builder.RouteBuilder;

public class Http2Jms extends RouteBuilder {
  @Override
  public void configure() throws Exception {
      rest()
      .post("/message")
      .id("rest")
      .to("direct:jms");

      from("direct:jms")
      .log("Sending message to JMS {{broker}}: ${body}")
      .to("kamelet:jms-amqp-10-sink?remoteURI=amqp://myhost:61616&destinationName=queue");
  }
}
Copy to Clipboard Toggle word wrap

http2jms.properties ファイル

broker=amqp://172.30.177.216:61616
queue=qtest
Copy to Clipboard Toggle word wrap

kamel 実行コマンド

kamel run Http2Jms.java -p file://$PWD/http2jms.properties --annotation some_annotation=foo --env MY_ENV1=VAL1
Copy to Clipboard Toggle word wrap

アノテーションを使用して Pod をビルドして実行します。環境変数とプロパティーファイルは ConfigMap として追加され、Pod にマウントされます。

1.5.1.1.1. 手順 1 - Maven プロジェクトの作成

camel jbang を使用して、ファイルを Maven プロジェクトにエクスポートします。

camel export \
--runtime=quarkus \
--quarkus-group-id=com.redhat.quarkus.platform \
--quarkus-version=3.8.5.redhat-00003 \
--repos=https://maven.repository.redhat.com/ga \
--dep=io.quarkus:quarkus-openshift \
--gav=com.mycompany:ceq-app:1.0 \
--dir=ceq-app1 \
Http2Jms.java
Copy to Clipboard Toggle word wrap

パラメーターの説明。

Expand
パラメーター説明

--runtime=quarkus

Quarkus ランタイムを使用します。生成されたプロジェクトには quarkus BOM が含まれます。

--quarkus-group-id=com.redhat.quarkus.platform

Red Hat がサポートする quarkus プラットフォーム Maven アーティファクトグループは com.redhat.quarkus.platform です。

--quarkus-version=3.8.5.redhat-00003

これは現時点でサポートされている最新バージョンです。最新リリースバージョンは、Quarkus ドキュメント を確認してください。

--repos=https://maven.repository.redhat.com/ga

GA リリースで Red Hat Maven リポジトリーを使用します。

--dep=io.quarkus:quarkus-openshift

Openshift でビルドするために、quarkus-openshift 依存関係を pom.xml に追加します。

--gav=com.mycompany:ceq-app:1.0

生成された pom.xml に GAV を設定します。プロジェクトに合わせて GAV を設定する必要があります。

--dir=ceq-app1

Maven プロジェクトディレクトリー。

より多くのパラメーターは camel export --help で確認できます。

kamelets を使用している場合は、それが Maven プロジェクトに含まれる必要があります。Kamelet リポジトリー をダウンロードして展開できます。カスタム kamelet がある場合は、この kamelet ディレクトリーに追加します。

camel export を使用する際、すべての kamelet を src/main/resources/kamelets にコピーするパラメーター --local-kamelet-dir=<kamelet directory> を使用できます。これらの kamelet は、後で最終アーカイブにパッケージされます。

--local-kamelet-dir=<kamelet directory> パラメーターを使用しない場合は、必要な kamelet yaml ファイルを上記のディレクトリーに手動でコピーする必要があります。

生成された Openshift ファイル (デプロイメント、サービス、ルートなど) でアーティファクト名が使用されるため、生成された pom 内のアーティファクト名を追跡します。

1.5.1.1.2. 手順 2 - プロジェクトの設定

このステップでは、環境に合わせて Maven プロジェクトとアーティファクトを設定します。

Maven プロジェクトに参加します。

cd ceq-app1
Copy to Clipboard Toggle word wrap

docker ビルドストラテジーを設定します。

echo quarkus.openshift.build-strategy=docker >> src/main/resources/application.properties
Copy to Clipboard Toggle word wrap

src/main/docker のベースイメージを OpenJDK 21 に変更します (オプション)

FROM registry.access.redhat.com/ubi9/openjdk-21:1.20
Copy to Clipboard Toggle word wrap

pom.xml でコンパイラーのバージョンを 21 に変更します (オプション)

<maven.compiler.release>21</maven.compiler.release>
Copy to Clipboard Toggle word wrap

必要に応じて、src/main/resources/application.properties で環境変数、ラベル、アノテーションを設定します。

quarkus.openshift.annotations.sample_annotation=sample_value1
quarkus.openshift.env.vars.SAMPLE_KEY=sample_value2
quarkus.openshift.labels.sample_label=sample_value3
Copy to Clipboard Toggle word wrap

これらのパラメーターを使用して、イメージとコンテナーのレジストリー設定をカスタマイズする場合:

quarkus.container-image.registry
quarkus.container-image.group
quarkus.container-image.name
quarkus.container-image.tag
Copy to Clipboard Toggle word wrap

実行時に使用される設定を含む http2jms.properties があるため、kamel cli は ConfigMap を作成し、それを Pod にマウントします。Quarkus 用の Red Hat build of Apache Camel でも同じことを実現する必要があります。

イメージビルドプロセスの一部となる ceq-app in `src/main/kubernetes/common.yml という名前のローカル ConfigMap ファイルを作成します。次のコマンドは ConfigMap キーを application.properties として設定します。

oc create configmap ceq-app --from-file application.properties=http2jms.properties --dry-run=client -oyaml > src/main/kubernetes/common.yml
Copy to Clipboard Toggle word wrap

Quarkus が ConfigMap をマウントできるように、application.properties に次のプロパティーを追加します。

quarkus.openshift.app-config-map=ceq-app
Copy to Clipboard Toggle word wrap
1.5.1.1.3. 手順 3 - ビルド

ローカル検査用にパッケージをビルドします。

./mvnw -ntp package
Copy to Clipboard Toggle word wrap

このステップでは、Maven アーティファクト (JAR ファイル) をローカルでビルドし、target/kubernetes ディレクトリーに Openshift ファイルを生成します。

target/kubernetes/openshift.yml を追跡し、Openshift クラスターにデプロイされるデプロイメントを理解します。

1.5.1.1.4. 手順 4 - ビルドとデプロイ

パッケージをビルドして Openshift にデプロイします。

./mvnw -ntp package -Dquarkus.openshift.deploy=true
Copy to Clipboard Toggle word wrap

Maven 出力でイメージのビルドを追跡できます。ビルド後、Pod が実行されていることを確認できます。

1.5.1.1.5. 手順 5 - テスト

インテグレーションルートが機能しているか確認します。

プロジェクトがローカルで実行できる場合は、以下を試すことができます。

mvn -ntp quarkus:run
Copy to Clipboard Toggle word wrap

Pod コンテナーのログを追跡します。

oc logs -f `oc get pod -l app.kubernetes.io/name=app -oname`
Copy to Clipboard Toggle word wrap

次のような出力が表示されるはずです。

INFO exec -a "java" java -Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager -cp "." -jar /deployments/quarkus-run.jar
INFO running in /deployments
__  ____  __  _____   ___  __ ____  ______
--/ __ \/ / / / _ | / _ \/ //_/ / / / __/
-/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
[org.apa.cam.qua.cor.CamelBootstrapRecorder] (main) Bootstrap runtime: org.apache.camel.quarkus.main.CamelMainRuntime
[org.apa.cam.mai.MainSupport] (main) Apache Camel (Main) 4.4.0.redhat-00025 is starting
[org.apa.cam.imp.eng.AbstractCamelContext] (main) Apache Camel 4.4.0.redhat-00025 (camel-1) is starting
[org.apa.cam.mai.BaseMainSupport] (main) Property-placeholders summary
[org.apa.cam.mai.BaseMainSupport] (main)     [MicroProfilePropertiesSource] broker=amqp://172.30.177.216:61616
[org.apa.cam.mai.BaseMainSupport] (main)     [MicroProfilePropertiesSource] queue=qtest
[org.apa.cam.mai.BaseMainSupport] (main)     [ms-amqp-10-sink.kamelet.yaml] destinationName=qtest
[org.apa.cam.mai.BaseMainSupport] (main)     [ms-amqp-10-sink.kamelet.yaml] connectionFactoryBean=connectionFactoryBean-1
[org.apa.cam.mai.BaseMainSupport] (main)     [ms-amqp-10-sink.kamelet.yaml] remoteURI=amqp://172.30.177.216:61616
[org.apa.cam.imp.eng.AbstractCamelContext] (main) Routes startup (started:3)
[org.apa.cam.imp.eng.AbstractCamelContext] (main)     Started route1 (direct://jms)
[org.apa.cam.imp.eng.AbstractCamelContext] (main)     Started rest (rest://post:/message)
[org.apa.cam.imp.eng.AbstractCamelContext] (main)     Started jms-amqp-10-sink-1 (kamelet://source)
[org.apa.cam.imp.eng.AbstractCamelContext] (main) Apache Camel 4.4.0.redhat-00025 (camel-1) started in 17ms (build:0ms init:0ms start:17ms)
[io.quarkus] (main) app 1.0 on JVM (powered by Quarkus 3.8.5.redhat-00004) started in 1.115s. Listening on: http://0.0.0.0:8080
[io.quarkus] (main) Profile prod activated.
[io.quarkus] (main) Installed features: [camel-amqp, camel-attachments, camel-core, camel-direct, camel-jms, camel-kamelet, camel-microprofile-health, camel-platform-http, camel-rest, camel-rest-openapi, camel-yaml-dsl, cdi, kubernetes, qpid-jms, smallrye-context-propagation, smallrye-health, vertx]
Copy to Clipboard Toggle word wrap

MicroProfilePropertiesSource 行を参照してください。ConfigMap として追加され、Pod にマウントされたプロパティーファイルの内容が表示されます。

1.5.1.2. ユースケース 2 - Knative インテグレーションルート

このユースケースでは、2 つの Knative インテグレーションルートを取り上げます。Feed ルートは定期的にテキストメッセージを Knative チャネルに送信し、2 番目のルートの Printer は Knative チャネルからメッセージを受信して出力します。

Camel K には 2 つの Pod があり、それぞれが単一のインテグレーションルートを実行します。したがって、この移行では、2 つのプロジェクトを作成し、それぞれ 1 つのインテグレーションルートを含めるようにします。

後で必要に応じて、単一の Pod に両方のインテグレーションルートを含む単一の Maven プロジェクトを作成するようにカスタマイズできます。

Feed インテグレーションルート

import org.apache.camel.builder.RouteBuilder;

public class Feed extends RouteBuilder {
  @Override
  public void configure() throws Exception {
    from("timer:clock?period=15s")
      .setBody().simple("Hello World from Camel - ${date:now}")
      .log("sent message to messages channel: ${body}")
      .to("knative:channel/messages");
  }
}
Copy to Clipboard Toggle word wrap

Printer インテグレーションルート

import org.apache.camel.builder.RouteBuilder;

public class Printer extends RouteBuilder {
  @Override
  public void configure() throws Exception {
    from("knative:channel/messages")
      .convertBodyTo(String.class)
      .to("log:info");
  }
}
Copy to Clipboard Toggle word wrap

kamel run コマンドは、Camel K でこれがどのように実行されるかを示します。

kamel run Feed.java
kamel run Printer.java
Copy to Clipboard Toggle word wrap

2 つの Pod が実行される予定です。

1.5.1.2.1. 手順 1 - Maven プロジェクトの作成

camel jbang を使用して、ファイルを完全な Maven プロジェクトにエクスポートします。

feed インテグレーションをエクスポートします。

camel export \
--runtime=quarkus \
--quarkus-group-id=com.redhat.quarkus.platform \
--quarkus-version=3.8.5.redhat-00003 \
--repos=https://maven.repository.redhat.com/ga \
--dep=io.quarkus:quarkus-openshift \
--gav=com.mycompany:ceq-feed:1.0 \
--dir=ceq-feed \
Feed.java
Copy to Clipboard Toggle word wrap

printer インテグレーションをエクスポートします。

camel export \
--runtime=quarkus \
--quarkus-group-id=com.redhat.quarkus.platform \
--quarkus-version=3.8.5.redhat-00003 \
--repos=https://maven.repository.redhat.com/ga \
--dep=io.quarkus:quarkus-openshift \
--gav=com.mycompany:ceq-printer:1.0 \
--dir=ceq-printer \
Printer.java
Copy to Clipboard Toggle word wrap

インテグレーションごとに Maven プロジェクトが作成されます。

1.5.1.2.2. 手順 2 - プロジェクトの設定

この手順では、環境に合わせて Maven プロジェクトとアーティファクトを設定します。ユースケース 1 には、ConfigMaps のラベル、アノテーション、および設定に関する情報が含まれています。

Maven プロジェクトに参加します。

cd ceq-feed
Copy to Clipboard Toggle word wrap

docker ビルドストラテジーを設定します。

echo quarkus.openshift.build-strategy=docker >> src/main/resources/application.properties
Copy to Clipboard Toggle word wrap

src/main/docker のベースイメージを OpenJDK 21 に変更します (オプション)

FROM registry.access.redhat.com/ubi9/openjdk-21:1.20
Copy to Clipboard Toggle word wrap

pom.xml でコンパイラーのバージョンを 21 に変更します (オプション)

<maven.compiler.release>21</maven.compiler.release>
Copy to Clipboard Toggle word wrap

デプロイメントターゲットとして openshift を追加します。

quarkus.kubernetes.deployment-target=openshift
Copy to Clipboard Toggle word wrap

生成された openshift.yml および knative.yml ファイルでイメージアドレスを設定するには、これらのコンテナーイメージプロパティーを設定する必要があります。

quarkus.container-image.registry=image-registry.openshift-image-registry.svc:5000
quarkus.container-image.group=<namespace>
Copy to Clipboard Toggle word wrap

Knative コントローラーがデプロイメントに K_SINK 環境変数を注入できるようにするには、application.properties に次のプロパティーを追加します。

quarkus.openshift.labels."bindings.knative.dev/include"=true
Copy to Clipboard Toggle word wrap

src/main/resourcesknative.json を追加します。これは、Camel が Knative チャネルに接続するために必要な設定です。

注記

k.sink プロパティープレースホルダーがあります。Pod が実行されると、K_SINK という名前の環境変数が参照され、URL 値が置き換えられます。

{
  "services": [
    {
      "type": "channel",
      "name": "messages",
      "url": "{{k.sink}}",
      "metadata": {
        "camel.endpoint.kind": "sink",
        "knative.apiVersion": "messaging.knative.dev/v1",
        "knative.kind": "Channel",
        "knative.reply": "false"
      }
    }
  ]
}
Copy to Clipboard Toggle word wrap

Camel が Knative 環境設定をロードできるようにするには、次のプロパティーを追加します。

camel.component.knative.environmentPath=classpath:knative.json
Copy to Clipboard Toggle word wrap

注入を機能させるには、Knative SinkBinding オブジェクトを作成する必要があります。

SinkBinding ファイルを src/main/kubernetes/openshift.yml に追加します。

cat <<EOF >> src/main/kubernetes/openshift.yml
apiVersion: sources.knative.dev/v1
kind: SinkBinding
metadata:
  finalizers:
  - sinkbindings.sources.knative.dev
  name: ceq-feed
spec:
  sink:
    ref:
      apiVersion: messaging.knative.dev/v1
      kind: Channel
      name: messages
  subject:
    apiVersion: apps/v1
    kind: Deployment
    name: ceq-feed
EOF
Copy to Clipboard Toggle word wrap

次に、ceq-printer プロジェクトを設定します。

cd ceq-printer
Copy to Clipboard Toggle word wrap

docker ビルドストラテジーを設定します。

echo quarkus.openshift.build-strategy=docker >> src/main/resources/application.properties
Copy to Clipboard Toggle word wrap

src/main/docker のベースイメージを OpenJDK 21 に変更します (オプション)

FROM registry.access.redhat.com/ubi9/openjdk-21:1.20
Copy to Clipboard Toggle word wrap

pom.xml でコンパイラーのバージョンを 21 に変更します (オプション)

<maven.compiler.release>21</maven.compiler.release>
Copy to Clipboard Toggle word wrap

knative をデプロイメントターゲットとして設定します。

quarkus.kubernetes.deployment-target=knative
Copy to Clipboard Toggle word wrap

生成された openshift.yml および knative.yml ファイルでイメージアドレスを正しく設定するには、これらのコンテナーイメージプロパティーを設定する必要があります。

quarkus.container-image.registry=image-registry.openshift-image-registry.svc:5000
quarkus.container-image.group=<namespace>
Copy to Clipboard Toggle word wrap

src/main/resourcesknative.json を追加します。これは、Camel が Knative チャネルに接続するために必要な設定です。

{
  "services": [
    {
      "type": "channel",
      "name": "messages",
      "path": "/channels/messages",
      "metadata": {
        "camel.endpoint.kind": "source",
        "knative.apiVersion": "messaging.knative.dev/v1",
        "knative.kind": "Channel",
        "knative.reply": "false"
      }
    }
  ]
}
Copy to Clipboard Toggle word wrap

Camel が Knative 環境設定をロードできるようにするには、次のプロパティーを追加します。

camel.component.knative.environmentPath=classpath:knative.json
Copy to Clipboard Toggle word wrap

チャネルからシンクへのメッセージ配信には、Knative Subscription が必要です。

Subscription ファイルを src/main/kubernetes/knative.yml に追加します。

apiVersion: messaging.knative.dev/v1
kind: Subscription
metadata:
  finalizers:
  - subscriptions.messaging.knative.dev
  name: ceq-printer
spec:
  channel:
    apiVersion: messaging.knative.dev/v1
    kind: Channel
    name: messages
  subscriber:
    ref:
      apiVersion: serving.knative.dev/v1
      kind: Service
      name: ceq-printer
    uri: /channels/messages
Copy to Clipboard Toggle word wrap
1.5.1.2.3. 手順 3 - ビルド

ローカル検査用にパッケージをビルドします。

./mvnw -ntp package
Copy to Clipboard Toggle word wrap

このステップでは、Maven アーティファクト (JAR ファイル) をローカルでビルドし、target/kubernetes ディレクトリーに Openshift ファイルを生成します。

target/kubernetes/openshift.yml および `target/kubernetes/knative.yml` を追跡して、Openshift クラスターにデプロイされるデプロイメントを理解します。

1.5.1.2.4. 手順 4 - ビルドとデプロイ

パッケージをビルドして Openshift にデプロイします。

./mvnw -ntp package -Dquarkus.openshift.deploy=true
Copy to Clipboard Toggle word wrap

Maven 出力でイメージのビルドを追跡できます。ビルド後に、Pod が実行されていることを確認できます。

1.5.1.2.5. 手順 5 - テスト

インテグレーションルートが機能しているか確認します。

Pod コンテナーのログを追跡します。

oc logs -f `oc get pod -l app.kubernetes.io/name=ceq-feed -oname`
Copy to Clipboard Toggle word wrap

以下のような出力が表示されるはずです。

ceq-feed pod

INFO exec -a "java" java -Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager -cp "." -jar /deployments/quarkus-run.jar
INFO running in /deployments
__  ____  __  _____   ___  __ ____  ______
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
[org.apa.cam.qua.cor.CamelBootstrapRecorder] (main) Bootstrap runtime: org.apache.camel.quarkus.main.CamelMainRuntime
[org.apa.cam.mai.MainSupport] (main) Apache Camel (Main) 4.4.0.redhat-00025 is starting
[org.apa.cam.mai.BaseMainSupport] (main) Auto-configuration summary
[org.apa.cam.mai.BaseMainSupport] (main)     [MicroProfilePropertiesSource] camel.component.knative.environmentPath=classpath:knative.json
[org.apa.cam.imp.eng.AbstractCamelContext] (main) Apache Camel 4.4.0.redhat-00025 (camel-1) is starting
[org.apa.cam.mai.BaseMainSupport] (main) Property-placeholders summary
[org.apa.cam.mai.BaseMainSupport] (main)     [OS Environment Variable]      k.sink=http://hello-kn-channel.cmiranda-camel.svc.cluster.local
[org.apa.cam.imp.eng.AbstractCamelContext] (main) Routes startup (started:1)
[org.apa.cam.imp.eng.AbstractCamelContext] (main)     Started route1 (timer://clock)
[org.apa.cam.imp.eng.AbstractCamelContext] (main) Apache Camel 4.4.0.redhat-00025 (camel-1) started in 43ms (build:0ms init:0ms start:43ms)
[io.quarkus] (main) ceq-feed 1.0 on JVM (powered by Quarkus 3.8.5.redhat-00004) started in 1.386s. Listening on: http://0.0.0.0:8080
[io.quarkus] (main) Profile prod activated.
[io.quarkus] (main) Installed features: [camel-attachments, camel-cloudevents, camel-core, camel-knative, camel-platform-http, camel-rest, camel-rest-openapi, camel-timer, cdi, kubernetes, smallrye-context-propagation, vertx]
[route1] (Camel (camel-1) thread #1 - timer://clock) sent message to hello channel: Hello World from Camel - Thu Aug 01 13:54:41 UTC 2024
[route1] (Camel (camel-1) thread #1 - timer://clock) sent message to hello channel: Hello World from Camel - Thu Aug 01 13:54:56 UTC 2024
[route1] (Camel (camel-1) thread #1 - timer://clock) sent message to hello channel: Hello World from Camel - Thu Aug 01 13:55:11 UTC 2024
Copy to Clipboard Toggle word wrap

Property-placeholders を参照してください。k.sink プロパティーの値が表示されます。

ceq-printer pod

INFO exec -a "java" java -Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager -cp "." -jar /deployments/quarkus-run.jar
INFO running in /deployments
__  ____  __  _____   ___  __ ____  ______
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
[org.apa.cam.qua.cor.CamelBootstrapRecorder] (main) Bootstrap runtime: org.apache.camel.quarkus.main.CamelMainRuntime
[org.apa.cam.mai.MainSupport] (main) Apache Camel (Main) 4.4.0.redhat-00025 is starting
[org.apa.cam.mai.BaseMainSupport] (main) Auto-configuration summary
[org.apa.cam.mai.BaseMainSupport] (main)     [MicroProfilePropertiesSource] camel.component.knative.environmentPath=classpath:knative.json
[org.apa.cam.imp.eng.AbstractCamelContext] (main) Apache Camel 4.4.0.redhat-00025 (camel-1) is starting
[org.apa.cam.imp.eng.AbstractCamelContext] (main) Routes startup (started:1)
[org.apa.cam.imp.eng.AbstractCamelContext] (main)     Started route1 (knative://channel/hello)
[org.apa.cam.imp.eng.AbstractCamelContext] (main) Apache Camel 4.4.0.redhat-00025 (camel-1) started in 10ms (build:0ms init:0ms start:10ms)
[io.quarkus] (main) ceq-printer 1.0 on JVM (powered by Quarkus 3.8.5.redhat-00004) started in 1.211s. Listening on: http://0.0.0.0:8080
[io.quarkus] (main) Profile prod activated.
[io.quarkus] (main) Installed features: [camel-attachments, camel-cloudevents, camel-core, camel-knative, camel-log, camel-platform-http, camel-rest, camel-rest-openapi, cdi, kubernetes, smallrye-context-propagation, vertx]
[info] (executor-thread-1) Exchange[ExchangePattern: InOnly, BodyType: String, Body: Hello World from Camel - Thu Aug 01 13:54:41 UTC 2024]
[info] (executor-thread-1) Exchange[ExchangePattern: InOnly, BodyType: String, Body: Hello World from Camel - Thu Aug 01 13:54:56 UTC 2024]
[info] (executor-thread-1) Exchange[ExchangePattern: InOnly, BodyType: String, Body: Hello World from Camel - Thu Aug 01 13:55:11 UTC 2024]
Copy to Clipboard Toggle word wrap
1.5.1.3. ユースケース 3 - パイプ

KameletBinding として、次のインテグレーションルートを指定します。

apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: sample
spec:
  source:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: timer-source
    properties:
      period: 5000
      contentType: application/json
      message:  '{"id":"1","field":"hello","message":"Camel Rocks"}'
  steps:
  - ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: extract-field-action
    properties:
      field: "message"
  sink:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1
      name: log-sink
    properties:
      showStreams: true
Copy to Clipboard Toggle word wrap
1.5.1.3.1. 手順 1 - Maven プロジェクトの作成

camel jbang を使用して、ファイルを Maven プロジェクトにエクスポートします。

camel export \
--runtime=quarkus \
--quarkus-group-id=com.redhat.quarkus.platform \
--quarkus-version=3.8.5.redhat-00003 \
--repos=https://maven.repository.redhat.com/ga \
--dep=io.quarkus:quarkus-openshift \
--gav=com.mycompany:ceq-timer2log-kbind:1.0 \
--dir=ceq-timer2log-kbind \
timer-2-log-kbind.yaml
Copy to Clipboard Toggle word wrap

より多くのパラメーターは camel export --help で確認できます。

1.5.1.3.2. 手順 2 - プロジェクトの設定

これは、環境に合わせて Maven プロジェクトとアーティファクトを設定するステップです。

注記

一般的な設定はユースケース 1 と 2 を実行してください。KameletBinding 設定に必要なステップも提供します。

Openshift にビルドしてデプロイする前に、camel jbang を使用してインテグレーションルートをローカルで実行してみて、どのように動作するかを確認できます。

Maven プロジェクトに参加します。

cd ceq-timer2log-kbind
Copy to Clipboard Toggle word wrap

Kamelet の管理方法は、冒頭の注記を参照してください。この移行ユースケースでは、pom.xmlorg.apache.camel.kamelets:camel-kamelets 依存関係を使用します。

エクスポートすると、application.properties に次のプロパティーが追加されますが、削除することもできます。

quarkus.native.resources.includes
camel.main.routes-include-pattern
Copy to Clipboard Toggle word wrap

docker ビルドストラテジーを設定します。

echo quarkus.openshift.build-strategy=docker >> src/main/resources/application.properties
Copy to Clipboard Toggle word wrap

Kamelet または KameletBinding に以下の trait.camel.apache.org/environment.vars: "my_key=my_val" のようなトレイトアノテーションがある場合は、トレイト設定セクションの Quarkus プロパティーを使用して設定する方法に従う必要があります。

1.5.1.3.3. 手順 3 - ビルド

ローカル検査用にパッケージをビルドします。

./mvnw -ntp package
Copy to Clipboard Toggle word wrap

このステップでは、Maven アーティファクト (JAR ファイル) をローカルでビルドし、target/kubernetes ディレクトリーに Openshift マニフェストファイルを生成します。

target/kubernetes/openshift.yml を追跡し、Openshift クラスターにデプロイされるデプロイメントを理解します。

1.5.1.3.4. 手順 4 - ビルドとデプロイ

パッケージをビルドして Openshift にデプロイします。

./mvnw -ntp package -Dquarkus.openshift.deploy=true
Copy to Clipboard Toggle word wrap

Maven 出力でイメージのビルドを追跡できます。ビルド後に、Pod が実行されていることを確認できます。

1.5.1.3.5. 手順 5 - テスト

インテグレーションルートが機能しているか確認します。

Pod コンテナーのログを追跡します。

oc logs -f `oc get pod -l app.kubernetes.io/name=ceq-timer2log-kbind -oname`
Copy to Clipboard Toggle word wrap

以下のような出力が表示されるはずです。

[org.apa.cam.qua.cor.CamelBootstrapRecorder] (main) Bootstrap runtime: org.apache.camel.quarkus.main.CamelMainRuntime
[org.apa.cam.mai.MainSupport] (main) Apache Camel (Main) 4.4.0.redhat-00025 is starting
[org.apa.cam.cli.con.LocalCliConnector] (main) Management from Camel JBang enabled
[org.apa.cam.imp.eng.AbstractCamelContext] (main) Apache Camel 4.4.0.redhat-00025 (camel-1) is starting
[org.apa.cam.mai.BaseMainSupport] (main) Property-placeholders summary
[org.apa.cam.mai.BaseMainSupport] (main)     [timer-source.kamelet.yaml]    period=5000
[org.apa.cam.mai.BaseMainSupport] (main)     [timer-source.kamelet.yaml]    message={"id":"1","field":"hello","message":"Camel Rocks"}
[org.apa.cam.mai.BaseMainSupport] (main)     [timer-source.kamelet.yaml]    contentType=application/json
[org.apa.cam.mai.BaseMainSupport] (main)     [log-sink.kamelet.yaml]        showStreams=true
[org.apa.cam.mai.BaseMainSupport] (main)     [ct-field-action.kamelet.yaml] extractField=extractField-1
[org.apa.cam.mai.BaseMainSupport] (main)     [ct-field-action.kamelet.yaml] field=message
[org.apa.cam.imp.eng.AbstractCamelContext] (main) Routes startup (started:4)
[org.apa.cam.imp.eng.AbstractCamelContext] (main)     Started sample (kamelet://timer-source)
[org.apa.cam.imp.eng.AbstractCamelContext] (main)     Started timer-source-1 (timer://tick)
[org.apa.cam.imp.eng.AbstractCamelContext] (main)     Started log-sink-2 (kamelet://source)
[org.apa.cam.imp.eng.AbstractCamelContext] (main)     Started extract-field-action-3 (kamelet://source)
[org.apa.cam.imp.eng.AbstractCamelContext] (main) Apache Camel 4.4.0.redhat-00025 (camel-1) started in 276ms (build:0ms init:0ms start:276ms)
[io.quarkus] (main) ceq-timer2log-kbind 1.0 on JVM (powered by Quarkus 3.8.5.redhat-00004) started in 1.867s. Listening on: http://0.0.0.0:8080
[io.quarkus] (main) Profile prod activated.
[io.quarkus] (main) Installed features: [camel-attachments, camel-cli-connector, camel-console, camel-core, camel-direct, camel-jackson, camel-kamelet, camel-log, camel-management, camel-microprofile-health, camel-platform-http, camel-rest, camel-rest-openapi, camel-timer, camel-xml-jaxb, camel-yaml-dsl, cdi, kubernetes, smallrye-context-propagation, smallrye-health, vertx]
[log-sink] (Camel (camel-1) thread #2 - timer://tick) Exchange[ExchangePattern: InOnly, BodyType: org.apache.camel.converter.stream.InputStreamCache, Body: "Camel Rocks"]
Copy to Clipboard Toggle word wrap

1.5.2. kubernetes リソースのアンデプロイ

quarkus-maven-plugin によってインストールされたすべてのリソースを削除するには、次のコマンドを実行する必要があります。

oc delete -f target/kubernetes/openshift.yml
Copy to Clipboard Toggle word wrap

1.5.3. Kubernetes CronJob

Camel K には、cron、quartz、または timer タイプのコンシューマーがある場合の機能があります。状況によっては、通常の Deployment ではなく、kubernetes CronJob オブジェクトが作成されます。これにより、Deployment Pod を常時実行しなくなるため、コンピューティングリソースが節約されます。

Red Hat build of Apache Camel for Quarkus でも同じ結果を得るには、以下のプロパティーを src/main/resources/application.properties に設定する必要があります。

quarkus.openshift.deployment-kind=CronJob
quarkus.openshift.cron-job.schedule=<your cron schedule>
camel.main.duration-max-idle-seconds=1
Copy to Clipboard Toggle word wrap

また、以下のように timer コンシューマーが一度だけ実行されるように設定する必要があります。

from("timer:java?delay=0&period=1&repeatCount=1")
Copy to Clipboard Toggle word wrap

以下は timer ーパラメーターです。

  • delay=0: 遅延なしでコンシューマーを起動します。
  • period=1: 1 秒間に 1 回だけ実行します。
  • repeatCount=1: 最初の実行後は実行しません。

1.6. トラブルシューティング

1.6.1. 製品サポート

移行プロセス中に問題が発生した場合は、サポートケース を作成してください。問題の解決をお手伝いします。

1.6.2. camel jbang でエクスポートする際に読み込みエラーを無視する

camel jbang エクスポートを使用すると、ルートの読み込みに失敗する場合があります。ここでは、次のように --ignore-loading-error パラメーターを使用できます。

camel export --ignore-loading-error <parameters>
Copy to Clipboard Toggle word wrap

1.6.3. ロギングを増やす

application.properties の次のプロパティーを使用して、org.apache.camel.component.knative カテゴリーをデバッグレベルに設定することで、カテゴリーロギングを設定できます。

quarkus.log.category."org.apache.camel.component.knative".level=debug
Copy to Clipboard Toggle word wrap

1.6.4. 健全性チェックの無効化

アプリケーション Pod が CrashLoopBackOff で失敗し、ログ Pod に次のエラーが表示される場合があります。

Get "http://127.0.0.1:8080/q/health/ready": dial tcp 127.0.0.1:8080: connect: connection refused
Copy to Clipboard Toggle word wrap

コンテナーの健全性チェックが必要ない場合は、pom.xml からこの Maven 依存関係を削除することで、コンテナーの健全性チェックを無効にすることができます。

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-microprofile-health</artifactId>
</dependency>
Copy to Clipboard Toggle word wrap

1.7. 既知の問題

インテグレーションルートの移行に関連する既知の問題とその回避策がいくつかあります。これらの回避策は、Red Hat build of Apache Camel for Quarkus の制限ではなく、移行プロセスの一部です。移行が完了すると、結果として得られる Maven プロジェクトは顧客の要件に合わせてカスタマイズできるようになります。

1.7.1. Camel K の機能は Camel for Quarkus では利用できない

一部の Camel K 機能は、Quarkus または Camel では quarkus プロパティーとして利用できません。これらの機能では、Red Hat build of Apache Camel for Quarkus でビルドおよびデプロイするときに同じ機能を実現するために追加の設定手順が必要になる場合があります。

1.7.1.1. Owner トレイト

owner トレイト は、作成されたすべてのリソースの Kubernetes 所有者フィールドを設定し、Kubernetes リソースを作成したユーザーを追跡するプロセスを簡素化します。

Quarkus issue #13952 はこの機能を要求していますが、未解決です。

所有者フィールドを設定するための回避策はありません。

1.7.1.2. アフィニティートレイト

node affinity トレイト を使用すると、インテグレーション Pod の実行をスケジュールできるノードを制限できます。

Quarkus issue #13596 はこの機能を要求していますが、未解決です。

回避策として、Maven パッケージステップの後に後処理タスクを実装し、アフィニティー設定を target/kubernetes/openshift.yml に追加します。

1.7.1.3. PodDisruptionBudget トレイト

PodDisruptionBudget トレイト を使用すると、インテグレーション Pod の PodDisruptionBudget リソースを設定できます。

Quarkus には、PodDisruptionBudget リソースを生成するための設定があります。

回避策としては、Maven パッケージステップの後に後処理タスクを実装し、PodDisruptionBudget 設定を target/kubernetes/openshift.yml に追加します。

1.7.2. Camel Jbang が camel-quarkus-direct 依存関係を追加できない

以下の例に示すように、インテグレーションルートに restdirect エンドポイントが含まれている場合は、pom.xmlcamel-quarkus-direct 依存関係が含まれていることを確認します。不足している場合は追加する必要があります。

rest()
    .post("/message")
    .id("rest")
    .to("direct:foo");

from("direct:foo")
    .log("hello");
Copy to Clipboard Toggle word wrap

pom.xml に追加する camel-quarkus-direct 依存関係

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-direct</artifactId>
</dependency>
Copy to Clipboard Toggle word wrap

1.7.3. Quarkus のビルドが失敗する

PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Copy to Clipboard Toggle word wrap

サーバー証明書はクライアントにより、信頼されていません。したがって、サーバーの公開鍵をクライアントに追加するか、サーバーの証明書を信頼する必要があります。テストする場合は、src/main/resources/application.properties に次のプロパティーを追加して再ビルドできます。

quarkus.kubernetes-client.trust-certs=true
Copy to Clipboard Toggle word wrap

1.7.4. Camel Jbang がルートのエクスポートに失敗する

Camel Jbang は、ルートに Bean によってサポートされる Kamelet エンドポイントが含まれている場合、ルートのエクスポートに失敗します。エンドポイントにプロパティープレースホルダー {{broker}} を持つ kamelet が含まれ、その kamelet に camel コンポーネントを初期化するための type: "#class:org.apache.qpid.jms.JmsConnectionFactory" がある場合は、失敗する可能性があります。

from("direct:jms")
.to("kamelet:jms-amqp-10-sink?remoteURI={{broker}}&destinationName={{queue}}");
Copy to Clipboard Toggle word wrap

エラーには、以下のエラーが含まれます。

org.apache.camel.RuntimeCamelException: org.apache.camel.VetoCamelContextStartException: Failure creating route from template: jms-amqp-10-sink
Caused by: org.apache.camel.VetoCamelContextStartException: Failure creating route from template: jms-amqp-10-sink
Caused by: org.apache.camel.component.kamelet.FailedToCreateKameletException: Error creating or loading Kamelet with id jms-amqp-10-sink (locations: classpath:kamelets,github:apache:camel-kamelets/kamelets)
Caused by: org.apache.camel.FailedToCreateRouteException: Failed to create route jms-amqp-10-sink-1 at: >>> To[jms:{{destinationType}}:{{destinationName}}?connectionFactory=#bean:{{connectionFactoryBean}}]
Caused by: org.apache.camel.ResolveEndpointFailedException: Failed to resolve endpoint: jms://Queue:$%7Bqueue%7D?connectionFactory=%23bean%3AconnectionFactoryBean-1 due to: Error binding property (connectionFactory=#bean:connectionFactoryBean-1)
Caused by: org.apache.camel.PropertyBindingException: Error binding property (connectionFactory=#bean:connectionFactoryBean-1) with name: connectionFactory on bean:
Caused by: java.lang.IllegalStateException: Cannot create bean: #class:org.apache.qpid.jms.JmsConnectionFactory
Caused by: org.apache.camel.PropertyBindingException: Error binding property (remoteURI=@@[broker]@@) with name: remoteURI on bean: org.apache.qpid.jms.JmsConnectionFactory@a2b54e3 with value: @@[broker]@@
Caused by: java.lang.IllegalArgumentException: Invalid remote URI: @@[broker]@@
Caused by: java.net.URISyntaxException: Illegal character in path at index 2: @@[broker]@@
Copy to Clipboard Toggle word wrap

修正方法:

kamelet エンドポイント {{broker}}{{queue}} のプロパティープレースホルダーを任意の値に置き換えます。例: remoteURI=broker&destinationName=queue。次にファイルをエクスポートし、src/main/ディレクトリー内のエクスポートされたルートにプロパティープレースホルダーを再度追加できます。

1.8. 参考資料

Camel 製品の詳細は、以下のリンクを参照してください。

法律上の通知

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る