概要
Red Hat® OpenShift® では、Kubernetes ネイティブの Spring および Spring Boot アプリケーションの開発と実行ができます。
Spring とは
Spring Framework は、分散型のマイクロサービス・アーキテクチャに基づいたアプリケーション構築に使用される最も一般的な Java フレームワークの 1 つです。Spring の Java ベースアプリケーション向けのプログラミングおよび構成モデルは「配管」に重点を置いているため、開発者は特定のデプロイメント環境と不必要に連携することなく、アプリケーションレベルのビジネスロジックに集中できます。Spring Boot を使用すると、アプリケーションを自己完結型の実行可能アプリケーションに容易にパッケージ化して設定できるようになり、Kubernetes にコンテナとしてデプロイするのも容易になります。
Kubernetes ネイティブの Spring
Spring は、従来の Java フレームワークの多くと同様に、Kubernetes などのプラットフォーム上のコンテナで稼働していることを本質的に「認識」していません。Spring Framework には、Spring Boot、Spring Cloud、Spring Web などの分散型アプリケーションの構築とデプロイを容易にする多くのコンポーネントや、サービスディスカバリー、負荷分散、リクエストルーティングなどを行うその他のコンポーネントが多数含まれています。Kubernetes を使用すると、このようなコンポーネントの管理の多くを基盤となるコンテナ・プラットフォームに任せて、稼働中のプラットフォームとより効率的に統合するアプリケーションを作成できます。これらの最適化されたコードパスを使用して Spring アプリケーションを構築するのは、Spring と Kubernetes の組み合わせによって発揮される力を解き放つための鍵になります。
Red Hat のリソース
Spring 開発者向けの Kubernetes サポート
Spring アプリケーションは、Kubernetes と、Kubernetes にデプロイされた機能を利用して、Kubernetes での効率的な開発を可能にするために必要なクラウドサービスを提供します。これには、メッセージキュー、データベース、永続ストレージ、キャッシュなどのサービスが含まれます。
サービスレジストリ
マイクロサービス・アーキテクチャでは多くの場合、個々のサービスが動的にスケーリングされますが、プライベート、ハイブリッド、またはパブリッククラウドでは、ホストの数とアドレスを事前に予測したり静的に構成したりできるとは限りません。Kubernetes には、サービスのレプリケーションとスケーリングが中核機能として備わっています。つまり、クライアントはキャッシュを保持する必要がなく、サービスレジストリ自体の障害に対処する必要もありません。たとえば、Netflix Ribbon (Spring アプリケーションでよく使用される) は、コードに変更を加えずに、サービスレジストリの代わりに Kubernetes を使用するように宣言的に構成できます。
負荷分散
Spring アプリケーションでステートレスサービスへのクライアント呼び出しが行われると、サービスレジストリからサービスを検索し、利用可能なインスタンス間で負荷分散を行うことで高可用性 (HA) を維持します。Kubernetes は単一のサービスアドレスを提供し、呼び出しはこのアドレスで負荷分散され、適切なインスタンスにリダイレクトされます。サービス名は Kubernetes クラスタ内でこのクラスタ IP アドレスに転換され、ロードバランサーに到達するために使用されます。外部からの呼び出しでルーターを通過するのが望ましくない場合は、サービスに外部 IP アドレスを構成できます。
フォールトトレランス
マイクロサービスはその性質上高度に分散されているため、リモート呼び出しの数が増えるにつれてリモート呼び出しが失敗するリスクが高まります。長い間、サーキットブレーカーのようなフォールトトレランス・パターンの実装は、開発者が行わなければならないものでした。しかし、サービスメッシュを実装する Istio のようなプロジェクトは、この負担を軽減し、クラスタで実行されている Spring サービスの運用制御を大幅に強化できます。
外部化された構成
外部化された構成管理のソリューションは、構成ファイル、コマンドライン引数、および環境変数の典型的な組み合わせに代わる的確な代替手段を提供できます。これは、外部の変更に応じてアプリケーションの可搬性と柔軟性を向上させるために使用されます。Kubernetes ConfigMaps を使用して、個々のプロパティなどのきめ細かい情報、または構成ファイル全体や JSON BLOB などの大まかな情報を格納できます。これらはコンテナに構成データを挿入するメカニズムを提供します。@ConfigProperty などのアノテーションによって構成と Spring アプリケーションを切り離しつつ、構成から Spring アプリケーションへのアクセスを可能にできます。
分散トレースとアプリケーションのメトリクス
数多くのメリットを持つマイクロサービス・アーキテクチャですが、分析とトラブルシューティングが難しくなる可能性もあります。各ビジネスリクエストは、さまざまなレイヤーの個々のサービスに対して、およびそれらのサービス間で、複数の呼び出しを生成します。分散トレースは各サービス呼び出しをすべて結び付け、生成された一意の ID を介してそれらをビジネスリクエストに関連付けます。さらに、メトリクスを使用すると、Spring アプリケーションでアプリケーションレベルのデータを公開して、アプリケーションの状態をきめ細かく調査することができます。Jaeger などのトレースツールを Prometheus および Grafana とのメトリクススタックと組み合わせると、Kubernetes 上の Spring アプリケーションの監視とトラブルシューティングを行うための強固な基盤が得られます。
Kubernetes 向けに Spring を最適化する
Spring アプリケーションが分散型サービスのコレクションへと進化するにつれて、これらのサービス間の通信とセキュリティの管理はより困難になります。Red Hat OpenShift と Red Hat Runtimes を組み合わせることで、業界をリードするコンテナと Kubernetes ハイブリッドクラウド・プラットフォーム上で Spring アプリケーションの大規模な構築と管理を行うために必要なツール、フレームワーク、ネイティブの Kubernetes 統合をSpring 開発者に提供できます。
Spring 開発者にとっての Red Hat OpenShift のメリット
Red Hat OpenShift を使用する Spring 開発者には多くのメリットがあり、たとえば、次のようなものが含まれます。
Kubernetes および DevOps 向けに最適化
OpenShift で Spring Boot を使用すると、開発者は既存と新規両方の Spring アプリケーションで、「Kubernetes で Spring Boot を実行する」のと同様のエクスペリエンスを得られます。
- Spring および Spring Boot を使用したクラウドネイティブ・アプリケーションの構築をサポートする
- 従来のスタンドアローンのバッキングサービスに代わる Kubernetes 機能を統合する
- 外部化された構成:Kubernetes ConfigMap と、Spring Cloud Kubernetes との統合
- サービスディスカバリー:Kubernetes Services
- 負荷分散:Kubernetes Replication Controller
- 自動再起動:Kubernetes Health Probes と、Spring Actuator との統合
- メトリクス:Prometheus、Grafana、および Spring Cloud Sleuth との統合
- Istio と Jaeger Tracing を使用した分散トレース
- Red Hat OpenShift の開発者用ツールにより、新しい Spring プロジェクトを迅速にスキャフォールディングし、任意の IDE で使い慣れた Spring API にアクセスし、Red Hat OpenShift にデプロイする
スタック全体で事前統合
使い慣れた Spring API を使用し、Red Hat OpenShift および Red Hat Application Services で基盤となる Kubernetes プラットフォームとサービスのメリットを享受できます。
- コンテナ環境での Java アプリケーション実行向けに最適化されたRed Hat ビルドの OpenJDK
- Spring Cloud Kubernetes、Spring Security (Red Hat SSO を使用)、Spring Caching (Red Hat Data Grid を使用)、Spring Messaging (Red Hat AMQ を使用)、Spring Web、Spring Data などと統合している Red Hat Application Services を介して Kubernetes ネイティブのサービスを利用可能
- Spring Boot と Red Hat Fuse (Apache Camel に基づく) を使用して、アプリケーションサービス全体に共通のエンタープライズ統合パターンを実装
先進的なアプリケーションに対応
Spring の知識を使用し、最新のテクノロジーによって先進的なアプリケーションを開発できます。
- Camel-K と Kafka を使用したサーバーレスの Spring アプリケーション
- 使い慣れた Spring API を使用して、Quarkus でコンテナネイティブ Java アプリケーションを構築
- Kogito を使用したネイティブ Kubernetes のビジネスプロセス
- Kubernetes Operator を使用することで、Halkyon 経由でネイティブ Kubernetes API を使用して Spring アプリケーションを作成およびリンクする手段を提供
Red Hat 公式ブログ
Red Hat のお客様、パートナー、およびコミュニティのエコシステムに関する最新の情報を入手しましょう。