https://blogs.oracle.com/weblogicserver/weblogic-server-on-kubernetes-data-volume-usage
Kubernetes上でのWebLogic Serverの動作検証の一環として、Kubernetes環境で実行されているWebLogic Server Pod間でファイルデータを共有するためのベストプラクティスを特定しました。このエントリでは、通常共有ストレージを活用して構成するWebLogic Serverのサービスとファイルをチェックし、ダウンロードして実行可能な完全なエンドツーエンドのサンプルを提供します。このサンプルはKubernetesがオーケストレーションするWebLogicドメイン用にマウントする共有ストレージを示します。
WebLogic Server Persistence in Volumes
Kubernetes上でWebLogic Serverを実行する場合、データボリュームを使用する利点については、以下のエントリをご覧ください。Docker Volumes in WebLogicまた、このエントリでは、これらのデータボリュームへの永続化対象となりうるWebLogic Serverの成果物も示しています。
https://blogs.oracle.com/weblogicserver/docker-volumes-in-weblogic
https://orablogs-jp.blogspot.jp/2017/12/docker-volumes-in-weblogic.html
Kubernetes Solutions
Kubernetes環境では、Podは一時的なものです。 データを保持するために、Kubernetesではボリューム抽象化、PersistentVolume(PV)API、PersistentVolumeClaim(PVC)APIリソースを提供します。公式のKubernetesの定義[Kubernetes Volumes と Kubernetes Persistent Volumes and Claims]に基づき、PVはクラスタ内の管理者がプロビジョニングしたストレージの一部であり、PVCはユーザーによるストレージのリクエストです。したがって、PVおよびPVCは、ポッドの外部の独立したエンティティです。PodはKubernetesクラスタ内のPod間のファイル永続性およびファイル共有のためにPVおよびPVCを簡単に参照できます。
Kubernetes VolumesKubernetes上でWebLogic Serverを実行する場合、以下の理由で共有ストレージを処理するためにPVとPVCを使用することをお勧めします。
https://kubernetes.io/docs/concepts/storage/volumes
Kubernetes Persistent Volumes and Claims
https://kubernetes.io/docs/concepts/storage/persistent-volumes/#lifecycle-of-a-volume-and-claim
- 通常、WebLogic Serverインスタンスは、共有PVへのアクセスを必要とする複数のノード上のPodで実行されます。 WebLogic Serverインスタンスのライフサイクルは、単一のPodに限定されません。
- PVとPVCはより多くの制御を提供できます。たとえば、同時読み取り/書き込み管理のアクセスモード、ボリュームプラグインが提供するマウントオプション、ストレージ容量要件、リソースの再利用ポリシーなどを指定できます。
Use Cases of Kubernetes Volumes for WebLogic Server
サンプルの詳細を確認したり、ローカルで実行したりするには、サンプルをダウンロードし、以下の手順に従ってください。Software Versions
- Host machine: Oracle Linux 7u3 UEK4 (x86-64)
- Kubernetes v1.7.8
- Docker 17.03 CE
Prepare Dependencies
- Dockerfileとスクリプトに基づいて、ローカルで oracle/weblogic:12.2.1.3-developer イメージをビルドする
Oracle WebLogic Server on Docker
https://github.com/oracle/docker-images/tree/master/OracleWebLogic/dockerfiles/12.2.1.3/ - 以下のURLからWebLogic Kubernetsドメインのサンプルソースコードをダウンロードし、ダウンロードしたソースコードをwls-k8s-domainという名前のローカルフォルダに配置する
WebLogic Sample on Kubernetes with Shared Domain Home
https://github.com/oracle/docker-images/tree/master/OracleWebLogic/samples/wls-k8s-domain - WebLogicドメインイメージをDockerfileとスクリプトに基づいてローカルでビルドする
$ cd wls-k8s-domain $ docker build -t was-k8s-domain .
- ユースケース2のため、以下のコマンドを入力してNFSサーバーと共有ディレクトリを準備します。ユースケース1ではNFSではなくホストパスを使用するため、この手順は必要ありません。
# systemctl start rpcbind.service # systemctl start nfs.service # systemctl start nfslock.service $ mkdir -p /scratch/nfsdata $ chmod o+rw /scratch/nfadata # echo /scratch/nfsdata *(rw,fsid=root,no_root_squash,no_subtree_check) >> /etc/exports
Use Case 1: Host Path Mapping at Individual Machine with a Kubernetes Volume
WebLogicドメインは、管理サーバーと複数の管理対象サーバーで構成され、それぞれが独自のPod内で稼働します。すべてのPodには、物理マシン上のフォルダに直接マウントされたボリュームがあります。ドメインホームは、管理サーバーポッドが最初に起動されたときに共有フォルダに作成されます。実行時に、Administration Serverを含むすべてのWebLogic Serverインスタンスは、マウントされたボリュームを介して同じドメインホームディレクトリを共有します。
(注意)この例は単一のマシンまたはノード上で稼働しますが、この方法は複数のマシン間でWebLogicドメインを実行する場合でも同様です。複数のマシンで実行する場合、各WebLogic Serverインスタンスは同じディレクトリを共有する必要があります。次に、ホストパスはこのディレクトリを参照できるため、ボリュームへのアクセスは、背後の共有ディレクトリによって制御されます。既に共有ディレクトリで設定済みの一連のマシンがあれば、この方法はNFSクライアントを設定するよりも簡単です(移植可能ではないかもしれませんが)。
このサンプルを実行するためには、以下の手順を全て実行する必要があります。
- WebLogic管理サーバー用のymlファイルを準備する。ホストのフォルダ /scratch/data を管理サーバーのPod内のホストのフォルダ /u01/wlsdomain にマウントするようにwls-admin.yml を編集する。
apiVersion: apps/v1beta1 kind: Deployment metadata: name: admin-server spec: replicas: 1 template: metadata: labels: app: admin-server spec: containers: - name: admin-server image: wls-k8s-domain imagePullPolicy: Never command: ["sh"] args: ["/u01/oracle/startadmin.sh"] readinessProbe: httpGet: path: /weblogic/ready port: 8001 initialDelaySeconds: 15 timeoutSeconds: 5 ports: - containerPort: 8001 env: - name: WLUSER valueFrom: secretKeyRef: name: wlsecret key: username - name: WLPASSWORD valueFrom: secretKeyRef: name: wlsecret key: password volumeMounts: # name must match the volume name below - name: domain-home mountPath: "/u01/wlsdomain" volumes: - name: domain-home hostPath: path: /scratch/data type: Directory
- 管理対象サーバー用のymlファイルを準備する。ホストのフォルダ /scratch/data を管理対象サーバーのPod内のホストのフォルダ /u01/wlsdomain にマウントするようにwls-stateful.yml を編集する。
>apiVersion: apps/v1beta1 # for versions before 1.6.0 use extensions/v1beta1 kind: StatefulSet metadata: name: managed-server spec: serviceName: wls-subdomain replicas: 2 template: metadata: name: ms labels: app: managed-server spec: subdomain: wls-subdomain containers: - name: managed-server image: wls-k8s-domain imagePullPolicy: Never command: ["sh"] args: ["/u01/oracle/startms.sh"] readinessProbe: httpGet: path: /weblogic/ready port: 8011 initialDelaySeconds: 15 timeoutSeconds: 5 ports: - containerPort: 8011 env: - name: JAVA_OPTIONS value: "-Dweblogic.StdoutDebugEnabled=true" - name: USER_MEM_ARGS value: "-Xms64m -Xmx256m " - name: MY_POD_IP valueFrom: fieldRef: fieldPath: status.podIP - name: MY_POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: DNS_DOMAIN_NAME value: "wls-subdomain" - name: WLUSER valueFrom: secretKeyRef: name: wlsecret key: username - name: WLPASSWORD valueFrom: secretKeyRef: name: wlsecret key: password volumeMounts: # name must match the volume name below - name: domain-home mountPath: "/u01/wlsdomain" volumes: - name: domain-home hostPath: path: /scratch/data type: Directory
- 共有ボリュームを使って管理サーバーPodと管理対象サーバーPodを作成する。これらのWebLogic Serverインスタンスはマウントされたドメインの場所から起動される。
$ kubectl create -f wls-admin.yml $ kubectl create -f wls-stateful.yml
Use Case 2: NFS Sharing with Kubernetes PV and PVC
この例では、1つの管理サーバと複数の管理対象サーバインスタンスを持つWebLogic Serverクラスタがあり、各サーバは専用Podに格納されています。すべてのPodには、Podが到達可能な物理マシンにある中央のNFSサーバーにボリュームがマウントされています。管理サーバーPodが初めて起動されると、WebLogicドメインを共有NFSフォルダに作成します。実行時に、管理サーバーを含むすべてのWebLogic Serverインスタンスは、PVおよびPVCによってマウントされたボリューム経由で同じドメインホームディレクトリを共有します。- このサンプルでは、ホストにNFSサーバーがあり、このサーバーの/scratch/nfsdataを、すべての外部ホストに対し読み取り/書き込み可能でエクスポート済みである
- PVを準備する。各WebLogic ServerインスタンスがNFS共有フォルダに読み取り/書き込みできるように pv.yml を編集する。
kind: PersistentVolume apiVersion: v1 metadata: name: pv1 labels: app: wls-domain spec: storageClassName: manual capacity: storage: 10Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Recycle # Retain, Recycle, Delete nfs: # Please use the correct NFS server host name or IP address server: {hostのip} path: "/scratch/nfsdata"
- PVCを準備し、pvc.yml を編集する
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: wlserver-pvc-1 labels: app: wls-server spec: storageClassName: manual accessModes: - ReadWriteMany resources: requests: storage: 10Gi
Lifecycle of a volume and claim
https://kubernetes.io/docs/concepts/storage/persistent-volumes/#lifecycle-of-a-volume-and-claim - PVとPVCを作成する
$ kubectl create -f pv.yml $ kubectl create -f pvc.yml
$ kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESSMODES STORAGECLASS AGE wlserver-pvc-1 Bound pv1 10Gi RWX manual 7s
- 管理サーバー用の yml ファイルを準備する。これはPVC wlserver-pvc-1 への参照を有する。NFS共有フォルダをWebLogic Server管理サーバーPodの/u01/wlsdomainにマウントするようにwls-admin.ymlを編集する。
apiVersion: apps/v1beta1 kind: Deployment metadata: name: admin-server spec: replicas: 1 template: metadata: labels: app: admin-server spec: containers: - name: admin-server image: wls-k8s-domain imagePullPolicy: Never command: ["sh"] args: ["/u01/oracle/startadmin.sh"] readinessProbe: httpGet: path: /weblogic/ready port: 8001 initialDelaySeconds: 15 timeoutSeconds: 5 ports: - containerPort: 8001 env: - name: WLUSER valueFrom: secretKeyRef: name: wlsecret key: username - name: WLPASSWORD valueFrom: secretKeyRef: name: wlsecret key: password volumeMounts: # name must match the volume name below - name: domain-home mountPath: "/u01/wlsdomain" volumes: - name: domain-home persistentVolumeClaim: claimName: wlserver-pvc-1
- 管理対象サーバ用の yml ファイルを準備する。このファイルはPVC wlserver-pvc-1への参照を有する。NFS共有フォルダを各管理対象サーバーPodの /u01/wlsdomain にマウントするようにwls-stateful.yml を編集する。
apiVersion: apps/v1beta1 # for versions before 1.6.0 use extensions/v1beta1 kind: StatefulSet metadata: name: managed-server spec: serviceName: wls-subdomain replicas: 2 template: metadata: name: ms labels: app: managed-server spec: subdomain: wls-subdomain containers: - name: managed-server image: wls-k8s-domain imagePullPolicy: Never command: ["sh"] args: ["/u01/oracle/startms.sh"] readinessProbe: httpGet: path: /weblogic/ready port: 8011 initialDelaySeconds: 15 timeoutSeconds: 5 ports: - containerPort: 8011 env: - name: JAVA_OPTIONS value: "-Dweblogic.StdoutDebugEnabled=true" - name: USER_MEM_ARGS value: "-Xms64m -Xmx256m " - name: MY_POD_IP valueFrom: fieldRef: fieldPath: status.podIP - name: MY_POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: DNS_DOMAIN_NAME value: "wls-subdomain" - name: WLUSER valueFrom: secretKeyRef: name: wlsecret key: username - name: WLPASSWORD valueFrom: secretKeyRef: name: wlsecret key: password volumeMounts: - name: domain-home mountPath: "/u01/wlsdomain" volumes: - name: domain-home persistentVolumeClaim: claimName: wlserver-pvc-1
- NFS共有ボリュームを使用して管理サーバーおよび管理対象サーバーのPodを作成する。各WebLogic Serverインスタンスは、マウントされたドメインの場所から開始される。
$ kubectl create -f wls-admin.yml $ kubectl create -f wls-stateful.yml
0 件のコメント:
コメントを投稿