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管理サーバーまたは管理対象サーバーです。

オペレータは、verrazzano-systemネームスペースにインストールされ、VerrazzanoによってデプロイされたIstioメッシュの一部です。

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
           domainHome: /u01/domains/tododomain          …

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

Verrazzanoアプリケーション・オペレータは、VerrazzanoWebLogicWorkloadカスタム・リソース(CR)をモニターし、VerrazzanoWebLogicWorkload CRで提供される仕様に基づいてDomain CRを作成、更新および削除します。また、ロギング用のFluentdサイドカー・インジェクションおよびメトリック用のWebLogic 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ネットワーク・トラフィックは相互TLS認証(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 VirtualService applies to.  A 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ポッドを定期的にスクレイピングします。

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

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

次のTodo List ApplicationConfigurationのMetricsTraitの例を確認してください。これがApplicationConfigurationにない場合、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ドメイン・イメージを作成します。

  • KubernetesにWebLogicドメインをデプロイするには、まずWebLogicドメインのDockerイメージを作成する必要があります。
  • WebLogic Deploy Tooling (WDT)を使用してWebLogicドメイン・イメージを作成するには、次の手順に従います:
    • 「イメージ内のモデル」ドメイン・ホーム(推奨)については、「Model in Image」を参照してください。
    • 永続ボリューム上のドメイン・ホーム(PV上のドメイン)については、「Domain on Persistent Volume (PV)」を参照してください。

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

  • VerrazzanoでWebLogicドメイン・イメージをデプロイおよび実行するには、イメージに含まれるWebLogicドメインの定義およびパラメータを指定するVerrazzanoWebLogicWorkloadコンポーネントを作成します。

  • サンプルのWebLogicドメイン用に作成されたVerrazzanoWebLogicWorkloadコンポーネント・リソースの例は、ToDo Listサンプル・アプリケーション・コンポーネントのYAMLファイルを参照してください。

    ノート: 次の例に示すように、ワークロードのドメインYAMLファイルでのinitializeDomainOnPV構成の指定と同様に、FromModelPersistentVolume domainHomeSourceTypesの両方がサポートされています。

    apiVersion: core.oam.dev/v1alpha2
    kind: Component
    metadata:
      name: my-domain
      namespace: my-domain-ns
    spec:
      workload:
        apiVersion: oam.verrazzano.io/v1alpha1
        kind: VerrazzanoWebLogicWorkload
        spec:
          template:
            apiVersion: weblogic.oracle/v9
            kind: Domain
            metadata:
              name: my-domain
              namespace: my-domain-ns
              labels:
                weblogic.domainUID: my-domain
            spec:
              domainUID: my-domain
              domainHomeSourceType: PersistentVolume
              ...
              configuration:
                initializeDomainOnPV:
                  domain:
                    domainType: WLS
                    domainCreationImages:
                      - image: ...
                        sourceWDTInstallHome: /u01/wdt/weblogic-deploy
                        sourceModelHome: /u01/wdt/models
                  persistentVolumeClaim:
                    ...
                  persistentVolume:
                    ...
              clusters:
                - name: my-domain-my-cluster
          clusters:
            - apiVersion: weblogic.oracle/v1
              kind: Cluster
              metadata:
                name: my-domain-my-cluster
                namespace: my-domain-ns
                labels:
                  weblogic.domainUID: my-domain
              spec:
                clusterName: my-cluster
                replicas: 1  
    
  • WebLogicアプリケーションを使用するには、コンテナ・レジストリ・シークレットがDomainリソースに指定されている必要があることに注意してください。アプリケーション・ネームスペースにレジストリ・シークレットを作成し、アプリケーションのWebLogic Domain仕様imagePullSecretsフィールドにシークレットを指定します。

    • WebLogicドメイン構成でサポートされるすべてのオプションについては、Domain.mdを参照してください。
    • VerazzanoWebLogicWorkload仕様はここにあります。

ステップ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を構成できます。
    • 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}

参照