WebLogicワークロード

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

WebLogic Serverは、Java Enterprise Editionベースのアプリケーションを管理するための広く使用されているエンタープライズ・アプリケーション・サーバーであり、WebLogic Kubernetes Operatorを使用したKubernetesでの実行が動作保証されています。WebLogic Kubernetes Operatorは、VerrazzanoのWebLogicドメイン・ライフサイクルを管理します。WebLogicドメイン・カスタム・リソース(CR)は、WebLogicドメインの構成を指定します。オペレータは、WebLogicドメインCRをモニターし、必要に応じてKubernetesリソース(Pod、Serviceなど)を作成、更新および削除することでドメインを調整します。各ポッドは、WebLogic Server、管理サーバーまたは管理対象サーバーです。

WebLogic Kubernetes Operatorは、verrazzano-systemネームスペースにインストールされ、Verrazzanoによってデプロイされたistio-meshの一部です。

WebLogic OAMコンポーネント

Verrazzanoでは、WebLogicワークロードはVerrazzanoWebLogicWorkload OAMコンポーネントとして指定され、1つのコンポーネントは1つのWebLogicドメインを指定します。ApplicationConfigurationには、複数のVerrazzanoWebLogicWorkloadコンポーネントを含めることができるため、複数のWebLogicドメインを含めることができます。1つ以上のVerrazzanoWebLogicWorkloadコンポーネントにTraitsを指定できます。すべてのWebLogicドメインCRフィールドは、VerrazzanoWebLogicWorkloadで指定できます。

次に、WebLogic OAMコンポーネントの例を示します。

apiVersion: core.oam.dev/v1alpha2
kind: Component
metadata:…
spec:  
  workload:    
    apiVersion: oam.verrazzano.io/v1alpha1
    kind: VerrazzanoWebLogicWorkload
    spec:      
      template:
 metadata:
    name: todo-domain
 spec:
           domainUID: tododomain
           omainHome: /u01/domains/tododomain          …

Verrazzanoアプリケーション・オペレータ

Verrazzanoアプリケーション・オペレータは、VerrazzanoWebLogicWorkloadカスタム・リソース(CR)をモニターし、VerrazzanoWebLogicWorkload CRで提供される仕様に基づいてDomain CRを作成、更新および削除します。また、ロギング用のFluentdサイドカー・インジェクションおよびメトリック用のMonitoring Exporter構成を追加するように、WebLogicドメインCRを変更します(まだ存在しない場合)。WebLogic Kubernetes Operatorは、WebLogicドメインCRに基づいてWebLogicドメインを作成します。

WebLogicドメイン・ライフサイクル

WebLogicドメインのライフサイクル・ステージは次のとおりです:

  1. WebLogicドメインの作成。
    • WebLogicコンポーネントを含むアプリケーションが作成されます。
    • WebLogicコンポーネントが既存のアプリケーションに追加されます。
  2. WebLogicドメインの削除。
    • WebLogicコンポーネントを含むアプリケーションが削除されます。
    • WebLogicコンポーネントが既存のアプリケーションから削除されます。
  3. WebLogicドメインのスケーリング。
    • OAMコンポーネント仕様内のWebLogicドメインCRのreplicasフィールドを変更します。
  4. WebLogicドメインの更新。
    • OAMコンポーネント仕様内のWebLogicドメインCRの他のfieldsフィールドを変更します。

OAMコンポーネントのレプリカ数を変更して、WebLogicドメインをスケール・インおよびスケール・アウトします。OAMアプリケーションを削除するか、アプリケーションからコンポーネントを削除することで、WebLogicドメインを削除します。

Istio統合

Verrazzanoは、IstioメッシュにすべてのWebLogicドメイン・ポッドを作成します。すべてのWebLogicネットワーク・トラフィックはmTLSを使用します。

セキュリティ、ロード・バランシング、メトリックなどを提供する各サービスのワークロードの前にEnvoyプロキシ・サイドカーが存在します。ポッド内外のトラフィックはプロキシを通過します。

ネームスペースにistio-injection=enabledというラベルが付いている場合、IstioはIstioメッシュにWebLogicドメインを配置します。WebLogicドメインが作成されるすべてのネームスペースにistio-injection=enabledのラベルを付けます。そうしないと、WebLogicドメインの作成に失敗します。また、VerrazzanoProjectの使用時にネームスペースにラベルを付けることもできます。デフォルトでは、プロジェクトに関連付けられたすべてのネームスペースにラベルが割り当てられます。WebLogicドメインCRでは、Verrazzanoアプリケーション・オペレータがIstio有効フィールドを設定します。

apiVersion: v1
items:
- apiVersion: weblogic.oracle/v8
  kind: Domain
  
  spec:
     
      istio:
        enabled: true

Istioメッシュのイングレスとエグレス

Verrazzanoインストーラは、イングレス・ゲートウェイ・サービスを作成します。イングレス・ゲートウェイはLoadBalancerサービスであり、TLSはIstioイングレス・ゲートウェイで終了します。WebLogicドメインへのイングレスはオプションです。IngressTraitを使用して有効にできます。

