Verrazzanoのアプリケーションについて

Verrazzanoは、Open Application Model (OAM)仕様を使用して、アプリケーションを記述およびデプロイするための階層化されたアプローチを提供します。OAMは、Cloud Native Computing Foundation (CNCF)内で開発された仕様です。Verrazzanoは、OAM仕様バージョン0.2.1に準拠しています。

ApplicationConfigurationは、Componentの構成です。Componentは、アプリケーション実装の詳細をカプセル化します。アプリケーション・デプロイヤは、TraitおよびScopeを適用して、環境のComponentをカスタマイズします。

OAM仕様は拡張性をサポートしています。プラットフォームの動作は、OAM準拠の定義およびコントローラを追加することで拡張できます。具体的には、新しいワークロード、TraitおよびScope定義を追加できます。これらの定義は、Componentおよびアプリケーション構成によって参照でき、カスタム・コントローラによって処理されます。

アプリケーション構成

ApplicationConfigurationは、Componentの参照の集合です。TraitとScopeのセットを各Component参照に適用できます。このプラットフォームは、これらのComponent、TraitおよびScopeを使用して、デプロイメント中に最終アプリケーション・リソースを生成します。

次の例は、ApplicationConfigurationの大まかな構造を示しています。

apiVersion: core.oam.dev/v1alpha2
kind: ApplicationConfiguration
...
spec:
  components:
    - componentName: example-component-1
      traits:
        ...
      scopes:
        ...
    - componentName: example-component-2
        ...

コンポーネント

Componentはワークロードの内容をラップします。プラットフォームはデプロイメント中にワークロードを抽出し、TraitおよびScopeの適用による新しいリソースを作成します。VerrazzanoおよびOAM仕様では、VerrazzanoHelidonWorkloadやContainerizedWorkloadなどの複数のワークロードが提供されます。ワークロードは、任意のKubernetesリソースにすることもできます。一部のKubernetesリソースでは、oam-kubernetes-runtimeオペレータに追加権限を付与する必要がある場合があります。

Componentはパラメータで表すこともできます。これにより、ApplicationConfiguration内で参照されたときにワークロード・コンテンツをカスタマイズできます。詳細は、OAM仕様を参照してください。

次の例は、Componentの大まかな構造を示しています。

apiVersion: core.oam.dev/v1alpha2
kind: Component
...
spec:
  workload:
    ...
  parameters:
    ...

トレイトの詳細は、「Verrazzanoアプリケーション・トレイト」を参照してください。
ワークロードの詳細は、「Verrazzanoアプリケーション・ワークロード」を参照してください。

デプロイメント

Verrazzanoでは、様々なリソースの読取りと書込みを行う多数のKubernetesコントローラを介してアプリケーションのデプロイが行われます。各コントローラはアプリケーション・リソースを処理し、他の関連リソースを生成または更新します。様々なタイプのコントローラが様々なレベルのアプリケーション・リソースを処理します。

ApplicationConfigurationコントローラは、ApplicationConfigurationおよびComponentリソースを処理します。このコントローラは、ApplicationConfigurationリソース内で参照される各Componentのワークロードを抽出および格納します。Verrazzanoは、oam-kubernetes-runtimeオペレータ内にApplicationConfigurationコントローラを実装します。同様に、ApplicationConfigurationコントローラは、Componentリソースに関連付けられたTraitリソースをApplicationConfigurationに抽出して格納します。

ワークロード・コントローラは、ApplicationConfigurationコントローラによって作成されたワークロード・リソース(ContainerizedWorkloadやVerrazzanoWebLogicWorkloadなど)を処理します。このコントローラはこれらのワークロード・リソースを処理し、より具体的なランタイム・リソースを生成します。たとえば、ContainerizedWorkloadコントローラはContainerizedWorkloadリソースを処理し、Deploymentリソースを生成します。VerrazzanoWebLogicWorkloadコントローラはVerrazzanoWebLogicWorkloadリソースを処理し、Domainリソースを生成します。これらのコントローラは、ApplicationConfiguration内のワークロードのComponent参照に適用されるTraitおよびScopeを考慮に入れる場合があります。Verrazzanoは、これらのワークロード・コントローラを2つのオペレータに実装します。Verrazzano固有のワークロード(VerrazzanoHelidonWorkloadなど)は、verrazzano-application-operator内のコントローラによって処理されます。OAMによって定義されたワークロード(ContainerizedWorkloadなど)は、oam-kubernetes-runtimeオペレータを使用するコントローラによって処理されます。

Traitコントローラは、ApplicationConfigurationコントローラによって作成されたTraitリソース(MetricsTraitなど)を処理します。ApplicationConfigurationコントローラは、抽出された各Trait内でコントローラが適用されたコンポーネントを記録します。Traitコントローラは、抽出されたTraitリソースを処理し、他の関連リソースを生成または更新します。たとえば、verrazzano-application-operator内のIngressTraitコントローラはIngressTraitリソースを処理し、関連するGatewayおよびVirtualServiceリソースを生成します。同じオペレータには、MetricsTraitリソースを処理し、Deploymentなどの関連リソースに注釈を追加するMetricsTraitコントローラが含まれています。

Scopeコントローラは、デプロイメント中にApplicationConfigurationコントローラによって更新されたScopeリソースを読み取ります。ApplicationConfigurationコントローラは、Scopeが適用される各Componentへの参照を使用してScopeリソースを更新します。

次の図は、前述のリソースとコントローラの間の関係を示しています。

次の図は、hello-helidonの例に基づき、Kubernetesオペレータの観点からのリソースの処理を示しています。oam-kubernetes-runtime内のコントローラは、ApplicationConfigurationおよびComponentリソースを処理し、VerrazzanoHelidonWorkloadおよびIngressTraitを生成します。次に、verrazzano-application-operator内のコントローラがVerrazzanoHelidonWorkloadおよびIngressTraitリソースを処理して、Deployment、VirtualServiceおよびその他のリソースを生成します。