このユースケースでは、「更新1」ユースケース・ドメインに類似したドメインを同じsample-domain1-ns
ネームスペースに同時にデプロイする方法を示しますが、ドメインUID、WebLogicドメイン名およびWebLogicドメイン暗号化キーは異なります。 これは、次の方法で行います:
sample-domain2
を使用します。domain2
を使用します。このユースケースでは、異なるWebLogicドメイン名およびドメイン暗号化キーを持つWebLogicドメインのコピーを迅速にデプロイするModel in Imageの一意の機能を示しています。 これは、Domain in Image ドメイン・ホーム・ソース・タイプでサポートされていない便利な機能です:
Domain in Imageではドメイン名のオーバーライドはサポートされていませんが、2つのドメインを相互運用する必要がある場合は異なるドメイン名が必要です。 このユースケースでは、モデル・マクロを利用して、2つの異なるドメインのドメイン名が異なることを確認します:
@@ENV:CUSTOM_DOMAIN_NAME@@
環境変数マクロを使用して、モデルYAMLファイルにドメイン名を定義します。env
スタンザを使用して、CUSTOM_DOMAIN_NAME
環境変数の値を異なる値に設定します。Domain in Imageでは、イメージに対して変更できないWebLogic security/SerializedSystemIni.dat
ドメイン暗号化キーをイメージに埋め込む必要があります(CI/CDに関する考慮事項の「レイヤー化が重要な理由」を参照)。 これは、同じイメージを共有する2つのDomain in Imageドメインが、相互に暗号化されたパスワードを復号化できることを意味します。 一方、Model in Imageのドメイン暗号化キーはイメージに埋め込まれず、ドメインが起動されるたびに動的かつ一意に作成されます。
Oracleは、相互運用するWebLogicドメインに異なるドメイン名が必要です。 これは、2つのドメインが通信する場合、またはWebLogic ServerまたはWebLogic Javaクライアントが同時に複数のドメインに接続する場合に必要です。
このユースケースのステップは、次のとおりです:
「更新1」ユースケースからドメインがデプロイされていることを確認します。
データ・ソース定義を含むWDTモデルを使用してConfigMapを作成します。
次のコマンドを実行します:
$ kubectl -n sample-domain1-ns create configmap sample-domain2-wdt-config-map \
--from-file=/tmp/sample/model-configmaps/datasource
$ kubectl -n sample-domain1-ns label configmap sample-domain2-wdt-config-map \
weblogic.domainUID=sample-domain2
Update 1ユース・ケースで独自のデータ・ソース・ファイルを作成した場合は、--from-file=
パラメータでファイル名を置換します(前述の/tmp/sample/mydatasource.yaml
をお薦めします)。 -from-file=
パラメータは、指定されたファイルをConfigMapに配置する単一のファイルを参照することも、指定されたディレクトリ内のすべてのファイルをConfigMapに移入するディレクトリを参照することもできます。
観察結果:
sample-domain1
と同じネームスペースにドメインsample-domain2
をデプロイするため、ConfigMapのネームスペースsample-domain1-ns
は変更しません。weblogic.domainUID
ラベルを使用します。 イメージおよびConfigMapのWDTモデル・ファイルによって参照されるシークレットを作成します。これらはドメインYAMLファイルによっても参照されます。
次のコマンドを実行します:
ノート: 選択したパスワードをMY_WEBLOGIC_ADMIN_PASSWORD
に置換します。 このパスワードには、少なくとも7文字と1桁の数字を含める必要があります。
ノート: 選択したパスワードをMY_RUNTIME_PASSWORD
に置換します。 管理パスワードとは異なる一意である必要がありますが、これは必須ではありません。
# spec.webLogicCredentialsSecret
$ kubectl -n sample-domain1-ns create secret generic \
sample-domain2-weblogic-credentials \
--from-literal=username=weblogic --from-literal=password=MY_WEBLOGIC_ADMIN_PASSWORD
$ kubectl -n sample-domain1-ns label secret \
sample-domain2-weblogic-credentials \
weblogic.domainUID=sample-domain2
# spec.configuration.model.runtimeEncryptionSecret
$ kubectl -n sample-domain1-ns create secret generic \
sample-domain2-runtime-encryption-secret \
--from-literal=password=MY_RUNTIME_PASSWORD
$ kubectl -n sample-domain1-ns label secret \
sample-domain2-runtime-encryption-secret \
weblogic.domainUID=sample-domain2
# referenced by spec.configuration.secrets and by the data source model YAML in the ConfigMap
$ kubectl -n sample-domain1-ns create secret generic \
sample-domain2-datasource-secret \
--from-literal='user=sys as sysdba' \
--from-literal='password=incorrect_password' \
--from-literal='max-capacity=1' \
--from-literal='url=jdbc:oracle:thin:@oracle-db.default.svc.cluster.local:1521/devpdb.k8s'
$ kubectl -n sample-domain1-ns label secret \
sample-domain2-datasource-secret \
weblogic.domainUID=sample-domain2
観察結果:
sample-domain1
と同じネームスペースにドメインsample-domain2
をデプロイするため、各シークレットのネームスペースsample-domain1-ns
は変更されません。weblogic.domainUID
ラベルを使用します。 sample-domain1
のデータ・ソース属性を動的に修正するため、データ・ソース・シークレットで誤ったパスワードおよび最小プール容量を意図的に指定します。更新1ユースケースのドメインYAMLファイルと同様のドメインYAMLファイルを構成しますが、異なるドメインUID、ドメイン名、モデル更新のためのConfigMap参照およびシークレット参照を使用します:
オプション1: ドメインYAMLファイルのコピーを更新1ユースケースから更新します。
「更新1」ユースケースでは、/tmp/sample/mii-update1.yaml
という名前のファイルを作成するか、サンプルに付属の/tmp/sample/domain-resources/WLS/mii-update1-d1-WLS-v1-ds.yaml
ファイルを使用することをお薦めします。
変更を行う前に、このドメインYAMLファイルをコピーし、コピー/tmp/sample/mii-update2.yaml
に名前を変更することをお薦めします。
コピーの操作は厳密には必要ありませんが、このサンプルの様々なユースケースでの作業の追跡に役立ち、以前の作業のバックアップが提供されます。
/tmp/sample/mii-update2.yaml
ドメインYAMLファイル名およびweblogic.domainUID
ラベルをsample-domain2
に変更します。
最終的な結果は次のようになります:
apiVersion: "weblogic.oracle/v9"
kind: Domain
metadata:
name: sample-domain2
namespace: sample-domain1-ns
labels:
weblogic.domainUID: sample-domain2
ノート:
sample-domain1
と同じネームスペースにドメインsample-domain2
をデプロイするため、ネームスペースsample-domain1-ns
は変更されません。
/tmp/sample/mii-update2.yaml
ドメインYAMLファイルのCUSTOM_DOMAIN_NAME
環境変数をdomain1
からdomain2
に変更します。
イメージ内のモデル・ファイルでは、ドメイン名の設定時にマクロ@@ENV:CUSTOM_DOMAIN_NAME@@
を使用してこの環境変数を参照します。
具体的には、対応するドメインspec.serverPod.env
YAMLファイル・スタンザを次のように変更します:
...
spec:
...
serverPod:
...
env:
- name: CUSTOM_DOMAIN_NAME
value: "domain2"
...
/tmp/sample/mii-update2.yaml
ドメインYAMLファイルのspec.domainHome
値を/u01/domains/sample-domain2
に変更します。 対応するYAMLファイル・スタンザは次のようになります:
...
spec:
...
domainHome: /u01/domains/sample-domain2
...
(この変更は厳密には必要ありませんが、WebLogicドメインのホーム・ディレクトリをそのドメイン名またはドメインUIDで修飾することは有用な規則です。)
spec.webLogicCredentialsSecret
スタンザおよびspec.configuration.secrets
スタンザの/tmp/sample/mii-update2.yaml
シークレット参照を、このユースケースのシークレットを参照するように変更します。 具体的な変更箇所は次のとおりです。
spec:
...
webLogicCredentialsSecret:
name: sample-domain1-weblogic-credentials
...
configuration:
...
secrets:
- sample-domain1-datasource-secret
...
model:
...
runtimeEncryptionSecret: sample-domain1-runtime-encryption-secret
これを次のように変更します。
spec:
...
webLogicCredentialsSecret:
name: sample-domain2-weblogic-credentials
...
configuration:
...
secrets:
- sample-domain2-datasource-secret
...
model:
...
runtimeEncryptionSecret: sample-domain2-runtime-encryption-secret
ドメインYAMLファイルのspec.configuration.model.configMap
値をsample-domain1-wdt-config-map
からsample-domain2-wdt-config-map
に変更します。 対応するYAMLファイル・スタンザは次のようになります:
spec:
...
configuration:
...
model:
...
configMap: sample-domain2-wdt-config-map
次に、元のドメインYAMLファイルと変更されたドメインYAMLファイルを比較して、変更を再確認します。
$ diff /tmp/sample/mii-update1.yaml /tmp/sample/mii-update2.yaml
9c9
< name: sample-domain1
---
> name: sample-domain2
13c13
< weblogic.domainUID: sample-domain1
---
> weblogic.domainUID: sample-domain2
21c21
< domainHome: /u01/domains/sample-domain1
---
> domainHome: /u01/domains/sample-domain2
36c36
< name: sample-domain1-weblogic-credentials
---
> name: sample-domain2-weblogic-credentials
46c46
< #logHome: /shared/logs/sample-domain1
---
> #logHome: /shared/logs/sample-domain2
61c61
< value: "domain1"
---
> value: "domain2"
71c71
< # claimName: sample-domain1-weblogic-sample-pvc
---
> # claimName: sample-domain2-weblogic-sample-pvc
110c110
< configMap: sample-domain1-wdt-config-map
---
> configMap: sample-domain2-wdt-config-map
113c113
< runtimeEncryptionSecret: sample-domain1-runtime-encryption-secret
---
> runtimeEncryptionSecret: sample-domain2-runtime-encryption-secret
118c118
< - sample-domain1-datasource-secret
---
> - sample-domain2-datasource-secret
ノート: diffにネームスペースの変更を含めないでください。 ドメインsample-domain2
をsample-domain1
(ネームスペースsample-domain1-ns
)と同じネームスペースにデプロイしています。
変更したドメインYAMLファイルを適用します:
ノート: ドメイン・カスタム・リソースをデプロイする前に、Kubernetesクラスタauxiliary-image
およびその他のイメージにアクセスできます内のすべてのノードを確認します。
$ kubectl apply -f /tmp/sample/mii-update2.yaml
オプション2: サンプルに付属している更新されたドメインYAMLファイルを使用します:
ノート: ドメイン・カスタム・リソースをデプロイする前に、Kubernetesクラスタauxiliary-image
およびその他のイメージにアクセスできます内のすべてのノードを確認します。
$ kubectl apply -f /tmp/sample/domain-resources/WLS/mii-update2-d2-WLS-v1-ds.yaml
sample-domain2
が起動するまで待機します。
kubectl get pods -n sample-domain1-ns --watch
を実行すると、sample-domain2
実行のイントロスペクタ・ジョブが表示され、WebLogic Serverポッドが起動します。 出力は次のようになります:
このアクティビティの詳細を表示するには、waitForDomain.sh
サンプル・ライフサイクル・スクリプトを使用できます。 このスクリプトは、ドメインのポッドに関する有用な情報を提供し、オプションで、Completed
ステータス条件がTrue
になるまで待機します。 Completed
ドメインは、予想されるすべてのポッドがready
状態に加え、ターゲットのrestartVersion
、introspectVersion
およびimage
に達したことを示します。 例えば:
$ cd /tmp/weblogic-kubernetes-operator/kubernetes/samples/scripts/domain-lifecycle
$ ./waitForDomain.sh -n sample-domain1-ns -d sample-domain2 -p Completed
sample-domain2
ドメインの実行後、サンプルwebアプリケーションをコールして、完全にアクティブであることを確認できます。
sample-domain2
のイングレス・コントローラにwebアプリケーション・リクエストを送信します:
$ curl -s -S -m 10 -H 'host: sample-domain2-cluster-cluster-1.sample.org' \
http://localhost:30305/myapp_war/index.jsp
または、Traefikが使用できず、domain2
管理サーバーポッドが実行されている場合は、kubectl exec
を実行できます:
$ kubectl exec -n sample-domain1-ns sample-domain2-admin-server -- bash -c \
"curl -s -S -m 10 http://sample-domain2-cluster-cluster-1:8001/myapp_war/index.jsp"
次のように表示されます。
<html><body><pre>
*****************************************************************
Hello World! This is version 'v1' of the sample JSP web-app.
Welcome to WebLogic Server 'managed-server1'!
domain UID = 'sample-domain2'
domain name = 'domain2'
Found 1 local cluster runtime:
Cluster 'cluster-1'
Found min threads constraint runtime named 'SampleMinThreads' with configured count: 1
Found max threads constraint runtime named 'SampleMaxThreads' with configured count: 10
Found 1 local data source:
Datasource 'mynewdatasource': State='Running', testPool='Failed'
---TestPool Failure Reason---
NOTE: Ignore 'mynewdatasource' failures until the sample's Update 4 use case.
---
...
... invalid host/username/password
...
-----------------------------
*****************************************************************
</pre></body></html>
「更新4」のsample-domain1
のデータ・ソース属性を動的に修正するため、TestPool Failure
が必要です。
予想されるTestPool Failure
以外のエラーが表示された場合は、「デバッグ」を参照してください。
このサンプルでは、sample-domain2
ドメインを再度使用しません。必要に応じて、kubectl -n sample-domain1-ns delete domain sample-domain2
をコールして今すぐ停止できます。
サンプルで作成したリソースを削除するには、「クリーンアップ」を参照してください。