このドキュメントでは、通常のドメイン・ホームを永続ボリューム(Domain on PV)に作成およびデプロイする方法について説明します。
演算子をデプロイし、Domain on PVドメインの目的のネームスペースをモニタリングしていることを確認します。 「オペレータの管理」および「クイック・スタート」を参照してください。
オペレータ・バージョン4.1.0から、セクションdomain.spec.configuraiton.initializeDomainOnPV
を指定して、永続ボリュームが最初にデプロイされたときに、永続ボリュームのWebLogicドメインを初期化できます。 これは「1回のみ」の初期化です。 ドメインの作成後、ドメイン・リソースYAMLファイルのこのセクションに対する後続の更新では、WebLogicドメインの再作成または更新は行われません。
この機能を使用するには、次の情報を指定します:
storageClass
や任意の権限などの基礎となる詳細を提供するための管理者からの支援が必要です。各フィールドの詳細は、ドメイン・リソースschemaのinitializeDomainOnPV
セクションを参照するか、コマンドkubectl explain domain.spec.configuration.initializeDomainOnPV
を使用します。
基本的な構成の例は、「基本構成」を参照してください。
ドメインは永続ボリュームに作成されるため、ベース・イメージにはFMW製品バイナリとJDKのみを含める必要があります。
spec:
image: "container-registry.oracle.com/middleware/fmw-infrastructure_cpu:12.2.1.4-jdk8-ol8-221014"
独自のイメージを指定したり、container-registry.oracle.com
からパッチを適用したイメージを使用したり、WebLogic Image Tool (WIT)を使用してイメージを作成してパッチ適用できます。
ドメイン・リソースYAMLファイル内のドメイン・トポロジ、リソースおよびアプリケーションを記述するイメージを指定します。
domain:
domainCreationImages:
- image: 'myrepo/domain-images:v1'
フィールド | ノート | 値 | 必須 |
---|---|---|---|
domainCreationImages |
WDTドメイン・イメージ。 | イメージの配列。 | Y |
このイメージでは、必要なWDT 「インストーラ」、およびWDTモデル・ファイル、WDT変数ファイル、およびWDTアーカイブ・ファイルを指定する必要があります。 オペレータはこれらを使用して初期ドメインを作成します。
domainCreationImages
内の追加オプションについては、次のコマンドを使用して詳細を取得します。
$ kubectl explain domain.spec.configuration.initializeDomainOnPV.domain.domainCreationImages
イメージ・レイアウトは、次のディレクトリ構造に従います:
/auxiliary/weblogic-deploy - The directory where the WebLogic Deploy Tooling software is installed.
/auxiliary/models - WDT model, WDT archive, and WDT variables files.
使い慣れたメソッドを使用して独自のイメージを作成することも、WebLogic Image Tool(WIT)を使用することもできます。
たとえば、ファイル構造はModel in Imageドメイン・ホームのソース・タイプで使用される「補助イメージ」と同じであるため、同じWITコマンドcreateAuxImage
を使用できます。
$ imagetool.sh createAuxImage --wdtArchive /home/acme/myapp/wdt/myapp.zip \
--wdtVersion latest \
--wdtModel /home/acme/myapp/wdt/model1.yaml \
--wdtVariables /home/acme/myapp/wdt/model1.properties \
--tag myrepo/domain-images:v1
オプションで、Kubernetes ConfigMapに、追加のWDTモデルおよびWDT変数ファイルを補足として提供したり、domainCreationImages
のものにオーバーライドすることができます。
domain:
...
domainCreationImages:
...
domainCreationConfigMap: mymodel-domain-configmap
フィールド | ノート | 値 | 必須 |
---|---|---|---|
domainCreationConfigMap |
ConfigMap内のオプションのWDTモデルおよびWDT変数ファイル。 | ConfigMap名。 | N |
このConfigMap内のファイルには、ファイル拡張子.yaml
、.properties
または.zip
が必要です。
domain.spec.serverPod
にvolumes
およびvolumeMounts
情報を指定する必要があります。 これにより、ポッドは実行時に永続ストレージをマウントできます。 mountPath
は、ドメイン・ホームおよびログ・ホームの一部である必要があります。persistentVolumeClaim.claimName
は、既存のPVCであるか、オペレータが作成するPVCであるかに関係なく、有効なPVC名である必要があります。 「オペレータによるPVCの作成」を参照してください。
spec:
domainHome: /share/domains/domain1
logHome: /share/logs/domain1
serverPod:
volumes:
- name: weblogic-domain-storage-volume
persistentVolumeClaim:
claimName: sample-domain1-pvc-rwm1
volumeMounts:
- mountPath: /share
name: weblogic-domain-storage-volume
Kubernetes PersistentVolume (PV)およびPersistentVolumeClaim (PVC)は、Kubernetes環境内の永続ストレージにアクセスするためにKubernetesで使用されます。 既存のPV/PVCを使用するか、オペレータがそれらを作成するようにリクエストできます。
PersistentVolume
およびPersistentVolumeClaim
の指定は環境固有であり、多くの場合、Kubernetesクラスタ管理者からの情報が必要です。 様々な環境での「永続ストレージ」を参照してください。
Filesystem
ボリューム・モードで作成されている必要があります。Block
ボリューム・モードはサポートされていません。
Filesystem
ボリューム・モードが使用されます。Filesystem
ボリューム・モードで作成されたことを確認します。ReadWriteMany
オプションをサポートするストレージ・プロバイダを使用する必要があります。gid 0
を使用してuid 1000
に自動的に設定します。 別のユーザーおよびグループを使用する場合は、ドメインYAMLファイルのspec.serverPod.podSecurityContext
セクションにあるセキュリティ・コンテキストで、必要なrunAsUser
およびrunAsGroup
を構成します。 オペレータは、ドメイン・ホーム・ディレクトリ内のファイルの所有者を設定するときにこれらの値を使用します。 たとえば、ドメイン・リソースYAMLファイルでPersistent Volume
およびPersistent Volume Claim
を指定した場合、
次に、オペレータはPV
およびPVC
を作成し、永続ボリュームを/share
ディレクトリにマウントします。
spec:
domainHome: /share/domains/domain1
serverPod:
volumes:
- name: weblogic-domain-storage-volume
persistentVolumeClaim:
claimName: sample-domain1-pvc-rwm1
volumeMounts:
- mountPath: /share
name: weblogic-domain-storage-volume
configuration:
initializeDomainOnPV:
waitForPvcToBind: true
persistentVolume:
metadata:
name: sample-domain1-pv-rwm1
spec:
storageClassName: my-storage-class
capacity:
storage: 20Gi
persistentVolumeReclaimPolicy: Retain
hostPath:
path: "/share"
persistentVolumeClaim:
metadata:
name: sample-domain1-pvc-rwm1
spec:
storageClassName: my-storage-class
resources:
requests:
storage: 10Gi
フィールド | ノート | 値 | 必須 |
---|---|---|---|
waitForPvcToBind |
オペレータがPVCの作成時にPVCがbound 状態になるまで待機するかどうかを指定します。 一部のクラウド環境では、PVCが実行中のポッドで実際に使用されるまで、PVCはpending 状態になります。必要に応じてfalse に設定します。 |
Boolean | N (デフォルトtrue ) |
persistentVolume |
オペレータが作成している場合の永続ボリュームの指定。 | オペレータで永続ボリュームを作成する場合の永続ボリュームの指定。 | N (オペレータは永続ボリュームを作成しません) |
persistentVolumeClaim |
オペレータが作成している場合の永続ボリューム要求の指定。 | オペレータで永続ボリューム要求を作成する場合は、その指定。 | N (オペレータは永続ボリューム要求を作成しません) |
標準のKubernetes PVおよびPVCのすべてのフィールドがサポートされているわけではありません。 persistentVolume
およびpersistentVolumeClaim
でサポートされているフィールドのリストについては、ドメイン・リソースschemaのinitializeDomainOnPV.peristentVolume
およびinitializeDomainOnPV.peristentVolumeClaim
の項を参照するか、次のコマンドを使用します:
$ kubectl explain domain.spec.configuration.initializeDomainOnPV.persistentVolume
$ kubectl explain domain.spec.configuration.initializeDomainOnPV.persistentVolumeClaim
PVおよびPVCが環境内にすでに存在する場合は、intializedDomainOnPV
セクションの下にpersistentVolume
またはpersistentVolumeClaim
を指定する必要はありません。
JRFベースのドメインの場合は、先に進む前に、必ずこのドキュメントをお読みください、「JRFドメイン」。
これは、WebLogicドメインについて説明する項です。 例えば:
spec:
domainHome: /share/domains/sample-domain1
domainHomeSourceType: PersistentVolume
configuration:
secrets: [ sample-domain1-rcu-access ]
initializeDomainOnPV:
...
domain:
# Domain | DomainAndRCU
createIfNotExists: DomainAndRCU
domainCreationImages:
- image: 'myrepo/domain-images:v1'
domainType: JRF
domainCreationConfigMap: sample-domain1-wdt-config-map
opss:
walletPasswordSecret: sample-domain1-opss-wallet-password-secret
フィールド | ノート | 値 | 必須 |
---|---|---|---|
domainType |
作成されたドメインのタイプ。 | JRF またはWLS |
N (デフォルトWLS ) |
createIfNotExists |
オペレータがドメインを作成する前に、最初にRCUスキーマを作成する必要があるかどうかを指定します。 | Domain またはDomainAndRCU (既存のRCUスキーマの削除および新しいRCUスキーマの作成) |
N (デフォルトDomain ) |
domainCreationImages |
WDTドメイン・イメージ。 | イメージの配列。 | Y |
domainCreationConfigMap |
追加のWDTモデルを含むオプションのConfigMap。 | Kubernetes ConfigMap名。 | N |
osss.walletPasswordSecret |
JRFドメインのOPSSウォレットを抽出するためのパスワード。 | KubernetesキーwalletPassword のシークレット名。 |
Y |
osss.walletFileSecret |
OPSSウォレット・ファイルを抽出しました。 | KubernetesキーwalletFile のシークレット名。 |
N (障害リカバリ中にドメインを再作成する場合にのみ必要) |
JRFドメインが正常にデプロイされた後: 次の項ベスト・プラクティスに従って、OPSSウォレットをダウンロードしてバックアップします。
Oracleでは、最初のJRFドメインの作成後に、OPSSウォレット・ファイルを安全なバックアップ・ロケーション「すぐに」に保存することをお薦めします。 また、必ず同じネームスペースのKubernetesシークレットにウォレットを格納してください。 これにより、ディザスタ・シナリオでドメインをリカバリする必要がある場合、またはドメイン・ディレクトリが破損した場合に、シークレットを使用できるようになります。 この特定のウォレット・キーなしで元のRCUスキーマを再利用する方法はありません。 したがって、障害時リカバリの場合は、「このOPSSウォレットをバックアップする必要があります」です。
Oracleでは、初期JRFドメインの作成後にドメイン・ホーム・ディレクトリおよびデータベースをバックアップしてから、定期的にすべての最新の変更がバックアップされるようにすることをお薦めします。
JRFドメインは、RCUスキーマと1対1の関係を持ちます。 特定のRCUスキーマを使用してドメインを作成した後、そのスキーマを別のドメインで再利用することはできず、同じスキーマを異なるドメイン間で共有することもできません。 既存のRCUスキーマを使用して新しいドメインを作成しようとすると、エラーが発生します。
ドメイン・ホームが正しくバックアップされていない場合、ドメイン・ホームが破損または削除されると、既存のデータが失われる可能性があります。 これは、ドメインを再作成するには、既存のRCUスキーマを削除し、新しいRCUスキーマを作成する必要があるためです。 したがって、既存のドメイン・ホームのバックアップは、Kubernetes環境で最も高い優先度である必要があります。
Domain on PVドメイン構成は、初期デプロイメント後に更新される場合があります。 たとえば、WLSTまたはコンソールを使用して、新しいアプリケーションのデプロイ、カスタムOPSSキーストアの追加、OWSMポリシーの追加などを行ったとします。 この場合、初期ドメインの作成に使用される元のWDTモデル・ファイルは、ドメインの現在の状態とは一致しません(WDTモデル・ファイルは正しいソースではありません)。 したがって、元のWDTモデル・ファイルを使用してドメインを再作成すると、その後の更新がすべて失われます。 ドメインの更新を保持するには、ドメイン・ホーム・ディレクトリのバックアップ・コピーからドメインをリストアし、データベース・バックアップから既存のRCUスキーマに接続する必要があります。
opss.walletFileSecret
を更新ドメインの作成後、オペレータはOPSSウォレットを自動的にエクスポートし、イントロスペクタConfigMapに格納します。ConfigMapの名前は、パターン<domain uid>-weblogic-domain-introspect-cm
の後にキーewallet.p12
が付きます。 Oracleでは、最初のJRFドメインの作成後に、OPSSウォレット・ファイルを安全なバックアップ・ロケーション「すぐに」に保存することをお薦めします。 また、必ず同じネームスペースのKubernetesシークレットにウォレットを格納してください。 これにより、ディザスタ・シナリオでドメインをリカバリする必要がある場合、またはドメイン・ディレクトリが破損した場合に、シークレットを使用できるようになります。
KubernetesシークレットにOPSSウォレットを格納するステップの概要を次に示します。
オペレータには、ウォレット・ファイルを抽出してKubernetes walletFileSecret
に格納するためのユーティリティ・スクリプト「OPSSウォレット・ユーティリティ」が用意されています。 また、Kubernetesの外部で安全にバックアップされたロケーションにウォレット・ファイルを保存する必要もあります。 たとえば、次のコマンドは、sample-ns
ネームスペースのsample-domain1
ドメインのOPSSウォレットを/tmp
ディレクトリのewallet.p12
という名前のファイルに保存し、jrf-wallet-file-secret
という名前のウォレット・シークレットにも格納します。
$ opss-wallet.sh -n sample-ns -d sample-domain1 -s -r -wf /tmp/ewallet.p12 -ws jrf-wallet-file-secret
前のコマンドの/tmp/ewallet.p12
を安全なロケーションに格納するファイルの名前に置き換え、jrf-wallet-file-secret
を任意のシークレット名に置き換えます。 詳細は、READMEファイルのOPSS wallet utility
セクションを参照してください。
抽出したウォレット・ファイル(この例では/tmp/ewallet.p12
)を、Kubernetesの外部の安全なロケーションに保存します。
configuration.initializeDomainOnPV.domain
の下のドメイン・リソースYAMLファイルにopss.walletFileSecret
を追加します。
...
configuration:
initializeDomainOnPV:
...
domain:
...
opss:
walletFileSecret: jrf-wallet-file-secret
...
次のpatch
コマンドを使用して、ドメイン・リソースに追加できます。
$ kubectl -n sample-ns patch domain sample-domain1 --type='JSON' -p='[ { "op" : "add", "path" : "/spec/configuration/initializeDomainOnPV/domain/opss/walletFileSecret", "value" : "jrf-wallet-file-secret" }]'
ドメイン・ホーム・ディレクトリが破損しており、ドメイン・ホーム・ディレクトリの最近のバックアップがある場合は、次のステップを実行してドメインをリカバリします。
バックアップ・コピーからドメイン・ホーム・ディレクトリをリストアします。
ドメインを再起動するには、ドメイン・リソースのrestartVersion
を更新します。 たとえば、
$ kubectl -n sample-ns patch domain sample-domain1 --type='JSON' -p='[ { "op" : "replace", "path" : "/spec/restartVersion", "value" : "15" }]'
ドメインの再起動後、WebLogicドメイン構成を確認し、最新の変更があることを確認します。 ノート: 前回のバックアップ後にドメイン・ホーム・ディレクトリに保持されている変更を行った場合は、それらの変更をドメイン・ホーム・ディレクトリに再適用する必要があります。 ただし、オペレータが同じRCUスキーマに再接続されるため、OPSS表、MDS表またはOWSM表に格納されているデータが最新になります。
最後のバックアップの後、ドメイン・ホーム・ディレクトリ(データ・ソース接続、JMS宛先、新しいアプリケーションEARデプロイメントなど)に保持されているドメイン構成の変更をすべて再適用します。 これらの変更を行うには、WLST、WebLogic Server管理コンソールまたはEnterprise Managerを使用します。
ドメイン・ホーム・ディレクトリが破損し、ドメイン・ホーム・ディレクトリの最新のバックアップがない場合、またはバックアップ・コピーも破損している場合は、RCUスキーマ・データを失うことなく、WDTモデル・ファイルからドメインを再作成できます。
永続ボリュームからドメイン・ホーム・ディレクトリを削除します。
ドメイン・リソースのdomain.spec.introspectVersion
を新しい値で追加または置換します。 次に、サンプル・ドメインのintrospectVersion
を更新するためのサンプルpatch
コマンドを示します。
$ kubectl -n sample-ns patch domain sample-domain1 --type='JSON' -p='[ { "op" : "replace", "path" : "/spec/intropsectVersion", "value" : "15" }]'
オペレータは、既存のWDTモデルから新しいドメインを作成し、元のRCUスキーマを再利用します。
ノート: 最初のデプロイメント後にドメインに加えられたすべての更新は、回復されたドメインでは使用できません。 ただし、これにより、すべてのデータを失うことなく、元のRCUスキーマ・データベースにアクセスできます。
ドメイン・ホーム・ファイル・システムに保持されているすべてのドメイン構成変更(データ・ソース接続、JMS宛先、新しいアプリケーションEARデプロイメントなど)を適用します。この変更は、WDTモデル・ファイルには含まれません。 これらは、初期ドメイン・デプロイメント後に行った変更です。
ドメインを再起動するには、ドメイン・リソースのrestartVersion
を更新します。
$ kubectl -n sample-ns patch domain sample-domain1 --type='JSON' -p='[ { "op" : "replace", "path" : "/spec/restartVersion", "value" : "15" }]'
詳細については、「障害時リカバリ」を参照してください。
問題: イントロスペクタ・ジョブでエラーが発生しました。
ドメインのドメイン・ステータスを確認します。
$ kubectl -n <domain namespace> get domain <domain uid>
logHome
のドメイン・ログ・ファイルを確認します。
デフォルトでは、オペレータはイントロスペクタ・ジョブ、RCUログおよびWebLogicサーバー・ログのログ・ファイルをdomain.spec.logHome
に保持します(デフォルト): /share/logs/<domain uid>
).
エラーがある場合は、関連する出力ファイルがlogHome
ディレクトリにあります。 例えば:
admin-server.log
introspector_script.out
createDomain.log
wdt_output.log
admin-server.out
...
rculogdir/**
オペレータ・ログを確認してください。 オペレータ・ログで追加のエラー・メッセージが使用できる場合があります。
$ kubectl -n <operator namespace> logs <operator pod name>
Kubernetesイベントを確認します。
$ kubectl -n <domain namespace> get events
問題: WDTモデルを更新しましたが、変更はドメインに反映されません。
これは予想された動作です。 ドメイン・イメージまたはConfigMapで指定されたWDTドメイン・モデルは、「1回のみ」操作です。 これらは初期ドメインの作成にのみ使用されます。 ドメインの作成後は、ライフサイクル操作に参加しません。 WebLogicコンソール、WLSTまたはその他の方法を使用して、ドメインを更新する必要があります。 更新されたモデルを使用してドメインを再作成するには、ドメインを再作成する前に、ドメイン・ホーム・ディレクトリおよびJRFドメイン(ドメイン・ホーム・ディレクトリの親の下にあるapplications/<domain uid>
)のアプリケーション・ディレクトリも削除する必要があります。
その他のエラーが表示された場合は、「デバッグ」を参照してください
JRFドメインのドメイン・ホームおよびアプリケーション・ディレクトリを削除する必要がある場合、エラーからリカバリする場合、またはドメイン・ホームを再作成する必要がある場合、ドメイン・ホームはdomain.spec.domainHome
で指定されたディレクトリにあり、JRFドメインのアプリケーション・ディレクトリ(WDTモデルで指定されていない場合)は<parent directory of domain home>/applications/<domain uid>
にあります。次の操作を実行できます:
基礎となるストレージ・ボリュームが動的に割り当てられる場合は、ReclaimPolcy: delete
を使用してPVCを削除し、PVCを再作成します。
共有ボリュームにポッドをアタッチし、ポッドにアクセスしてコンテンツを削除します。 サンプル・スクリプト「PVおよびPVCヘルパー・スクリプト」を参照してください。
ドメイン・リソースを削除します。
$ kubectl -n <namespace> delete -f <domain resource YAML>
次の構成例は、基本構成を示しています。
spec:
domainHome: /share/domains/sample-domain1
domainHomeSourceType: PersistentVolume
image: "container-registry.oracle.com/middleware/fmw-infrastructure_cpu:12.2.1.4-jdk8-ol8-221014"
imagePullPolicy: "IfNotPresent"
imagePullSecrets:
- name: ocir-credentials
webLogicCredentialsSecret:
name: sample-domain1-weblogic-credentials
logHomeEnabled: true
logHome: /share/logs/sample-domain1
serverPod:
env:
- name: JAVA_OPTIONS
value: "-Dweblogic.StdoutDebugEnabled=false -Dweblogic.security.SSL.ignoreHostnameVerification=true -Dweblogic.security.TrustKeyStore=DemoTrust -Dweblogic.debug.DebugManagementServicesResource=true"
- name: USER_MEM_ARGS
value: "-XX:+UseContainerSupport -Djava.security.egd=file:/dev/./urandom "
# set up pod to use persistent storage using pvc
# domain home must be under the mountPath
volumes:
- name: weblogic-domain-storage-volume
persistentVolumeClaim:
claimName: sample-domain1-pvc-rwm1
volumeMounts:
- mountPath: /share
name: weblogic-domain-storage-volume
clusters:
- name: sample-domain1-cluster-1
replicas: 2
configuration:
secrets: [ sample-domain1-rcu-access ]
initializeDomainOnPV:
persistentVolume:
metadata:
name: sample-domain1-pv-rwm1
spec:
storageClassName: my-storage-class
capacity:
storage: 20Gi
persistentVolumeReclaimPolicy: Retain
hostPath:
path: "/share"
persistentVolumeClaim:
metadata:
name: sample-domain1-pvc-rwm1
spec:
storageClassName: my-storage-class
resources:
requests:
storage: 10Gi
domain:
# Domain | DomainAndRCU
createIfNotExists: DomainAndRCU
domainCreationImages:
- image: 'myrepo/domain-images:v1'
domainType: JRF
domainCreationConfigMap: sample-domain1-wdt-config-map
opss:
walletPasswordSecret: sample-domain1-opss-wallet-password-secret