原文はこちら
https://blogs.oracle.com/weblogicserver/how-to-run-weblogic-clusters-on-the-oracle-cloud-infrastructure-container-engine-for-kubernetes
WebLogicクラスタを実行するためにKubernetes環境をセットアップするには様々な方法があります。Oracleは、本番モードもしくは開発モードのWebLogicクラスタを、オンプレミスもしくはクラウドでKubernetes上で実行したいお客様をサポートします。このエントリでは、Oracle Cloud Infrastructure (OCI) Container Engine for Kubernetesを使用してWebLogicクラスタを実行する手順について説明します。Kubernetesマネージドサービスは、基盤となるOracle Cloud Infrastructure(OCI)と完全に統合されているため、Kubernetesクラスタを簡単にプロビジョニングし、ロードバランサ、ボリューム、ネットワークファブリックなどの必要なサービスを簡単に提供できます。
Dockerとkubectlのインストール、構成が完了しているワークステーション Oracle Container Engine for Kubernetes on OCI。OCIでKubernetesマネージドサービスをセットアップするには、以下のドキュメントに従う。
OCI Container Engine for KubernetesノードにSSHでアクセスできること WebLogic Server、Operator、Load BalancerイメージをプッシュするためのOracle Cloud Infrastructure Registry
Note: WebLogic Server on OCI Container Engine for Kubernetes上でWebLogic Serverを実行する場合、NFS 3.0を使うことを現状推奨しています。動作確認の間、NFS 4.0を使うとWebLogicドメインのサーバが断続的に障害状態に陥ることがわかりました。服すのスレッドがNFS(デフォルトストア、診断ストア、Node Manager、ロギング、ドメインホーム)を使うため、ファイルストアにアクセスする際に問題があります。これらの問題はNFSのバージョンを3.0にすることで解消されます。
このデモでは、Kubernetesクラスタは以下のIPアドレスを持つノードを利用します。
例えば、Node 1の場合以下のようになります。
各ノードのプライベートIPアドレスを調べた結果を纏めました。
SSHでNode 1にログインし、NFSをインストール、設定します。
/etc/exports ファイルを編集して、Node 2、Node 3の内部IPアドレスを追加しておきます。
systemctl restart nfs exit SSHでNode 2にログインします。
mount /scratch exit Node 3に対しても同様の手順を繰り返します。
mount /scratch exit
OCIダッシュボードにログインし、”User Settings"をクリックした上で、左側のメニューの”Auth Tokens"をクリックします。
生成されたパスワードを安全な場所に保存します。
OCIR Dockerレジストリに以下のコマンドを使ってログインします。
Gitを使い、WebLogic Kubernetes Operatorプロジェクトをダウンロードします。
YAML入力ファイルを編集し、イメージ名を反映します。
WebLogicドメインはパラメータweblogicDomainStoragePathで指定されたパスにマップされた永続ボリュームを使います。以下のコマンドで、永続ボリュームディレクトリをNode 1のNFSサーバに作成しましょう。
シークレットを作成するには、以下のコマンドを発行します。
以下のコマンドを実行してOperatorとPodの状態を確認します。
同じコマンドを実行してWebLogicドメインの作成を実施します。
WebLogicクラスタの状態を確認するには、以下のコマンドを実行します。
ロードバランサが動作している様子を確認しましょう。そのために、WebLogic Server管理コンソールにログインし、testwebapp.warというアプリケーションをデプロイします。WebLogicドメイン用にカスタマイズした入力ファイルでは、AdminNodePortを公開するよう指定していました。ポート番号を確認するには、以下のコマンドを実行します。
Nodeの外部IPアドレスの一つを使い、管理コンソールにアクセスしましょう。今回の場合、 http://129.146.109.106:30701/console でアクセスします。WebLogic Server管理コンソールへのログインには、資格証明としてweblogic/welcome1を使います。
”デプロイメント”、”ロックして編集”をクリックして、testwebapp.warアプリケーションをアップロードします。
KubernetesクラスタのIngress controllerとしてTraefikを使い、HTTPリクエストの負荷分散をデモしましょう。ロードバランサのNodePort番号を確認するために、以下のコマンドを実行します。
Traefikロードバランサはポート番号30305で動作しています。testwebappアプリケーションにアクセスする場合(http://129.146.22.123:30305/testwebapp/)、常にアプリケーションは現在使われている管理対象サーバの情報を表示します。
同じURLで別の接続では、管理対象サーバ1の情報が表示されます。
Because the WebLogicクラスタを外界に公開し、ノードの外部IPアドレスを使ってアクセス可能になっているため、認可されたWebLogicユーザーはT3プロトコルを使って全ての利用可能なWebLogicリソースにWLSTコマンドを使ってアクセスできます。ファイアウォールがある場合、プロキシトンネルを使ってT3を実行する必要があります(T3 over HTTPを使い、WebLogic Serverでトンネリングを有効化し、T3ではなくHTTPプロトコルを使う)。詳細は以下のエントリをご覧ください。
https://blogs.oracle.com/weblogicserver/how-to-run-weblogic-clusters-on-the-oracle-cloud-infrastructure-container-engine-for-kubernetes
WebLogicクラスタを実行するためにKubernetes環境をセットアップするには様々な方法があります。Oracleは、本番モードもしくは開発モードのWebLogicクラスタを、オンプレミスもしくはクラウドでKubernetes上で実行したいお客様をサポートします。このエントリでは、Oracle Cloud Infrastructure (OCI) Container Engine for Kubernetesを使用してWebLogicクラスタを実行する手順について説明します。Kubernetesマネージドサービスは、基盤となるOracle Cloud Infrastructure(OCI)と完全に統合されているため、Kubernetesクラスタを簡単にプロビジョニングし、ロードバランサ、ボリューム、ネットワークファブリックなどの必要なサービスを簡単に提供できます。
Prerequisites:
- Dockerイメージ:
- WebLogic Server (weblogic-12.2.1.3:latest).
- WebLogic Kubernetes Operator (weblogic-operator:latest)
- Traefik Load Balancer (traefik:1.4.5)
Overview of Container Engine for Kubernetes
https://docs.us-phoenix-1.oraclecloud.com/Content/ContEng/Concepts/contengoverview.htm
Overview of Registry
https://docs.us-phoenix-1.oraclecloud.com/Content/Registry/Concepts/registryoverview.htm
Prepare the WebLogic Kubernetes Operator environment
環境準備のために以下を実施する必要があります。- OCI Container Engine for the Kubernetesクラスタへのアクセス確認ならびにRBACポリシーの設定
- NFSサーバの構成
- OCI Registry (OCIR) へのDockerイメージのアップロード
- OCIRにあるDockerイメージの名前を反映するため、構成YAMLファイルを編集
Test accessibility and set up the RBAC policy for the OKE cluster
OCI Container Engine for Kubernetesノードへのアクセス確認のため、以下のコマンドを実行します。以下のような出力でノードが表示されるはずです。kubectl get nodes
Kubernetesクラスタへのアクセス権限を有するには、OCI Container Engine for Kubernetesクラスタのcluster-adminとしてご利用のOCIアカウントを認可する必要があります。これにはOCID(OCIコンソールページのユーザー設定の下にあります)が必要です。例えば、OCIDがocid1.user.oc1..aaaaaaaac26kw7qvuij7i6fadabklqfb7svyuhpitedmguspv6ht67i5l32qの場合、コマンドは以下のようになります。NAME STATUS ROLES AGE VERSION
129.146.109.106 Ready node 5h v1.9.4
129.146.22.123 Ready node 5h v1.9.4
129.146.66.11 Ready node 5h v1.9.4
kubectl create clusterrolebinding my-cluster-admin-binding --clusterrole=cluster-admin --user=ocid1.user.oc1..aaaaaaaac26kw7qvuij7i6fadabklqfb7svyuhpitedmguspv6ht67i5l32q
Set up the NFS server
現在ご利用いただけるOCI Container Engine for Kubernetesのバージョンでは、ノード間で共有可能なアクセス権RWOnce(一人のみが書き込め、その他は読み取りのみ)のネットワークブロックストレージをサポートします。このとき、WebLogic Server Kubernetes Operatorで作成されたKubernetes上のWebLogicドメインでは、WebLogicドメインの構成を保存するために共有ファイルシステムが必要です。この共有ファイルシステムはノード全体の全てのPodからアクセスできる必要があります。回避策として、NFSサーバを一つのノードにインストールし、全ノード間でファイルシステムを共有する必要があります。Note: WebLogic Server on OCI Container Engine for Kubernetes上でWebLogic Serverを実行する場合、NFS 3.0を使うことを現状推奨しています。動作確認の間、NFS 4.0を使うとWebLogicドメインのサーバが断続的に障害状態に陥ることがわかりました。服すのスレッドがNFS(デフォルトストア、診断ストア、Node Manager、ロギング、ドメインホーム)を使うため、ファイルストアにアクセスする際に問題があります。これらの問題はNFSのバージョンを3.0にすることで解消されます。
このデモでは、Kubernetesクラスタは以下のIPアドレスを持つノードを利用します。
上記の場合、NFSサーバをNode 1(129.146.109.106)にインストールし、Node 2(129.146.22.123)、Node 3(129.146.22.123)をクライアントとして利用します。各ノードに対応するプライベートIPアドレスを調べるために、各ノードに以下のコマンドを使ってログインします。Node1: 129.146.109.106
Node2: 129.146.22.123
Node3: 129.146.66.11
~/.ssh/id_rsa はSSHで利用するRSA秘密鍵のパスです。ssh -i ~/.ssh/id_rsa opc@[Public IP of Node]
ip addr | grep ens3
例えば、Node 1の場合以下のようになります。
ssh -i ~/.ssh/id_rsa opc@129.146.109.106
ip addr | grep ens3
各ノードのプライベートIPアドレスを調べた結果を纏めました。
Nodes: | Public IP | Private IP |
---|---|---|
Node1 (NFS Server) | 129.146.109.106 | 10.0.11.3 |
Node2 | 129.146.22.123 | 10.0.11.1 |
Node3 | 129.146.66.11 | 10.0.11.2 |
SSHでNode 1にログインし、NFSをインストール、設定します。
/etc/exports ファイルを編集して、Node 2、Node 3の内部IPアドレスを追加しておきます。
/scratch 10.0.11.1(rw)
/scratch 10.0.11.2(rw)
- sudo su -
- yum install -y nfs-utils
- mkdir /scratch
- chown -R opc:opc /scratch
- vi /etc/exports
Node 1の内部IPを追加するために、 /etc/fstab を編集します。ssh -i ~/.ssh/id_rsa opc@129.146.22.123
10.0.11.3:/scratch /scratch nfs nfsvers=3 0 0
- sudo su -
- yum install -y nfs-utils
- mkdir /scratch
- vi /etc/fstab
/etc/fstabを編集し、Node 1の内部IPを追加します。ssh -i ~/.ssh/id_rsa opc@129.146.66.11
10.0.11.3:/scratch /scratch nfs nfsvers=3 0 0
- sudo su -
- yum install -y nfs-utils
- mkdir /scratch
- vi /etc/fstab
Upload the Docker images to the OCI Registry
WebLogic Server 12.2.1.3とWebLogic Kubernetes Operatorに必要なDockerイメージをビルドします。WebLogic on DockerTraefikのDockerイメージはDocker HubリポジトリからPullします。以下はその例です。
https://github.com/oracle/docker-images/tree/master/OracleWebLogic/
Oracle Weblogic Server Kubernetes Operator
https://github.com/oracle/weblogic-kubernetes-operator
Dockerイメージに以下のようにタグを付けます。docker login
docker pull traefik:1.4.5
認証トークンを生成してphx.ocir.ioOCIR Dockerリポジトリにログインします。docker tag [Name Of Your Image For Operator] phx.ocir.io/weblogicondocker/weblogic-kubernetes-operator:latest
docker tag [Name Of Your Image For WebLogic Domain] phx.ocir.io/weblogicondocker/weblogic:12.2.1.3
docker tag traefik:1.4.5 phx.ocir.io/weblogicondocker/traefik:1.4.5
OCIダッシュボードにログインし、”User Settings"をクリックした上で、左側のメニューの”Auth Tokens"をクリックします。
生成されたパスワードを安全な場所に保存します。
OCIR Dockerレジストリに以下のコマンドを使ってログインします。
ユーザー名を尋ねてくるので、OCIテナント名/OCIユーザー名を指定します。docker login phx.ocir.io
Dockerレジストリシークレットを作成します。このシークレット名は小文字のアルファベットもしくは数字で構成されていなければなりません。docker login phx.ocir.io
Username: weblogicondocker/myusername
Password:
Login Succeeded
例えば、PHX registry用にocisecretというDockerシークレットを作成する場合は以下の通りです。kubectl create secret docker-registry <secret_name> --docker-server=<region>.ocir.io --docker-username=<oci_tenancyname>/<oci_username>
--docker-password=<auth_token> --docker-email=example_email
DockerイメージをOCIRにPushします。kubectl create secret docker-registry ocisecret --docker-server=phx.ocir.io --docker-username=weblogicondocker/myusername --docker-password= _b5HiYcRzscbC48e1AZa --docker-email=myusername@oracle.com
OCIコンソールにログインしてイメージを検証します。docker push phx.ocir.io/weblogicondocker/weblogic-kubernetes-operator:latest
docker push phx.ocir.io/weblogicondocker/weblogic:12.2.1.3
docker push phx.ocir.io/weblogicondocker/traefik:1.4.5
- Log in to the OCI consoleにログインし、正しいリージョンを使っていることを確認する(例:us-phoenix-1)
- ContainersからRegistryを選択すると、イメージがRegistryのページで確認できるはず。
- イメージ名をクリックし、”Actions"を選択して”Public"に変更
Modify the configuration YAML files to reflect the Docker image names in the OCIR
最終ステップでは、入力ファイルのパラメータをカスタマイズし、WebLogic cluster、WebLogic OperatorのデプロイメントYAMLファイルを生成し、Traefikロードバランサを使ってイメージの変更とローカル構成を反映します。ここでは、事前に用意されているスクリプト(reate-weblogic-operator.sh and create-weblogic-domain.sh)を使います。Gitを使い、WebLogic Kubernetes Operatorプロジェクトをダウンロードします。
git clone https://github.com/oracle/weblogic-kubernetes-operator.git
YAML入力ファイルを編集し、イメージ名を反映します。
Change the ‘image’ フィールドを変更し、OCIRの対応するDockerリポジトリのイメージ名を指定します。cd $SRC/weblogic-kubernetes-operator/kubernetes
create-weblogic-operator-inputs.yaml と create-weblogic-domain-inputs.yaml のその他のパラメータを確認し、変更します。OperatorとWebLogicドメインのインストール手順にある全てのオプションや記述をチェックします。./internal/create-weblogic-domain-job-template.yaml: image: phx.ocir.io/weblogicondocker/weblogic:12.2.1.3
./internal/weblogic-domain-traefik-template.yaml: image: phx.ocir.io/weblogicondocker/traefik:1.4.5
./internal/domain-custom-resource-template.yaml: image: phx.ocir.io/weblogicondocker/weblogic:12.2.1.3
./create-weblogic-operator-inputs.yaml: weblogicOperatorImage: phx.ocir.io/weblogicondocker/weblogic-kubernetes-operator:latest
WebLogic Kubernetes Operator Installation以下は create-weblogic-operator-inputs.yaml でこのデモ用にカスタマイズした値のリストです。
https://github.com/oracle/weblogic-kubernetes-operator/blob/master/site/installation.md
Creating a WebLogic domain
https://github.com/oracle/weblogic-kubernetes-operator/blob/master/site/creating-domain.md
create-weblogic-operator-inputs.yaml
https://github.com/oracle/weblogic-kubernetes-operator/blob/master/kubernetes/create-weblogic-operator-inputs.yaml
以下は create-weblogic-domain-inputs.yaml でこのデモ用にカスタマイズした値のリストです。targetNamespaces: domain1
weblogicOperatorImage: phx.ocir.io/weblogicondocker/weblogic-kubernetes-operator:latest
externalRestOption: SELF_SIGNED_CERT
externalSans: IP:129.146.109.106
create-weblogic-domain-inputs.yaml
https://github.com/oracle/weblogic-kubernetes-operator/blob/master/kubernetes/create-weblogic-domain-inputs.yaml
Note: 現時点では、OCI Container Engine for Kubernetes上でWebLogic Serverを動作させる場合、TraefikとApache HTTP Serverをロードバランサとして利用することを推奨しています。Voyager HAProxy Ingress ControllerはOKEでサポートしていないため、動作保証できません。domainUID: domain1
t3PublicAddress: 0.0.0.0
exposeAdminNodePort: true
namespace: domain1
loadBalancer: TRAEFIK
exposeAdminT3Channel: true
weblogicDomainStoragePath: /scratch/external-domain-home/pv001
WebLogicドメインはパラメータweblogicDomainStoragePathで指定されたパスにマップされた永続ボリュームを使います。以下のコマンドで、永続ボリュームディレクトリをNode 1のNFSサーバに作成しましょう。
今回のデモドメインは名前空間 domain1 で動作するよう構成済みです。名前空間 domain1 を作成するには、以下のコマンドを実行します。ssh -i ~/.ssh/id_rsa opc@129.146.109.106 "mkdir -m 777 -p /scratch/external-domain-home/pv001"
管理サーバへのアクセスのためのユーザー名とパスワードは、ドメイン稼働する名前空間と同一の名前空間のKubernetesシークレットに格納しておかねばなりません。ファイルへの資格証明を保存しないようにするため、スクリプトではシークレットを作成しません。Oracleは以下のコマンドをSSHで実行し、資格証明のセキュリティを保護するための適切な手段を講じることを推奨します。kubectl create namespace domain1
シークレットを作成するには、以下のコマンドを発行します。
今回のデモでは、以下の値を使いました。kubectl -n NAMESPACE create secret generic SECRET_NAME
--from-literal=username=ADMIN-USERNAME
--from-literal=password=ADMIN-PASSWORD
最後に、入力ファイルと出力ディレクトリを指定してcreateスクリプトを実行します。kubectl -n domain1 create secret generic domain1-weblogic-credentials --from-literal=username=weblogic --from-literal=password=welcome1
これで、関連する全てのOperatorデプロイメントを作成し、それらを起動します。./create-weblogic-operator.sh –i create-weblogic-operator-job-inputs.yaml -o /path/to/weblogic-operator-output-directory
以下のコマンドを実行してOperatorとPodの状態を確認します。
同じコマンドを実行してWebLogicドメインの作成を実施します。
./create-weblogic-domain.sh –i create-weblogic-domain-job-inputs.yaml -o /path/to/weblogic-domain-output-directory
WebLogicクラスタの状態を確認するには、以下のコマンドを実行します。
bash-4.2$ kubectl get pods -n domain1
ロードバランサが動作している様子を確認しましょう。そのために、WebLogic Server管理コンソールにログインし、testwebapp.warというアプリケーションをデプロイします。WebLogicドメイン用にカスタマイズした入力ファイルでは、AdminNodePortを公開するよう指定していました。ポート番号を確認するには、以下のコマンドを実行します。
Nodeの外部IPアドレスの一つを使い、管理コンソールにアクセスしましょう。今回の場合、 http://129.146.109.106:30701/console でアクセスします。WebLogic Server管理コンソールへのログインには、資格証明としてweblogic/welcome1を使います。
”デプロイメント”、”ロックして編集”をクリックして、testwebapp.warアプリケーションをアップロードします。
testwebapp.warcluster-1をターゲットとして選択し、”終了”、”構成の解放"をクリックします。”制御”タブを選択し、"全てのリクエストを処理"をクリックします。これにより、デプロイメントの状態がアクティブに変わります。
https://github.com/bhabermaas/kubernetes-projects/blob/master/apps/testwebapp.war
KubernetesクラスタのIngress controllerとしてTraefikを使い、HTTPリクエストの負荷分散をデモしましょう。ロードバランサのNodePort番号を確認するために、以下のコマンドを実行します。
Traefikロードバランサはポート番号30305で動作しています。testwebappアプリケーションにアクセスする場合(http://129.146.22.123:30305/testwebapp/)、常にアプリケーションは現在使われている管理対象サーバの情報を表示します。
同じURLで別の接続では、管理対象サーバ1の情報が表示されます。
Because the WebLogicクラスタを外界に公開し、ノードの外部IPアドレスを使ってアクセス可能になっているため、認可されたWebLogicユーザーはT3プロトコルを使って全ての利用可能なWebLogicリソースにWLSTコマンドを使ってアクセスできます。ファイアウォールがある場合、プロキシトンネルを使ってT3を実行する必要があります(T3 over HTTPを使い、WebLogic Serverでトンネリングを有効化し、T3ではなくHTTPプロトコルを使う)。詳細は以下のエントリをご覧ください。
T3 RMI Communication for WebLogic Server Running on Kubernetes企業ネットワークの外部にいる場合、T3を制限なく利用できます。
https://blogs.oracle.com/weblogicserver/t3-rmi-communication-for-weblogic-server-running-on-kubernetes
https://orablogs-jp.blogspot.com/2018/02/t3-rmi-communication-for-weblogic.html
Summary
このエントリでは、Oracle Cloud Infrastructure上で動作するOCI Container Engine for Kubernetesを使い、WebLogicクラスタを構成するために必要な全手順と、WebLogicクラスタにデプロイされたWebアプリケーションの負荷分散をご紹介しました。OCI Container Engine for KubernetesでWebLogic Serverを実行すると、マネージドKubernetes環境でWebLogic Serverアプリケーションを活用し、WebLogic Serverアプリケーションを他のクラウド・アプリケーションと統合し、WebLogic Serverの使用法を発展させ、Kubernetesの使用を拡大できます。また、以下の内容について詳細を説明する一連のブログエントリも公開しています。- Operatorの実行方法
- 1個以上のWebLogicドメインをKubernetesで立ち上げる方法
- WebLogic Diagnostics Framework(WLDF、WebLogic診断フレームワーク)もしくはPrometheusを使ってWebLogicクラスタを手動、もしくは自動でスケールする方法
- WebLogicクラスタにデプロイされたWebアプリケーションの負荷分散をOperatorで管理する方法
- OperatorログをElasticsearch、Logstash、Kibanaと連携して管理する方法
How to... WebLogic Server on Kubernetes
https://blogs.oracle.com/weblogicserver/how-to-weblogic-server-on-kuberneteshttps://orablogs-jp.blogspot.com/2018/01/how-to-weblogic-server-on-kubernetes.html