このサンプルは、WebLogic Kubernetes Operator (以降「オペレータ」)を使用して、Tanzu Kubernetes Grid (TKG)にWebLogic Server (WLS)クラスタを設定する方法を示しています。 サンプル・ステップを実行すると、Model in Imageドメイン・ソース・タイプのWLSドメインがTKG Kubernetesクラスタ・インスタンスで実行されます。 ドメインがプロビジョニングされたら、WebLogic Server管理コンソールを使用して監視できます。
TKGは、Kubernetesクラスタを迅速にデプロイおよび管理できる管理対象Kubernetesサービスです。 詳細は、Tanzu Kubernetes Grid (TKG)の概要ページを参照してください。
このサンプルでは、次の前提条件の環境設定を想定しています:
git --version
を使用して、git
が動作するかどうかをテストします。 このドキュメントは、バージョン2.17.1でテストされました。 tkg version
を使用して、TKGが機能するかどうかをテストします。 このドキュメントは、バージョンv1.1.3でテストされました。 kubectl version
を使用して、kubectl
が動作するかどうかをテストします。 このドキュメントは、バージョンv1.18.6でテストされました。 helm version
を使用してhelm
バージョンを確認します。 このドキュメントは、バージョンv3.2.1でテストされました。 Tanzuに固有の一般的なオペレータの前提条件およびオペレータ・サポートの制限については、「サポートされている環境」を参照してください。
TKG CLIを使用してKubernetesクラスタを作成します。 「Tanzuドキュメント」を参照して、Kubernetesクラスタを設定します。 Kubernetesクラスタが稼働したら、次のコマンドを実行して、kubectl
がKubernetesクラスタにアクセスできることを確認します:
$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s-cluster-101-control-plane-8nj7t NotReady master 2d20h v1.18.6+vmware.1 192.168.100.147 192.168.100.147 VMware Photon OS/Linux 4.19.132-1.ph3 containerd://1.3.4
k8s-cluster-101-md-0-577b7dc766-552hn Ready <none> 2d20h v1.18.6+vmware.1 192.168.100.148 192.168.100.148 VMware Photon OS/Linux 4.19.132-1.ph3 containerd://1.3.4
k8s-cluster-101-md-0-577b7dc766-m8wrc Ready <none> 2d20h v1.18.6+vmware.1 192.168.100.149 192.168.100.149 VMware Photon OS/Linux 4.19.132-1.ph3 containerd://1.3.4
k8s-cluster-101-md-0-577b7dc766-p2gkz Ready <none> 2d20h v1.18.6+vmware.1 192.168.100.150 192.168.100.150 VMware Photon OS/Linux 4.19.132-1.ph3 containerd://1.3.4
Oracle Container Registryアカウントが必要です。 次のステップでは、WebLogic ServerイメージをプルするためにOracleの標準条件および制限を受け入れるように指示します。 Oracle Accountのパスワードと電子メールをノートにとります。 このサンプルは12.2.1.4に関連していますが、他のバージョンも動作する場合があります。
WebLogic Kubernetes Operatorは、WebLogic ServerおよびKubernetesを統合するアダプタで、KubernetesはWLSインスタンスをホストするコンテナ・インフラストラクチャとして機能できます。 オペレータはKubernetesポッドとして実行され、KubernetesでのWLSの実行に関連するアクションを実行する準備ができています。
WebLogic Kubernetes Operatorリポジトリをマシンにクローニングします。 このリポジトリ内のいくつかのスクリプトを使用して、WebLogicドメインを作成します。 Kubernetes Operatorsは、Helmを使用してKubernetesアプリケーションを管理します。 オペレータのHelmチャートは、kubernetes/charts/weblogic-operator
ディレクトリにあります。 次のコマンドを実行して、オペレータをインストールします。
リポジトリをクローニングします。
$ git clone --branch v4.2.8
https://github.com/oracle/weblogic-kubernetes-operator.git
$ cd weblogic-kubernetes-operator
Helmサービス・アカウントにcluster-adminロールを付与します。
$ cat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: helm-user-cluster-admin-role
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: default
namespace: kube-system
EOF
オペレータのネームスペースおよびサービス・アカウントを作成します。
$ kubectl create namespace sample-weblogic-operator-ns
namespace/sample-weblogic-operator-ns created
$ kubectl create serviceaccount -n sample-weblogic-operator-ns sample-weblogic-operator-sa
serviceaccount/sample-weblogic-operator-sa created
オペレータをインストールします。
$ helm install weblogic-operator kubernetes/charts/weblogic-operator \
--namespace sample-weblogic-operator-ns \
--set serviceAccount=sample-weblogic-operator-sa \
--wait
NAME: weblogic-operator
LAST DEPLOYED: Tue Nov 17 09:33:58 2020
NAMESPACE: sample-weblogic-operator-ns
STATUS: deployed
REVISION: 1
TEST SUITE: None
次のコマンドを使用してオペレータを確認します。ステータスはrunningになります。
$ helm list -A
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
sample-weblogic-operator sample-weblogic-operator-ns 1 2020-11-17 09:33:58.584239273 -0700 PDT deployed weblogic-operator-3.1
$ kubectl get pods -n sample-weblogic-operator-ns
NAME READY STATUS RESTARTS AGE
weblogic-operator-775b668c8f-nwwnn 1/1 Running 0 32s
JAVA_HOME
環境変数を設定し、有効なJDK 8または11インストールを参照する必要があります。/tmp/mii-sample
を使用します。$ mkdir /tmp/mii-sample
$ cp -r /root/weblogic-kubernetes-operator/kubernetes/samples/scripts/create-weblogic-domain/model-in-image/* /tmp/mii-sample
ノート: サンプルのこの作業用コピーを/tmp/mii-sample
と呼びますが、別のロケーションを使用できます。
最新のWebLogic Deploying Tooling (WDT)およびWebLogic Image Tool (WIT)インストーラZIPファイルを/tmp/mii-sample/model-images
ディレクトリにダウンロードします。 Model in Imageコンテナ・イメージを作成するには、WDTとWITの両方が必要です。
$ cd /tmp/mii-sample/model-images
$ curl -m 120 -fL https://github.com/oracle/weblogic-deploy-tooling/releases/latest/download/weblogic-deploy.zip \
-o /tmp/mii-sample/model-images/weblogic-deploy.zip
$ curl -m 120 -fL https://github.com/oracle/weblogic-image-tool/releases/latest/download/imagetool.zip \
-o /tmp/mii-sample/model-images/imagetool.zip
WebLogic Image Toolを設定するには、次のコマンドを実行します:
$ cd /tmp/mii-sample/model-images
$ unzip imagetool.zip
$ ./imagetool/bin/imagetool.sh cache addInstaller \
--type wdt \
--version latest \
--path /tmp/mii-sample/model-images/weblogic-deploy.zip
これらのステップでは、WITを/tmp/mii-sample/model-images/imagetool
ディレクトリにインストールし、さらにWDT ZIPファイル・インストーラを指すwdt_latest
エントリをツールのキャッシュに配置します。 WITは、サンプルの後半でモデル・イメージの作成に使用します。
イメージ作成の目的は、WebLogic Image Toolを使用して、/tmp/mii-sample/model-images/model-in-image:WLS-v1/
にステージングするファイルからmodel-in-image:WLS-v1
という名前のイメージを作成する方法を示すことです。 ステージングされたファイルには、WDTアーカイブ内のwebアプリケーションと、admin-server
というWebLogic管理サーバーおよびcluster-1
というWebLogicクラスタのWDTモデル構成が含まれます。
全体として、Model in Imageイメージの/u01/wdt/weblogic-deploy
ディレクトリには、WebLogic ServerインストールとWebLogic Deploy Toolingインストールが含まれている必要があります。 また、WDTモデルのアーカイブ・ファイルがある場合、イメージの/u01/wdt/models
ディレクトリにもこれらのファイルが含まれている必要があります。 最後に、イメージにWDTモデルYAMLファイルとプロパティ・ファイルを同じ/u01/wdt/models
ディレクトリに含めることもできます。 WDTモデルYAMLファイルを/u01/wdt/models
ディレクトリに指定しない場合は、ドメインspec.model.configMap
フィールドで参照されるKubernetes ConfigMapを使用して、モデルYAMLファイルを動的に指定する必要があります。 このサンプルの後半で、モデルConfigMapの使用例を示します。
次の各項では、イメージmodel-in-image:WLS-v1
を作成するステップについて説明します。
このサンプルには、イメージのアーカイブZIPファイルの作成に使用する事前定義済アーカイブ・ディレクトリが/tmp/mii-sample/archives/archive-v1
に含まれています。
wlsdeploy
という名前のアーカイブ・トップ・ディレクトリには、applications
という名前のディレクトリが含まれています。このディレクトリには、myapp-v1
というディレクトリに展開されたサンプルJSP webアプリケーションが含まれています。 WDTアーカイブについて覚えておく必要がある3つの重要な点は次のとおりです:
wlsdeploy
です。実行中のWebLogic Serverインスタンスに関する重要な詳細が表示されます: つまり、そのドメイン名、クラスタ名、サーバー名、およびサーバーにターゲット指定されているデータ・ソースの名前です。
イメージを作成するときは、ステージング・ディレクトリ/tmp/mii-sample/model-in-image__WLS-v1
内のファイルを使用します。 準備として、WDTアプリケーション・アーカイブのZIPファイルを含める必要があります。
次のコマンドを実行して、アプリケーション・アーカイブZIPファイルを作成し、必要なディレクトリに配置します:
# Delete existing archive.zip in case we have an old leftover version
$ rm -f /tmp/mii-sample/model-images/model-in-image__WLS-v1/archive.zip
# Move to the directory which contains the source files for our archive
$ cd /tmp/mii-sample/archives/archive-v1
# Zip the archive to the location will later use when we run the WebLogic Image Tool
$ zip -r /tmp/mii-sample/model-images/model-in-image__WLS-v1/archive.zip wlsdeploy
このステップでは、ステージング済WDTモデルYAMLファイルおよび/tmp/mii-sample/model-in-image__WLS-v1
ディレクトリのプロパティを確認します。 このディレクトリのモデルは、アーカイブ内のwebアプリケーションを参照し、WebLogic Server管理サーバーを構成し、WebLogicクラスタを構成します。 これは、単一のプロパティを持つファイルであるmodel.10.properties
と、WebLogic構成model.10.yaml
を含むYAMLファイルでのみ構成されます。
CLUSTER_SIZE=5
WLS model.10.yaml
を次に示します:
domainInfo:
AdminUserName: '@@SECRET:__weblogic-credentials__:username@@'
AdminPassword: '@@SECRET:__weblogic-credentials__:password@@'
ServerStartMode: 'prod'
topology:
Name: '@@ENV:CUSTOM_DOMAIN_NAME@@'
AdminServerName: 'admin-server'
Cluster:
'cluster-1':
DynamicServers:
ServerTemplate: 'cluster-1-template'
ServerNamePrefix: 'managed-server'
DynamicClusterSize: '@@PROP:CLUSTER_SIZE@@'
MaxDynamicClusterSize: '@@PROP:CLUSTER_SIZE@@'
MinDynamicClusterSize: '0'
CalculatedListenPorts: false
Server:
'admin-server':
ListenPort: 7001
ServerTemplate:
'cluster-1-template':
Cluster: 'cluster-1'
ListenPort: 8001
appDeployments:
Application:
myapp:
SourcePath: 'wlsdeploy/applications/myapp-v1'
ModuleType: ear
Target: 'cluster-1'
モデル・ファイルの特徴は次のとおりです:
次を使用してWebLogicドメインを定義します:
cluster-1
admin-server
wlsdeploy/applications/myapp-v1
のWDTアーカイブZIPファイルにあるcluster-1
ターゲットEARアプリケーションマクロを利用して外部値をインジェクトします:
CLUSTER_SIZE
プロパティは、PROPマクロを使用してモデルYAMLファイルのDynamicClusterSize
およびMaxDynamicClusterSize
フィールドで参照されます。CUSTOM_DOMAIN_NAME
という名前のカスタム環境変数を使用してインジェクトされます。
weblogic-credentials
シークレット・マクロ参照を使用して設定されます。
webLogicCredentialsSecret
フィールドを使用して参照されます。weblogic-credentials
は、所有ドメインの実際のWebLogic資格証明のシークレット名を常に間接参照する予約名です。Model in Imageイメージには、複数のプロパティ・ファイル、アーカイブZIPファイルおよびYAMLファイルを含めることができますが、このサンプルでは、それぞれのいずれかを使用します。 Model in Imagesモデル・ファイルのネーミング規則、ファイル・ロード順序およびマクロ構文の詳細は、Model in Imageユーザー・ドキュメントの「モデル・ファイル」ファイルを参照してください。
この時点で、イメージmodel-in-image:WLS-v1
に必要なすべてのファイルをステージングしました。これには次のものが含まれます:
/tmp/mii-sample/model-images/weblogic-deploy.zip
/tmp/mii-sample/model-images/model-in-image__WLS-v1/model.10.yaml
/tmp/mii-sample/model-images/model-in-image__WLS-v1/model.10.properties
/tmp/mii-sample/model-images/model-in-image__WLS-v1/archive.zip
weblogic-deploy.zip
ファイルが表示されない場合は、「前提条件」でステップが欠落しています。
ここで、イメージ・ツールを使用して、ベースWebLogicイメージにレイヤー化されたmodel-in-image:WLS-v1
という名前のイメージを作成します。 このツールは、前提条件ステップですでに設定されています。
次のコマンドを実行してモデル・イメージを作成し、機能していることを確認します:
$ cd /tmp/mii-sample/model-images
$ ./imagetool/bin/imagetool.sh update \
--tag model-in-image:WLS-v1 \
--fromImage container-registry.oracle.com/middleware/weblogic:12.2.1.4 \
--wdtModel ./model-in-image__WLS-v1/model.10.yaml \
--wdtVariables ./model-in-image__WLS-v1/model.10.properties \
--wdtArchive ./model-in-image__WLS-v1/archive.zip \
--wdtModelOnly \
--wdtDomainType WLS \
--chown oracle:root
imagetool
ディレクトリが表示されない場合は、前提条件のステップが欠落しています。
このコマンドは、WebLogic Image ToolをModel in Imageモードで実行し、次の操作を実行します:
container-registry.oracle.com/middleware/weblogic:12.2.1.4
ベース・イメージのレイヤーとしてビルドします。latest
を使用してWITにWDTをキャッシュしたことに注意してください。-wdtVersion
フラグを渡す必要がなくなります。/u01/wdt/models
にコピーします。コマンドが成功すると、次のような出力で終了します:
[INFO ] Build successful. Build time=36s. Image tag=model-in-image:WLS-v1
また、docker images
コマンドを実行すると、model-in-image:WLS-v1
という名前のイメージが表示されます。
ノート: ローカル・マシンにリモートのKubernetesクラスタ・ワーカー・ノードがある場合は、これらのノードがアクセスできるロケーションにイメージを配置する必要があります。 「Kubernetesクラスタがイメージにアクセスできることの確認」を参照してください。
このサンプルでは、一般提供 (GA)イメージを使用しています。 GAイメージは、パブリック・インターネットから環境を使用できないデモンストレーションおよび開発目的「のみ」に適しています。「本番での使用はできません」。 本番では、常にOCRのCPU (パッチ適用済)イメージを使用するか、WebLogic Image Tool (WIT)と--recommendedPatches
オプションを使用してイメージを作成する必要があります。 詳細は、「Oracle WebLogic Serverの本番環境の保護」の「最新のパッチと更新の適用」を参照してください。
この項では、次のステップを含む新しいイメージをネームスペースsample-domain1-ns
にデプロイします:
password
値を指定する必要があります。1つ以上のドメインをホストできるネームスペースを作成します:
$ kubectl create namespace sample-domain1-ns
## label the domain namespace so that the operator can autodetect and create WebLogic Server pods.
$ kubectl label namespace sample-domain1-ns weblogic-operator=enabled
最初に、WLSタイプ・モデル・ドメインで必要なシークレットを作成します。 この場合、2つのシークレットがあります。
次のkubectl
コマンドを実行して、必要なシークレットをデプロイします:
$ kubectl -n sample-domain1-ns create secret generic \
sample-domain1-weblogic-credentials \
--from-literal=username=<wl admin username> \
--from-literal=password=<wl admin password>
$ kubectl -n sample-domain1-ns label secret \
sample-domain1-weblogic-credentials \
weblogic.domainUID=sample-domain1
$ kubectl -n sample-domain1-ns create secret generic \
sample-domain1-runtime-encryption-secret \
--from-literal=password=<mii runtime encryption pass>
$ kubectl -n sample-domain1-ns label secret \
sample-domain1-runtime-encryption-secret \
weblogic.domainUID=sample-domain1
これらのシークレットに関する重要な詳細:
パスワードおよびユーザー名の選択:
<wl admin username>
および<wl admin password>
は、選択したユーザー名とパスワードに置き換えます。 パスワードは8文字以上で、数字を1文字以上使用する必要があります。 指定した内容を記憶します。 これらの資格証明は後で再度必要になる場合があります。 <mii runtime encryption pass>
を任意のパスワードに置き換えます。WebLogic資格証明シークレット:
username
およびpassword
フィールドが含まれている必要があります。spec.webLogicCredentialsSecret
フィールドによって参照される必要があります。domainInfo.AdminUserName
およびdomainInfo.AdminPassWord
フィールドのマクロで参照する必要があります。モデルWDTランタイム・シークレット:
password
フィールドが含まれている必要があります。spec.model.runtimeEncryptionSecret
フィールドを使用して参照する必要があります。シークレットの削除および再作成:
kubectl create secret
コマンドの使用時にシークレットを変更できます。シークレットの命名とラベル付けには、次の2つの理由で、関連付けられたドメインUIDを使用します:
weblogic.domainUID
ラベルを使用します。 ここで、ドメインYAMLファイルを作成します。 ドメインは、オペレータにWebLogicドメインのデプロイ方法を伝える主要なリソースです。
/tmp/mii-sample/mii-initial.yaml
などのファイルに次をコピーするか、サンプル・ソースに含まれているファイル/tmp/mii-sample/domain-resources/WLS/mii-initial-d1-WLS-v1.yaml
を使用します。
ノート: ドメイン・カスタム・リソースをデプロイする前に、ローカル・マシンにリモートのKubernetesクラスタ・ワーカー・ノードがあるかどうかを確認します。 その場合、これらのノードがアクセスできるロケーションにドメインのイメージを配置する必要があり、新しいロケーションを参照するようにドメインYAMLファイルを変更することも必要になる場合があります。 「Kubernetesクラスタがイメージにアクセスできることの確認」を参照してください。
次のコマンドを実行して、ドメイン・カスタム・リソースを作成します:
$ kubectl apply -f /tmp/mii-sample/domain-resources/WLS/mii-initial-d1-WLS-v1.yaml
ノート: 事前定義済のドメインYAMLファイルを使用せずに、以前に独自のドメインYAMLファイルを作成した場合、前述のコマンドでカスタム・ファイル名を置き換えます。 以前は、/tmp/mii-sample/mii-initial.yaml
という名前を付けることをお薦めしました。
WebLogic Serverポッドがすべて実行されていることを確認します:
$ kubectl get all -n sample-domain1-ns
NAME READY STATUS RESTARTS AGE
pod/sample-domain1-admin-server 1/1 Running 0 41m
pod/sample-domain1-managed-server1 1/1 Running 0 40m
pod/sample-domain1-managed-server2 1/1 Running 0 40m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/sample-domain1-admin-server ClusterIP None <none> 7001/TCP 41m
service/sample-domain1-cluster-cluster-1 ClusterIP 100.66.99.27 <none> 8001/TCP 40m
service/sample-domain1-managed-server1 ClusterIP None <none> 8001/TCP 40m
service/sample-domain1-managed-server2 ClusterIP None <none> 8001/TCP 40m
ロード・バランサを作成して、クラスタにデプロイされたWebLogic Server管理コンソールおよびアプリケーションにアクセスします。 Tanzuは、ルーティングのためにMetalLBロード・バランサおよびNGINXイングレスをサポートしています。
次のコマンドを実行して、MetalLBロード・バランサをインストールします:
## create namespace metallb-system
$ kubectl create ns metallb-system
## deploy MetalLB load balancer
$ kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.9.2/manifests/metallb.yaml -n metallb-system
## create secret
$ kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"
$ cat metallb-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.100.50-192.168.100.65
$ kubectl apply -f metallb-configmap.yaml
configmap/config created
$ kubectl get all -n metallb-system
NAME READY STATUS RESTARTS AGE
pod/controller-684f5d9b49-jkzfk 1/1 Running 0 2m14s
pod/speaker-b457r 1/1 Running 0 2m14s
pod/speaker-bzmmj 1/1 Running 0 2m14s
pod/speaker-gphh5 1/1 Running 0 2m14s
pod/speaker-lktgc 1/1 Running 0 2m14s
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/speaker 4 4 4 4 4 beta.kubernetes.io/os=linux 2m14s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/controller 1/1 1 1 2m14s
NAME DESIRED CURRENT READY AGE
replicaset.apps/controller-684f5d9b49 1 1 1 2m14s
NGINXのインストール。
$ helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx --force-update
$ helm install ingress-nginx ingress-nginx/ingress-nginx
クラスタにデプロイされたアプリケーションにアクセスし、管理コンソールにアクセスするためのイングレスを作成します。
$ cat ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sample-nginx-ingress-pathrouting
namespace: sample-domain1-ns
spec:
ingressClassName: nginx
rules:
- host:
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: sample-domain1-cluster-cluster-1
port:
number: 8001
- path: /console
pathType: Prefix
backend:
service:
name: sample-domain1-admin-server
port:
number: 7001
$ kubectl apply -f ingress.yaml
イングレスが実行中であることを確認してください。
$ kubectl get ingresses -n sample-domain1-ns
NAME CLASS HOSTS ADDRESS PORTS AGE
sample-nginx-ingress-pathrouting <none> * 192.168.100.50 80 7m18s
ロード・バランサのIPアドレスhttp://192.168.100.50/console
を使用して、管理コンソールにアクセスします。 コンソール・ログイン画面には、「シークレット」で指定したWebLogic管理資格証明が必要です。
サンプル・アプリケーションにアクセスします。
# Access the sample application using the load balancer IP (192.168.100.50)
$ curl http://192.168.100.50/myapp_war/index.jsp
<html><body><pre>
*****************************************************************
Hello World! This is version 'v1' of the mii-sample JSP web-app.
Welcome to WebLogic Server 'managed-server1'!
domain UID = 'sample-domain1'
domain name = 'domain1'
Found 1 local cluster runtime:
Cluster 'cluster-1'
Found 0 local data sources:
*****************************************************************
</pre></body></html>
$ curl http://192.168.100.50/myapp_war/index.jsp
<html><body><pre>
*****************************************************************
Hello World! This is version 'v1' of the mii-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 0 local data sources:
*****************************************************************
</pre></body></html>