Helidonワークロード

VerrazzanoでのHelidonアプリケーションの開発

Helidonは、マイクロサービスを作成するためのJavaライブラリの集まりです。Helidonは、Javaマイクロサービスを開発するためのオープン・ソース、高速、リアクティブでクラウド・ネイティブのフレームワークを提供します。次の2つのフレームワークとして利用できます:

  • Helidon SEは、最新のJava SE機能であるリアクティブ・ストリーム、非同期および関数型プログラミング、Fluent APIを採用したコンパクトなツールキットです。
  • Helidon MPは、Eclipse MicroProfileを実装およびサポートしています。これは、マイクロサービス向けのJava EEおよびJakarta EEテクノロジを利用して、複数のランタイムにアプリケーションの移植性を実現するベースライン・プラットフォーム定義です。

Helidonは、コンテナファーストの考え方で設計および構築されています。

  • フットプリントが小さく、メモリー使用量が少なく、起動時間が高速です。
  • Docker階層化を有効にするために、すべてのサードパーティ依存関係が別々に格納されます。
  • Kubernetesなどのコンテナ・スケジューラにレディネス、ライブネスおよびカスタマイズ可能なヘルス情報を提供します。

コンテナ化されたHelidonアプリケーションは、一般にKubernetesにDeploymentとしてデプロイされます。

Verrazzano統合

Verrazzanoは、Open Application Model (OAM)を使用したアプリケーション定義をサポートしています。Verrazzanoアプリケーションは、コンポーネントアプリケーション構成で構成されます。

Helidonアプリケーションは、Verrazzanoの第一級オブジェクトで、専用のHelidonワークロード・サポート(VerrazzanoHelidonWorkloadなど)があります。VerrazzanoHelidonWorkloadは、Verrazzanoインストールのverrazzano-application-operatorの一部としてサポートされ、追加のオペレータ設定やインストールは必要ありません。VerrazzanoHelidonWorkloadは、Verrazzanoによって定義されたすべてのトレイトとスコープ、およびOAM仕様で定義されたコアなトレイトとスコープもサポートします。

VerrazzanoHelidonWorkloadは、ContainerizedWorkloadをモデルにしており、たとえば、コンテナで長時間実行されるワークロードに使用されます。ただし、VerrazzanoHelidonWorkloadは、KubernetesのDeploymentスキーマによく似ており、これを直接参照します。これにより、既存のコンテナ化されたHelidonアプリケーションのリフト・アンド・シフトが容易になります。

完全なVerrazzanoHelidonWorkload APIの定義と説明は、VerrazzanoHelidonWorkloadを参照してください。

Verrazzano Helidonアプリケーション開発

Verrazzanoでは、ComponentとApplicationConfigurationリソースを使用してアプリケーションのライフサイクルを管理します。Verrazzanoアプリケーションには、任意の数のVerrazzanoHelidonWorkloadコンポーネントを含めることができます。各ワークロードは、スタンドアロンのコンテナ化されたHelidonアプリケーションで、アプリケーション内の他のアプリケーションから独立しています。

次の例では、spec:セクションの下にあるすべてが、VerrazzanoHelidonWorkloadカスタム・リソースで定義されているコンテナ化されたHelidonアプリケーションのカスタム・リソースYAMLファイルです。このComponent参照をApplicationConfigurationに含めると、新しいコンテナ化されたHelidonアプリケーションがプロビジョニングされます。

apiVersion: core.oam.dev/v1alpha2
kind: Component
metadata:
  name: hello-helidon-component
  namespace: hello-helidon
spec:
  workload:
    apiVersion: oam.verrazzano.io/v1alpha1
    kind: VerrazzanoHelidonWorkload
    metadata:
      name: hello-helidon-workload
      labels:
        app: hello-helidon
    spec:
      deploymentTemplate:
        metadata:
          name: hello-helidon-deployment
        podSpec:
          containers:
            - name: hello-helidon-container
              ...
              ...

