このユースケースでは、WebLogic Serversを実行している再起動(ローリング)せずに、実行中のドメイン内のワーク・マネージャ・スレッド制約およびデータ・ソース構成を動的に変更する方法を示します。 このユースケースでは、更新1ユースケースが実行され、sample-domain1
ドメインがデプロイされて実行されていることが想定されています。
このユースケースでは、次のことを行います:
ステップは、次のとおりです。
「更新1」ユースケースからドメインをデプロイしているか、「更新3」ユースケースからこの同じドメインの更新済バージョンをデプロイしていることを確認してください。
sample-domain1-ns
ネームスペースで実行されているsample-domain1
で始まる名前を持つ3つのWebLogic Serverポッド、sample-domain1
という名前のドメイン、sample-domain1-wdt-config-map
という名前のConfigMap、およびsample-domain1-datasource-secret
という名前のシークレットがあります。
ワーク・マネージャ・スレッド制約構成WDTモデルの更新を、Model in ImageモデルConfigMapの既存のデータ・ソース・モデルの更新に追加します。
このステップでは、「更新1」ユースケースからモデルConfigMapを更新し、最小スレッド数および最大スレッド数の制約に必要な変更を行います。
SampleMinThreads
最小スレッド制約およびSampleMaxThreads
最大スレッド制約の構成済カウント値を更新するモデル構成の例を次に示します:
resources:
SelfTuning:
MinThreadsConstraint:
SampleMinThreads:
Count: 2
MaxThreadsConstraint:
SampleMaxThreads:
Count: 20
オプションで、前述のモデル・スニペットを/tmp/sample/myworkmanager.yaml
という名前のファイルに配置し、更新されたモデルConfigMapをデプロイするときに使用するか、または/tmp/sample/model-configmaps/workmanager/model.20.workmanager.yaml
で提供されているものと同じモデル・スニペットを使用します。
次のコマンドを実行します:
$ kubectl -n sample-domain1-ns delete configmap sample-domain1-wdt-config-map
$ kubectl -n sample-domain1-ns create configmap sample-domain1-wdt-config-map \
--from-file=/tmp/sample/model-configmaps/workmanager \
--from-file=/tmp/sample/model-configmaps/datasource
$ kubectl -n sample-domain1-ns label configmap sample-domain1-wdt-config-map \
weblogic.domainUID=sample-domain1
ノート:
--from-file=
パラメータでファイル名を置き換えます(前述の/tmp/sample/myworkmanager.yaml
および/tmp/sample/mydatasource.xml
をお薦めします)。-from-file=
パラメータは単一のファイルを参照できます。この場合、指定されたファイルをConfigMapに格納するか、ディレクトリを参照できます。この場合、ConfigMapには指定されたディレクトリ内のすべてのファイルが移入されます。 同じコマンドラインで複数回指定して、コンテンツを複数のロケーションからConfigMapにロードできます。 weblogic.domainUID
ラベルを使用します。 更新1ユースケースで作成したデータ・ソース・シークレットを、正しいパスワードおよび最大プール容量の増加とともに更新します:
ノート: MY_ORACLE_SYS_PASSWORDを、データベースのデプロイ時に選択したものと同じデータベースsys
アカウント・パスワード(または選択する予定)に置き換えます。
$ kubectl -n sample-domain1-ns delete secret sample-domain1-datasource-secret
$ kubectl -n sample-domain1-ns create secret generic \
sample-domain1-datasource-secret \
--from-literal='user=sys as sysdba' \
--from-literal='password=MY_ORACLE_SYS_PASSWORD' \
--from-literal='max-capacity=10' \
--from-literal='url=jdbc:oracle:thin:@oracle-db.default.svc.cluster.local:1521/devpdb.k8s'
$ kubectl -n sample-domain1-ns label secret \
sample-domain1-datasource-secret \
weblogic.domainUID=sample-domain1
ドメインのYAMLファイルを更新して、onlineUpdate
を有効にします。
ドメインに対してonlineUpdate
が有効で、モデル変更がWebLogicドメインの動的属性にのみある場合、ドメインのintrospectVersion
を更新するときに、オペレータはサーバーを再起動せずに実行中のドメインをオンラインで更新しようとします。
オプション1: ドメイン・カスタム・リソースを編集します。
kubectl -n sample-domain1-ns edit domain sample-domain1
を呼び出します。spec.configuration.model.onlineUpdate
スタンザの値を追加または編集して、enabled: true
が含まれるようにし、保存します。...
spec:
...
configuration:
...
model:
...
onlineUpdate:
enabled: true
オプション2: kubectl patch
を使用してドメインを動的に変更します。 例えば:
$ kubectl -n sample-domain1-ns patch domain sample-domain1 --type=json '-p=[{"op": "replace", "path": "/spec/configuration/model/onlineUpdate", "value": {"enabled" : 'true'} }]'
オプション3: サンプル・ヘルパー・スクリプトを使用します。
/tmp/sample/utils/patch-enable-online-update.sh -n sample-domain1-ns -d sample-domain1
を呼び出します。kubectl patch
コマンドが実行されます。更新されたWebLogicドメイン構成をイントロスペクトするようオペレータに指示します。
更新されたワーク・マネージャ構成が更新されたモデルConfigMapにデプロイされ、更新されたデータ・ソース構成が更新されたデータ・ソース・シークレットに反映されるようになったため、オペレータがその構成を再生成するためにイントロスペクタ・ジョブを再実行する必要があります。
ドメインのspec.introspectVersion
を変更して、ドメイン・イントロスペクションをトリガーします。 これを行うには:
オプション1: ドメイン・カスタム・リソースを編集します。
kubectl -n sample-domain1-ns edit domain sample-domain1
を呼び出します。spec.introspectVersion
フィールドの値を変更して保存します。オプション2: kubectl patch
を使用してドメインを動的に変更します。
現在のintrospectVersion
を取得します:
$ kubectl -n sample-domain1-ns get domain sample-domain1 '-o=jsonpath={.spec.introspectVersion}'
現在のイントロスペクト・バージョンとは異なる新しいイントロスペクト・バージョンを選択してください。
kubectl patch
を使用して新しい値を設定します。 たとえば、新しいイントロスペクト・バージョンが2
の場合:
$ kubectl -n sample-domain1-ns patch domain sample-domain1 --type=json '-p=[{"op": "replace", "path": "/spec/introspectVersion", "value": "2" }]'
オプション3: サンプル・ヘルパー・スクリプトを使用します。
/tmp/sample/utils/patch-introspect-version.sh -n sample-domain1-ns -d sample-domain1
を呼び出します。kubectl patch
コマンドが実行されます。spec.configuration.model.onlineUpdate
のenabled
値をtrue
に設定し、指定したモデル変更はすべてWebLogic動的構成属性用であるため、ドメイン・イントロスペクタ・ジョブはポッドを再起動(ローリング)せずにWebLogic Serversに変更を適用すると想定しています。
イントロスペクタ・ジョブが完了するまで待ちます。 次のことが可能です。
kubectl get pods -n sample-domain1-ns --watch
をコールし、イントロスペクタ・ポッドがTerminating
状態になるまで待機して終了します。
sample-domain1-introspector-vgxxl 0/1 Terminating 0 78s
このアクティビティの詳細を表示するには、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-domain1 -p Completed
イントロスペクタ・ジョブが失敗した場合は、「デバッグ」を参照してください。
サンプルwebアプリケーションをコールして、次のことを行います:
webアプリケーション・リクエストをイングレス・コントローラに送信します:
$ curl -s -S -m 10 -H 'host: sample-domain1-cluster-cluster-1.sample.org' \
http://localhost:30305/myapp_war/index.jsp
または、Traefikが使用できず、管理サーバーポッドが実行されている場合は、kubectl exec
を実行できます:
$ kubectl exec -n sample-domain1-ns sample-domain1-admin-server -- bash -c \
"curl -s -S -m 10 http://sample-domain1-cluster-cluster-1:8001/myapp_war/index.jsp"
次のように表示されます。
<html><body><pre>
*****************************************************************
Hello World! This is version 'v2' of the sample JSP web-app.
Welcome to WebLogic server 'managed-server2'!
domain UID = 'sample-domain1'
domain name = 'domain1'
Found 1 local cluster runtime:
Cluster 'cluster-1'
Found min threads constraint runtime named 'SampleMinThreads' with configured count: 2
Found max threads constraint runtime named 'SampleMaxThreads' with configured count: 20
Found 1 local data source:
Datasource 'mynewdatasource': State='Running', testPool='Passed'
*****************************************************************
</pre></body></html>
mynewdatasource
のtestPool='Passed'
は、パスワードを修正するためにデータ・ソース・シークレットへの更新が成功したことを確認します。
testPool='Failed'
エラーが表示された場合は、データベースをデプロイしなかったか、データベースが正しくデプロイされていない可能性があります。
その他のエラーが表示された場合は、「デバッグ」を参照してください。
これでサンプル・シナリオは完了です。
サンプルで作成したリソースを削除するには、「クリーンアップ」を参照してください。