Apache Camel Advent Calendar 15日目の記事は、サポート担当古市が担当します。 テーマは、「Deploy camel to k8s/OpenShift」

Camelを使った Java アプリケーションを k8s/OpenShift 環境へデプロイする方法は複数あり、現時点ではサーチエンジンやAIなどで回答を求めた場合、製品サポート対象ではない方法が提示されることもあり鬼門のトピックです。 赤帽ブログの記事ですので、Red Hat Build of Apache Camel(RHBAC) 製品サポート対象となるデプロイ方法をご紹介します。
現在、RHBAC 4.x では2つの runtime をサポートしており、runtime 毎でサポートされるデプロイ方法が異なります。
- Quarkus (Red Hat build of Quarkus(RHBQ) と同じ方法)
- Spring Boot (openshift-maven-plugin を使用)
なぜ runtime によってデプロイ方法が違うのか不思議に思う方が多いかと思います。自分もその1人です。。 話が脱線しますが、異なるデプロイ方法になった経緯を自分なりに想像してみたので、共有します。(公式情報ではありません。あくまでも個人の推測です。)
RHBAC のバージョンは Apache Camel のバージョンに準拠しています。 4.8 や、4.10 といったように。 しかし、RHBAC for Quarkus の場合、製品番号がガラッと変わります。4.8 相当は 3.15 で、4.10 相当は 3.20といったように。
このバージョンはどこから来ているかというと、RHBQ です。
Quarkus runtime の拡張機能として各種 extension が提供されておりますが、camel extension もサポート対象となる RHBQ が RHBAC for Quarkus であり、あくまでも主語は Quarkusです。 なので、RHBAC for Quarkus のバージョンは RHBQ のバージョンが使われており、RHBQユーザーにはわかりやすいでしょう。(逆に、Quarkus未経験の Camelユーザーが混乱する理由でもあります。) 「あくまでも主語は Quarkus」なので、k8s/OpenShift環境へのデプロイ方法が RHBQと同じなのも腹落ちします。
RHBAC for Quarkus の製品ドキュメントでデプロイ方法を確認すると、RHBQドキュメントのリンクが紹介されています。デプロイ方法の詳細については、こちらをご確認ください。
次に Spring Bootについて。 RHBAC の全身となる Red Hat Fuse 7.x では、「Fuse on Openshift」も提供しており、サポート対象 runtime(karaf, EAP, SpringBoot)は maven plugin を使いデプロイする方法を提供しておりました。 その maven pluginこそが、openshift-maven-plugin でした。
karaf runtime と EAP runtime が deprecated となり、最終的に RHBAC では Spring Boot runtime サポートが残り、Quarkus runtime が追加された状況となります。 Red Hat Fuse(Fuse on OpenShift) からの流れもあり、k8s/OpenShift環境へのデプロイ方法に openshift-maven-plugin が使われているのだと考えられます。 「Fuse on Openshift」を使われていたユーザーには馴染みがある一方、OpenShiftを使った運用経験者が初めて RHBAC を取り扱う際には困惑されるようです。なぜ、openshift-maven-plugin を強要するのだと。。
RHBAC for Spring Boot の製品ドキュメントでは、openshift-maven-plugin を使ったデプロイ方法の紹介がされていますが、かなりシンプルです。
mvn clean -DskipTests oc:deploy -Popenshift
細かなオプションなどはコミュニティードキュメントをご確認いただくか、製品サポート窓口のご利用をご検討ください。
番外編として、もう1つ方法があります。 camel-jbang も k8s plugin による連携が可能です。
camel-jbang は開発用ツールの位置付けであり、簡単に動作確認する際にご利用いただけます。こんな方法もあるんだといった知識としてお持ちいただく程度で、プロジェクトのデプロイは前述した2つの方法をご利用いただくようご検討ください。
明日の advent calendar 16日目では、「Camel で header/variable を使い分ける」についてご紹介します。 アドベントカレンダーの一覧はこちらです。 qiita.com