単一のWebLogicドメインに対するIstioイングレスおよびルーティング

Istio Gatewayリソースは、KubernetesクラスタおよびIstioメッシュへのイングレスを提供するプロキシを記述します。Gatewayはホスト、ポート、プロトコルなどを指定し、ゲートウェイ・サービス(LoadBalancer/NodePort)にバインドされます。VirtualServiceは、サービスおよびロード・バランシングへのルートを指定します。

Istio Gatewayリソースの例:

apiVersion: networking.istio.io/v1beta1
  kind: Gateway

 spec:
    selector:
      istio: ingressgateway
    servers:
    - hosts:
      - todo-appconf.todo-list.172.18.0.230.nip.io #Host for this gateway server
      port:
        name: https
        number: 443
        protocol: HTTPS
      tls:
        credentialName: todo-list-todo-appconf-cert-secret #Secret containing TLS certificate
        mode: SIMPLE #Terminate TLS

Istio VirtualServiceリソースの例:

apiVersion: networking.istio.io/v1beta1
  kind: VirtualService

  spec:
    gateways:
    - todo-list-todo-appconf-gw #Gateway resource reference
    hosts:
    - todo-appconf.todo-list.172.18.0.230.nip.io #Host that this VS applies to.  Gateway resource can have multiple hosts
    http:
    - match:
      - uri:
          prefix: /todo
      route:
      - destination:
          host: tododomain-adminserver #Back-end Kubernetes Service
          port:
            number: 7001

複数のWebLogicドメインに対するIstioイングレスおよびルーティング

複数のGatewayリソースで、同じIstioイングレス・ゲートウェイ・サービスを使用します。Verrazzanoは、OAMコンポーネントで指定されたIngressTraitごとに1つのGatewayおよびVirtualServiceを作成します。

Istio認可ポリシー

Istio AuthorizationPolicyリソースは、WebLogicポッド、アプリケーションのその他のポッド、イングレス・ゲートウェイおよびPrometheusに対するアクセス制御を指定します。

Istio認可ポリシーの例

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
...
spec:
  rules:
  - from:
    - source:
        principals:
        - cluster.local/ns/todo-list/sa/todo-appconf
        - cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account
        - cluster.local/ns/verrazzano-system/sa/verrazzano-monitoring-operator
        - cluster.local/ns/verrazzano-system/sa/weblogic-operator-sa
  selector:
    matchLabels:
      verrazzano.io/istio: todo-appconf

WebLogicメトリック

Prometheusは、メトリック・ポートで各WebLogicポッドを定期的にスクレイピングします。

トレイトが存在しない場合、VerrazzanoはMetricsTraitAppConfigに注入します。WebLogic Monitoring Exporterサイドカーは、メトリック・エンドポイントを提供します。存在しない場合、VerrazzanoはデフォルトのMonitoring Exporter構成をWebLogicドメインCRに注入します。Verrazzanoアプリケーション・オペレータは、WebLogicターゲットを使用してPrometheus Configmapを更新し、VerrazzanoはGrafanaダッシュボードをインストールしてWebLogicメトリックを表示します。WebLogic Kubernetes Operatorは、REST APIを使用してMonitoring Exporterを構成し、ポッドにメトリック関連のラベルを付けます。メトリックは、ポート8080の/metricsでスクレイピングされます。

AppConfigデフォルト・インジェクション

次のTodoList ApplicationConfigurationMetricsTraitの例を確認してください。MetricsTraitApplicationConfigurationにない場合、VerrazzanoはデフォルトのMetricsTraitを注入します。

kind: ApplicationConfiguration
metadata:
  name: todo-appconf
...
spec:
  components:
    - componentName: todo-domain
      traits:
        - trait:
            apiVersion: oam.verrazzano.io/v1alpha1
            kind: MetricsTrait
            spec:
  

Monitoring Exporterコンポーネント

次のOAMコンポーネントのmonitoringExporter構成の例を確認してください。

workload:
  apiVersion: oam.verrazzano.io/v1alpha1
  kind: VerrazzanoWebLogicWorkload

monitoringExporter:
  imagePullPolicy: IfNotPresent
  configuration:    
     metricsNameSnakeCase: true
     domainQualifier: true
     queries:      
     - key: name
       keyName: location
       prefix: wls_server_

ポッド注釈

次の注釈は、ポッドのメトリックを有効にするために使用できます。

  • prometheus.io/metricsEnabled: "true” - メトリックのスクレイピングを有効にします。
  • prometheus.io/metricsPath: /metrics - メトリック・スクレイピング・パスを指定します。
  • prometheus.io/metricsPort: ”8080" - メトリック・スクレイピング・ポートを指定します。

例:

apiVersion: v1
kind: Pod
metadata:
  annotations:
    prometheus.io/path: /metrics
    prometheus.io/port: "8080"
    prometheus.io/scrape: "true"

ロギング

