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メッシュの一部です。
ノート
Verrazzanoによって、WebLogic Kubernetes Operatorのインスタンスがインストールされます。このオペレータの既存のインスタンスがある場合、各インスタンスによって管理されるネームスペースが互いに排他的であることが必要です。既存のWebLogic Kubernetes Operatorによって管理されるネームスペースが、Verrazzanoでも管理されるようにラベル付けないでください。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ドメインのライフサイクル・ステージは次のとおりです
- WebLogicドメインの作成。
- WebLogicコンポーネントを含むアプリケーションが作成されます。
- WebLogicコンポーネントが既存のアプリケーションに追加されます。
- WebLogicドメインの削除。
- WebLogicコンポーネントを含むアプリケーションが削除されます。
- WebLogicコンポーネントが既存のアプリケーションから削除されます。
- WebLogicドメインのスケーリング。
- OAMコンポーネント仕様内のWebLogicドメインCRの
replicas
フィールドを変更します。
- OAMコンポーネント仕様内のWebLogicドメインCRの
- WebLogicドメインの更新。
- OAMコンポーネント仕様内のWebLogicドメインCRの他の
fields
フィールドを変更します。
- OAMコンポーネント仕様内のWebLogicドメインCRの他の
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
構成の指定と同様に、FromModel
とPersistentVolume
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
フィールドにシークレットを指定します。
ステップ3.WebLogicアプリケーション用にApplicationConfigurationを作成します。
- 次に、WebLogicドメイン用に作成したVerrazzanoWebLogicWorkloadコンポーネントを使用するApplicationConfigurationを作成します。
- VerrazzanoWebLogicWorkloadコンポーネントを使用したApplicationConfigurationの例については、ToDo Listサンプル・アプリケーションを参照してください。
ステップ4.ドメインを確認します。
- Verrazzanoは、VerrazzanoWebLogicWorkloadコンポーネントから基礎となるドメインのKubernetesリソースを作成します。このリソースは、WebLogic Kubernetes Operatorによって処理され、管理サーバー・ポッドおよび管理対象サーバー・ポッドが作成され、WebLogicドメインに関連付けられたアプリケーションとリソースがデプロイされます。
- WebLogicドメインが稼働中であることを確認するには、ここにあるステップに従います。
ノート
WebLogicアプリケーションをVerrazzanoにデプロイするために、WebLogic Toolkit UI (WKTUI)を使用することをお薦めします。WKTUIのドキュメント(こちら)に従ってください。データベース接続
通常、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 …
イングレス
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}
参照
- WebLogic Kubernetes Operatorドキュメント
- WebLogic Kubernetes Operator GitHubリポジトリ
- WebLogicドメインCR
- Verrazzanoアプリケーション・ワークロード
- リフト・アンド・シフト・ガイド