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. 要件 リンクのコピーリンクがクリップボードにコピーされました!
移行を実行するには、次のツールと設定のセットが必要です。
- Camel JBang 4.7.0.
- JDK 17 または 21。
- Maven (mvn cli) 3.9.5.
- oc cli
- OpenShift クラスター 4.12+
Red Hat build of Apache Camel に関する サポートされている設定 と コンポーネントの詳細 を確認します。
1.1.2. 対象外 リンクのコピーリンクがクリップボードにコピーされました!
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 を使用します。
| アーティファクト | Camel K | Red 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 を参照してください。
| トレイトパラメーター | Quarkus パラメーター |
|---|---|
|
|
|
| トレイトパラメーター | Quarkus パラメーター |
|---|---|
|
|
|
|
| このプロパティーはソースレス Camel K インテグレーションを対象としており、これは Red Hat build of Apache Camel for Quarkus ではサポートされていないため、Quarkus には代替がありません。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
プロパティー名にポート名を設定します。構文は |
|
| pom.xml に quarkus maven 依存関係を追加します。 <dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-health</artifactId>
</dependency>
コンテナーに startup プローブも追加されます。遅延、タイムアウト、期間の値は異なる場合があることに注意してください。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
プロパティー名にポート名を設定します。構文は
また、ルートポート名を |
| トレイトパラメーター | Quarkus パラメーター |
|---|---|
|
|
|
|
|
プロキシーホストを |
| トレイトパラメーター | Quarkus パラメーター |
|---|---|
|
| インテグレーションルートに エラーハンドラー を手動で追加する必要があります。 |
| トレイトパラメーター | Quarkus パラメーター |
|---|---|
|
|
|
|
|
|
|
| 代替はありません。 |
|
|
|
|
|
デバッグのために Camel ログレベルを上げる例: ENV JAVA_OPTS="$JAVA_OPTS -Dquarkus.log.category.\"org.apache.camel\".level=debug"
注記: Docker 設定は、ベースイメージ、OpenJDK 21 の設定 に依存します。 |
|
|
Maven プロジェクトでクラスパスを設定する必要があります。これにより、依存関係の完全なリストが |
| トレイトパラメーター | Quarkus パラメーター |
|---|---|
affinity.pod-affinity affinity.pod-affinity-labels affinity.pod-anti-affinity affinity.pod-anti-affinity-labels affinity.node-affinity-labels
|
Quarkus には |
| トレイトパラメーター | Quarkus パラメーター |
|---|---|
|
|
Quarkus には |
| トレイトパラメーター | Quarkus パラメーター |
|---|---|
|
|
ネイティブビルドの場合は、 |
| トレイトパラメーター | Quarkus パラメーター |
|---|---|
|
|
Maven 依存関係 quarkus.kubernetes.deployment-target=knative quarkus.container-image.group=<group-name> quarkus.container-image.registry=image-registry.openshift-image-registry.svc:5000
|
|
|
|
|
| knative.json で設定可能です。 |
|
| knative.json で設定可能です。 |
|
| knative.json で設定可能です。 |
|
| knative.json で設定可能です。 |
|
| knative.json で設定可能です。 |
|
| knative.json で設定可能です。 |
|
| knative.json で設定可能です。 |
|
|
代替はありません。 |
|
| 代替はありません。 |
|
|
目的の namespace に |
| トレイトパラメーター | Quarkus パラメーター |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| この動作は Red Hat build of Apache Camel for Quarkus には必要ありません。 |
| トレイトパラメーター | Quarkus パラメーター |
|---|---|
|
| pom.xml に次の Maven 依存関係を追加します。
注記: Camel K は |
|
|
|
|
|
カスタムラベルを設定するために使用できる quarkus プロパティーはありませんが、デプロイする前に |
| トレイトパラメーター | Quarkus パラメーター |
|---|---|
pdb.enabled pdb.min-available pdb.max-unavailable
|
|
| トレイトパラメーター | Quarkus パラメーター |
|---|---|
|
|
|
| トレイトパラメーター | Quarkus パラメーター |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| シークレットから証明書を読み取るための quarkus プロパティーはありません。 |
|
|
|
|
| シークレットから鍵を読み取るための quarkus プロパティーはありません。 |
|
|
|
|
| シークレットから CA 証明書を読み取るための quarkus プロパティーはありません。 |
|
|
|
|
| シークレットから宛先証明書を読み取るための quarkus プロパティーはありません。 |
|
|
|
| トレイトパラメーター | Quarkus パラメーター |
|---|---|
|
|
|
1.3. Kamel 実行設定 リンクのコピーリンクがクリップボードにコピーされました!
以下にリストされている kamel run コマンドには追加の設定パラメーターがあり、Red Hat build of Apache Camel for Quarkus の同等のパラメーターも含まれており、これらは src/main/resources/application.properties または pom.xml に追加する必要があります。
| kamel 実行パラメーター | Quarkus パラメーター |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.4. Kamelet、KameletBinding、Pipe リンクのコピーリンクがクリップボードにコピーされました!
Camel K Operator は Kamelet をバンドルし、Kubernetes オブジェクトとしてインストールします。Red Hat build of Apache Camel for Quarkus プロジェクトでは、Maven プロジェクトで kamelets yaml ファイルを管理する必要があります。
kamelets yaml ファイルを管理する方法は 2 つあります。
-
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.xml で org.apache.camel.kamelets:camel-kamelets を宣言しないでください。これにより、camel ルートはパッケージ化されたプロジェクトから Kamelet yaml ファイルをロードします。
KameletBinding の名前が Pipe に変更されました。したがって、ユースケース 3 を理解するには、これを考慮してください。kubernetes リソース名 KameletBinding はまだサポートされていますが、非推奨となっています。できるだけ早く名前を Pipe に変更することを推奨します。
Camel K 1.10.7 以降に多くの更新があったため、Kamelets を更新することを推奨します。たとえば、1.10 と 2.3 の jms-amqp-10-sink.kamelet.yaml を比較することができます。
カスタム Kamelet がある場合は、それに応じて更新する必要があります。
-
Kamelet ファイル内の
flowの名前をtemplateに変更します。 -
propertyの名前を Bean プロパティーのpropertiesに変更します。
1.4.1. Knative リンクのコピーリンクがクリップボードにコピーされました!
Camel K で Knative エンドポイントを使用してインテグレーションルートを実行すると、Camel K Operator によって SinkBindings、Trigger、Subscription などの Knative オブジェクトがいくつか作成されます。また、Camel K Operator は、クラスターにデプロイされた Knative オブジェクトと camel-knative コンポーネントが対話するために必要な knative.json 環境ファイルを作成します。
knative.json の例
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. 移行プロセス リンクのコピーリンクがクリップボードにコピーされました!
移行プロセスは、以下の手順で構成されます。
| タスク | 説明 |
|---|---|
| Maven プロジェクトの作成 | Camel JBang の camel cli を使用してファイルをエクスポートすると、Maven プロジェクトが作成されます。 |
| 設定の調整 | ファイルを追加および変更してプロジェクトを設定します。 |
| Build | プロジェクトをビルドすると、JAR ファイルが生成されます。コンテナーイメージをビルドし、コンテナーレジストリーにプッシュします。 |
| デプロイ | Kubernetes オブジェクトを Openshift クラスターにデプロイし、Pod を実行します。 |
1.5.1. 移行手順 リンクのコピーリンクがクリップボードにコピーされました!
1.5.1.1. ユースケース 1 - 設定によるシンプルなインテグレーションルート リンクのコピーリンクがクリップボードにコピーされました!
以下のインテグレーションルートは、rest および kamelet エンドポイントを使用します。
http2jms.properties ファイル
broker=amqp://172.30.177.216:61616 queue=qtest
broker=amqp://172.30.177.216:61616
queue=qtest
kamel 実行コマンド
kamel run Http2Jms.java -p file://$PWD/http2jms.properties --annotation some_annotation=foo --env MY_ENV1=VAL1
kamel run Http2Jms.java -p file://$PWD/http2jms.properties --annotation some_annotation=foo --env MY_ENV1=VAL1
アノテーションを使用して Pod をビルドして実行します。環境変数とプロパティーファイルは ConfigMap として追加され、Pod にマウントされます。
1.5.1.1.1. 手順 1 - Maven プロジェクトの作成 リンクのコピーリンクがクリップボードにコピーされました!
camel jbang を使用して、ファイルを Maven プロジェクトにエクスポートします。
パラメーターの説明。
| パラメーター | 説明 |
|---|---|
|
| Quarkus ランタイムを使用します。生成されたプロジェクトには quarkus BOM が含まれます。 |
|
|
Red Hat がサポートする quarkus プラットフォーム Maven アーティファクトグループは |
|
| これは現時点でサポートされている最新バージョンです。最新リリースバージョンは、Quarkus ドキュメント を確認してください。 |
|
| GA リリースで Red Hat Maven リポジトリーを使用します。 |
|
| Openshift でビルドするために、quarkus-openshift 依存関係を pom.xml に追加します。 |
|
| 生成された pom.xml に GAV を設定します。プロジェクトに合わせて GAV を設定する必要があります。 |
|
| 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
cd ceq-app1
docker ビルドストラテジーを設定します。
echo quarkus.openshift.build-strategy=docker >> src/main/resources/application.properties
echo quarkus.openshift.build-strategy=docker >> src/main/resources/application.properties
src/main/docker のベースイメージを OpenJDK 21 に変更します (オプション)
FROM registry.access.redhat.com/ubi9/openjdk-21:1.20
FROM registry.access.redhat.com/ubi9/openjdk-21:1.20
pom.xml でコンパイラーのバージョンを 21 に変更します (オプション)
<maven.compiler.release>21</maven.compiler.release>
<maven.compiler.release>21</maven.compiler.release>
必要に応じて、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
quarkus.openshift.annotations.sample_annotation=sample_value1
quarkus.openshift.env.vars.SAMPLE_KEY=sample_value2
quarkus.openshift.labels.sample_label=sample_value3
これらのパラメーターを使用して、イメージとコンテナーのレジストリー設定をカスタマイズする場合:
quarkus.container-image.registry quarkus.container-image.group quarkus.container-image.name quarkus.container-image.tag
quarkus.container-image.registry
quarkus.container-image.group
quarkus.container-image.name
quarkus.container-image.tag
実行時に使用される設定を含む 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
oc create configmap ceq-app --from-file application.properties=http2jms.properties --dry-run=client -oyaml > src/main/kubernetes/common.yml
Quarkus が ConfigMap をマウントできるように、application.properties に次のプロパティーを追加します。
quarkus.openshift.app-config-map=ceq-app
quarkus.openshift.app-config-map=ceq-app
1.5.1.1.3. 手順 3 - ビルド リンクのコピーリンクがクリップボードにコピーされました!
ローカル検査用にパッケージをビルドします。
./mvnw -ntp package
./mvnw -ntp package
このステップでは、Maven アーティファクト (JAR ファイル) をローカルでビルドし、target/kubernetes ディレクトリーに Openshift ファイルを生成します。
target/kubernetes/openshift.yml を追跡し、Openshift クラスターにデプロイされるデプロイメントを理解します。
1.5.1.1.4. 手順 4 - ビルドとデプロイ リンクのコピーリンクがクリップボードにコピーされました!
パッケージをビルドして Openshift にデプロイします。
./mvnw -ntp package -Dquarkus.openshift.deploy=true
./mvnw -ntp package -Dquarkus.openshift.deploy=true
Maven 出力でイメージのビルドを追跡できます。ビルド後、Pod が実行されていることを確認できます。
1.5.1.1.5. 手順 5 - テスト リンクのコピーリンクがクリップボードにコピーされました!
インテグレーションルートが機能しているか確認します。
プロジェクトがローカルで実行できる場合は、以下を試すことができます。
mvn -ntp quarkus:run
mvn -ntp quarkus:run
Pod コンテナーのログを追跡します。
oc logs -f `oc get pod -l app.kubernetes.io/name=app -oname`
oc logs -f `oc get pod -l app.kubernetes.io/name=app -oname`
次のような出力が表示されるはずです。
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 インテグレーションルート
Printer インテグレーションルート
kamel run コマンドは、Camel K でこれがどのように実行されるかを示します。
kamel run Feed.java kamel run Printer.java
kamel run Feed.java
kamel run Printer.java
2 つの Pod が実行される予定です。
1.5.1.2.1. 手順 1 - Maven プロジェクトの作成 リンクのコピーリンクがクリップボードにコピーされました!
camel jbang を使用して、ファイルを完全な Maven プロジェクトにエクスポートします。
feed インテグレーションをエクスポートします。
printer インテグレーションをエクスポートします。
インテグレーションごとに Maven プロジェクトが作成されます。
1.5.1.2.2. 手順 2 - プロジェクトの設定 リンクのコピーリンクがクリップボードにコピーされました!
この手順では、環境に合わせて Maven プロジェクトとアーティファクトを設定します。ユースケース 1 には、ConfigMaps のラベル、アノテーション、および設定に関する情報が含まれています。
Maven プロジェクトに参加します。
cd ceq-feed
cd ceq-feed
docker ビルドストラテジーを設定します。
echo quarkus.openshift.build-strategy=docker >> src/main/resources/application.properties
echo quarkus.openshift.build-strategy=docker >> src/main/resources/application.properties
src/main/docker のベースイメージを OpenJDK 21 に変更します (オプション)
FROM registry.access.redhat.com/ubi9/openjdk-21:1.20
FROM registry.access.redhat.com/ubi9/openjdk-21:1.20
pom.xml でコンパイラーのバージョンを 21 に変更します (オプション)
<maven.compiler.release>21</maven.compiler.release>
<maven.compiler.release>21</maven.compiler.release>
デプロイメントターゲットとして openshift を追加します。
quarkus.kubernetes.deployment-target=openshift
quarkus.kubernetes.deployment-target=openshift
生成された openshift.yml および knative.yml ファイルでイメージアドレスを設定するには、これらのコンテナーイメージプロパティーを設定する必要があります。
quarkus.container-image.registry=image-registry.openshift-image-registry.svc:5000 quarkus.container-image.group=<namespace>
quarkus.container-image.registry=image-registry.openshift-image-registry.svc:5000
quarkus.container-image.group=<namespace>
Knative コントローラーがデプロイメントに K_SINK 環境変数を注入できるようにするには、application.properties に次のプロパティーを追加します。
quarkus.openshift.labels."bindings.knative.dev/include"=true
quarkus.openshift.labels."bindings.knative.dev/include"=true
src/main/resources に knative.json を追加します。これは、Camel が Knative チャネルに接続するために必要な設定です。
k.sink プロパティープレースホルダーがあります。Pod が実行されると、K_SINK という名前の環境変数が参照され、URL 値が置き換えられます。
Camel が Knative 環境設定をロードできるようにするには、次のプロパティーを追加します。
camel.component.knative.environmentPath=classpath:knative.json
camel.component.knative.environmentPath=classpath:knative.json
注入を機能させるには、Knative SinkBinding オブジェクトを作成する必要があります。
SinkBinding ファイルを src/main/kubernetes/openshift.yml に追加します。
次に、ceq-printer プロジェクトを設定します。
cd ceq-printer
cd ceq-printer
docker ビルドストラテジーを設定します。
echo quarkus.openshift.build-strategy=docker >> src/main/resources/application.properties
echo quarkus.openshift.build-strategy=docker >> src/main/resources/application.properties
src/main/docker のベースイメージを OpenJDK 21 に変更します (オプション)
FROM registry.access.redhat.com/ubi9/openjdk-21:1.20
FROM registry.access.redhat.com/ubi9/openjdk-21:1.20
pom.xml でコンパイラーのバージョンを 21 に変更します (オプション)
<maven.compiler.release>21</maven.compiler.release>
<maven.compiler.release>21</maven.compiler.release>
knative をデプロイメントターゲットとして設定します。
quarkus.kubernetes.deployment-target=knative
quarkus.kubernetes.deployment-target=knative
生成された openshift.yml および knative.yml ファイルでイメージアドレスを正しく設定するには、これらのコンテナーイメージプロパティーを設定する必要があります。
quarkus.container-image.registry=image-registry.openshift-image-registry.svc:5000 quarkus.container-image.group=<namespace>
quarkus.container-image.registry=image-registry.openshift-image-registry.svc:5000
quarkus.container-image.group=<namespace>
src/main/resources に knative.json を追加します。これは、Camel が Knative チャネルに接続するために必要な設定です。
Camel が Knative 環境設定をロードできるようにするには、次のプロパティーを追加します。
camel.component.knative.environmentPath=classpath:knative.json
camel.component.knative.environmentPath=classpath:knative.json
チャネルからシンクへのメッセージ配信には、Knative Subscription が必要です。
Subscription ファイルを src/main/kubernetes/knative.yml に追加します。
1.5.1.2.3. 手順 3 - ビルド リンクのコピーリンクがクリップボードにコピーされました!
ローカル検査用にパッケージをビルドします。
./mvnw -ntp package
./mvnw -ntp package
このステップでは、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
./mvnw -ntp package -Dquarkus.openshift.deploy=true
Maven 出力でイメージのビルドを追跡できます。ビルド後に、Pod が実行されていることを確認できます。
1.5.1.2.5. 手順 5 - テスト リンクのコピーリンクがクリップボードにコピーされました!
インテグレーションルートが機能しているか確認します。
Pod コンテナーのログを追跡します。
oc logs -f `oc get pod -l app.kubernetes.io/name=ceq-feed -oname`
oc logs -f `oc get pod -l app.kubernetes.io/name=ceq-feed -oname`
以下のような出力が表示されるはずです。
ceq-feed pod
Property-placeholders を参照してください。k.sink プロパティーの値が表示されます。
ceq-printer pod
1.5.1.3. ユースケース 3 - パイプ リンクのコピーリンクがクリップボードにコピーされました!
KameletBinding として、次のインテグレーションルートを指定します。
1.5.1.3.1. 手順 1 - Maven プロジェクトの作成 リンクのコピーリンクがクリップボードにコピーされました!
camel jbang を使用して、ファイルを Maven プロジェクトにエクスポートします。
より多くのパラメーターは camel export --help で確認できます。
1.5.1.3.2. 手順 2 - プロジェクトの設定 リンクのコピーリンクがクリップボードにコピーされました!
これは、環境に合わせて Maven プロジェクトとアーティファクトを設定するステップです。
一般的な設定はユースケース 1 と 2 を実行してください。KameletBinding 設定に必要なステップも提供します。
Openshift にビルドしてデプロイする前に、camel jbang を使用してインテグレーションルートをローカルで実行してみて、どのように動作するかを確認できます。
Maven プロジェクトに参加します。
cd ceq-timer2log-kbind
cd ceq-timer2log-kbind
Kamelet の管理方法は、冒頭の注記を参照してください。この移行ユースケースでは、pom.xml の org.apache.camel.kamelets:camel-kamelets 依存関係を使用します。
エクスポートすると、application.properties に次のプロパティーが追加されますが、削除することもできます。
quarkus.native.resources.includes camel.main.routes-include-pattern
quarkus.native.resources.includes
camel.main.routes-include-pattern
docker ビルドストラテジーを設定します。
echo quarkus.openshift.build-strategy=docker >> src/main/resources/application.properties
echo quarkus.openshift.build-strategy=docker >> src/main/resources/application.properties
Kamelet または KameletBinding に以下の trait.camel.apache.org/environment.vars: "my_key=my_val" のようなトレイトアノテーションがある場合は、トレイト設定セクションの Quarkus プロパティーを使用して設定する方法に従う必要があります。
1.5.1.3.3. 手順 3 - ビルド リンクのコピーリンクがクリップボードにコピーされました!
ローカル検査用にパッケージをビルドします。
./mvnw -ntp package
./mvnw -ntp package
このステップでは、Maven アーティファクト (JAR ファイル) をローカルでビルドし、target/kubernetes ディレクトリーに Openshift マニフェストファイルを生成します。
target/kubernetes/openshift.yml を追跡し、Openshift クラスターにデプロイされるデプロイメントを理解します。
1.5.1.3.4. 手順 4 - ビルドとデプロイ リンクのコピーリンクがクリップボードにコピーされました!
パッケージをビルドして Openshift にデプロイします。
./mvnw -ntp package -Dquarkus.openshift.deploy=true
./mvnw -ntp package -Dquarkus.openshift.deploy=true
Maven 出力でイメージのビルドを追跡できます。ビルド後に、Pod が実行されていることを確認できます。
1.5.1.3.5. 手順 5 - テスト リンクのコピーリンクがクリップボードにコピーされました!
インテグレーションルートが機能しているか確認します。
Pod コンテナーのログを追跡します。
oc logs -f `oc get pod -l app.kubernetes.io/name=ceq-timer2log-kbind -oname`
oc logs -f `oc get pod -l app.kubernetes.io/name=ceq-timer2log-kbind -oname`
以下のような出力が表示されるはずです。
1.5.2. kubernetes リソースのアンデプロイ リンクのコピーリンクがクリップボードにコピーされました!
quarkus-maven-plugin によってインストールされたすべてのリソースを削除するには、次のコマンドを実行する必要があります。
oc delete -f target/kubernetes/openshift.yml
oc delete -f target/kubernetes/openshift.yml
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
quarkus.openshift.deployment-kind=CronJob
quarkus.openshift.cron-job.schedule=<your cron schedule>
camel.main.duration-max-idle-seconds=1
また、以下のように timer コンシューマーが一度だけ実行されるように設定する必要があります。
from("timer:java?delay=0&period=1&repeatCount=1")
from("timer:java?delay=0&period=1&repeatCount=1")
以下は 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>
camel export --ignore-loading-error <parameters>
1.6.3. ロギングを増やす リンクのコピーリンクがクリップボードにコピーされました!
application.properties の次のプロパティーを使用して、org.apache.camel.component.knative カテゴリーをデバッグレベルに設定することで、カテゴリーロギングを設定できます。
quarkus.log.category."org.apache.camel.component.knative".level=debug
quarkus.log.category."org.apache.camel.component.knative".level=debug
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
Get "http://127.0.0.1:8080/q/health/ready": dial tcp 127.0.0.1:8080: connect: connection refused
コンテナーの健全性チェックが必要ない場合は、pom.xml からこの Maven 依存関係を削除することで、コンテナーの健全性チェックを無効にすることができます。
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-microprofile-health</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-microprofile-health</artifactId>
</dependency>
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 依存関係を追加できない リンクのコピーリンクがクリップボードにコピーされました!
以下の例に示すように、インテグレーションルートに rest と direct エンドポイントが含まれている場合は、pom.xml に camel-quarkus-direct 依存関係が含まれていることを確認します。不足している場合は追加する必要があります。
pom.xml に追加する camel-quarkus-direct 依存関係
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-direct</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-direct</artifactId>
</dependency>
1.7.3. Quarkus のビルドが失敗する リンクのコピーリンクがクリップボードにコピーされました!
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
サーバー証明書はクライアントにより、信頼されていません。したがって、サーバーの公開鍵をクライアントに追加するか、サーバーの証明書を信頼する必要があります。テストする場合は、src/main/resources/application.properties に次のプロパティーを追加して再ビルドできます。
quarkus.kubernetes-client.trust-certs=true
quarkus.kubernetes-client.trust-certs=true
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}}");
from("direct:jms")
.to("kamelet:jms-amqp-10-sink?remoteURI={{broker}}&destinationName={{queue}}");
エラーには、以下のエラーが含まれます。
修正方法:
kamelet エンドポイント {{broker}} と {{queue}} のプロパティープレースホルダーを任意の値に置き換えます。例: remoteURI=broker&destinationName=queue。次にファイルをエクスポートし、src/main/ディレクトリー内のエクスポートされたルートにプロパティープレースホルダーを再度追加できます。
1.8. 参考資料 リンクのコピーリンクがクリップボードにコピーされました!
Camel 製品の詳細は、以下のリンクを参照してください。
- Red Hat build of Apache Camel のリリーススケジュール
- Camel Spring Boot への移行を含む Red Hat build of Apache Camel for Quarkus のドキュメント
- Camel K ドキュメント
- Camel Spring Boot アプリケーションの OpenShift へのデプロイ
- Red Hat build of Apache Camel for Quarkus アプリケーションのデプロイ
- Red Hat build of Quarkus アプリケーションを OpenShift Container Platform にデプロイする
- Red Hat build of Quarkus 向け開発者リソース
- Kubernetes の Quarkus 設定
- Openshift の Quarkus 設定