WebLogicログは、VerrazzanoクラスタにインストールされているOpenSearchに送信されます。各WebLogicポッドにFluentdサイドカーが注入され、サーバー・ログがstdoutに送信されます。verrazzano-systemネームスペースのFluentd DaemonSetは、ログをOpenSearchに送信します。OpenSearchでは、ログはネームスペースによって索引付けされます。

WebLogicアプリケーションのリフト・アンド・シフト

Verrazzanoでは、WebLogicアプリケーションをオンプレミス・インストールからクラウドへ簡単に移行できます。WebLogic Deploy Tooling (WDT)を使用してドメイン・モデルを作成し、WebLogic Image Tool (WIT)を使用してWebLogicドメイン・イメージを作成できます。

詳細は、リフト・アンド・シフト・ガイドを参照してください。

VerrazzanoでのWebLogicアプリケーションのデプロイ

ステップ1.WebLogicドメイン・イメージを作成します。

ステップ2.VerrazzanoWebLogicWorkloadコンポーネントを作成します。

  • VerrazzanoでWebLogicドメイン・イメージをデプロイおよび実行するには、イメージに含まれるWebLogicドメインの定義およびパラメータを指定するVerrazzanoWebLogicWorkloadコンポーネントを作成します。
  • サンプルのWebLogicドメイン用に作成されたVerrazzanoWebLogicWorkload Componentリソースの例は、todo-domainの例を参照してください。
  • WebLogicドメイン構成でサポートされるすべてのオプションについては、Domain.mdを参照してください。

ステップ3.WebLogicアプリケーション用にApplicationConfigurationを作成します。

  • 次に、WebLogicドメイン用に作成したVerrazzanoWebLogicWorkloadコンポーネントを使用するApplicationConfigurationを作成します。
  • VerrazzanoWebLogicWorkloadコンポーネントを使用したApplicationConfigurationの例については、ToDo Listサンプル・アプリケーションを参照してください。

ステップ4.ドメインを確認します。

  • Verrazzanoは、VerrazzanoWebLogicWorkloadコンポーネントから基礎となるドメインのKubernetesリソースを作成します。このリソースは、WebLogic Kubernetes Operatorによって処理され、管理サーバー・ポッドおよび管理対象サーバー・ポッドが作成され、WebLogicドメインに関連付けられたアプリケーションとリソースがデプロイされます。
  • WebLogicドメインが稼働中であることを確認するには、ここにあるステップに従います。

データベース接続

通常、WebLogicアプリケーションは、WebLogicドメインに作成されたJDBCSystemResourcesに存在する接続情報を使用して、データベース接続を作成します。これをVerrazzanoで実装するには、データベースを個別のコンポーネントとしてデプロイし、接続情報をWDTモデルを使用してWebLogicドメインで使用可能にします。

ステップ1.Verrazzanoにデータベースをデプロイします。

  • データベースをデプロイするには、ポッドでデータベースを実行し、接続情報をServiceとして公開する対応するComponentとApplicationConfigurationを作成する必要があります。
  • 例については、todomain-mysql記述子を参照してください。

ステップ2.WebLogicリソースConfigMapを作成します。

  • 次に、JDBCSystemResource定義とデータベースの接続情報を含むConfigMapを作成します。
  • 例については、ToDo Listアプリケーションの構成例のtododomain-configmap定義を参照してください。

ステップ3.WebLogicリソースConfigMapを使用するようにWebLogicドメインを構成します。

  • WebLogicドメインのVerrazzanoWebLogicWorkloadコンポーネントの構成セクションで、JDBCSystemResourceのリソース情報を含むConfigMapを構成できます。
...
    configuration:
        introspectorJobActiveDeadlineSeconds: 900
        model:
            configMap: tododomain-configmap
            domainType: WLS
...

詳細は、ToDo Listアプリケーションの構成例を参照してください。

イングレス

VerrazzanoWebLogicWorkloadコンポーネントの一部としてデプロイされたJava EEアプリケーションのエンドポイントにアクセスするために、Verrazzanoでは、コンポーネントのIngressTraitを指定できます。これは、Istioイングレス・ゲートウェイおよびVirtualServiceに変換されます。例については、ToDo Listサンプル・アプリケーションを参照してください。ここで、IngressTraitはアプリケーション・エンドポイント用に構成されます。

...
    - trait:
    apiVersion: oam.verrazzano.io/v1alpha1
    kind: IngressTrait
    spec:
        rules:
        - paths:
            # application todo
            - path: "/todo"
                pathType: Prefix

...

その後、ステップ8の説明に従って、Istioゲートウェイを使用してエンドポイントにアクセスできます。ToDo Listアプリケーションにアクセスします

$ HOST=$(kubectl get gateways.networking.istio.io -n todo-list -o jsonpath={.items[0].spec.servers[0].hosts[0]})
$ ADDRESS=$(kubectl get service -n istio-system istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
$ curl -sk https://${HOST}/todo/ --resolve ${HOST}:443:${ADDRESS}

参照