アプリケーション開発ガイドには、Verrazzano Helidonアプリケーションの開発およびデプロイに関するエンドツーエンドの手順が示されています。

Verrazzano Helidonアプリケーションのその他の例については、サンプルを参照してください。

プロビジョニング

前述のComponent YAMLファイルを適用すると、Kubernetesによってcomponent.oam.verrazzano.ioリソースが作成されますが、コンテナ化されたHelidonアプリケーションは、VerrazzanoHelidonWorkloadコンポーネントを参照するApplicationConfigurationリソースを作成するまで作成されません。アプリケーションの作成時、Verrazzanoはコンテナ化された各HelidonアプリケーションのDeploymentおよびServiceリソースを作成します。

通常、DeploymentおよびServiceリソースを変更して、変更を加えたり、スケール・インやスケール・アウトなどのライフサイクル操作を実行します。ただし、Verrazzano環境では、コンテナ化されたHelidonアプリケーション・リソースはverrazzano-application-operatorによって所有され、コンポーネント・ワークロード・リソースに合うよう調整されます。したがって、kubectl editまたは新しいYAMLファイルの適用によってVerrazzanoHelidonWorkloadまたはApplicationConfigurationリソースを変更することで、アプリケーション構成を管理する必要があります。Verrazzanoは、Componentリソースが変更されたことを認識し、必要に応じてDeploymentおよびServiceリソースを更新します。

ApplicationConfigurationリソースを変更し、VerrazzanoHelidonWorkloadコンポーネントを追加または削除することで、実行中のアプリケーションに新しいVerrazzanoHelidonWorkloadを追加したり、既存のワークロードを削除したりできます。

スケーリング

コンテナ化されたHelidonアプリケーションのレプリカをスケールするには、ApplicationConfigurationのVerrazzanoHelidonWorkloadでManualScalerTraitを指定することをお薦めします。次の構成例は、アプリケーションのレプリカ数を指定するreplicaCountフィールドを示しています。

...
    spec:
      components:
      - componentName: hello-helidon-component
        traits:
        - trait:                      
            apiVersion: core.oam.dev/v1alpha2
            kind: ManualScalerTrait
            spec:
              replicaCount: 2
...

VerrazzanoはDeploymentリソースのreplicasフィールドを変更し、コンテナ化されたHelidonアプリケーションのレプリカはそれに応じてスケーリングされます。

ロギング

コンテナ化されたHelidonアプリケーションがVerrazzanoにプロビジョニングされると、Verrazzanoはデフォルトのロギングを構成し、Elasticsearchにログを送信します。ログは、Kibanaコンソールを使用して表示できます。

ログは、verrazzano-namespace-<namespace>(例: verrazzano-namespace-hello-helidon)という名前のネームスペースごとのElasticsearch索引に配置されます。同じネームスペース内のコンテナ化されたHelidonアプリケーション・ポッドのすべてのログは、異なるアプリケーションの場合でも同じ索引になります。これは標準動作であり、無効にしたり変更したりする方法はありません。

メトリック

Verrazzanoでは、コンテナ化されたHelidonアプリケーション・ポッドからメトリックをスクレイピングするためにPrometheusを使用します。ロギングと同様に、メトリック・スクレイピングもプロビジョニング時に有効になります。メトリックは、Grafanaコンソールを使用して表示できます。

Verrazzanoでは、アプリケーション・コンポーネントにMetricsTraitを使用してメトリックを有効にするために必要な構成情報をカスタマイズできます。

イングレス

Verrazzanoでは、アプリケーション・コンポーネントにIngressTraitを使用して、コンテナ化されたHelidonアプリケーションへのトラフィック・ルーティングを構成できます。

トラブルシューティング

Verrazzano Helidonアプリケーションに問題がある場合、トラブルシューティングに使用できるいくつかの基本的なテクニックがあります。トラブルシューティングでは、トラブルシューティング時に試行する簡単なこと、および発生する可能性がある一般的な問題の解決方法を示します。