[WLS, Cloud, Docker, Kubernetes] How to run WebLogic clusters on the Oracle Cloud Infrastructure Container Engine for Kubernetes

原文はこちら
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クラスタを簡単にプロビジョニングし、ロードバランサ、ボリューム、ネットワークファブリックなどの必要なサービスを簡単に提供できます。
OKEPICTURE2.png

Prerequisites:

  1. Dockerイメージ:
    • WebLogic Server (weblogic-12.2.1.3:latest).
    • WebLogic Kubernetes Operator (weblogic-operator:latest)
    • Traefik Load Balancer (traefik:1.4.5)
  2. Dockerとkubectlのインストール、構成が完了しているワークステーション
  3. Oracle Container Engine for Kubernetes on OCI。OCIでKubernetesマネージドサービスをセットアップするには、以下のドキュメントに従う。
    Overview of Container Engine for Kubernetes
    https://docs.us-phoenix-1.oraclecloud.com/Content/ContEng/Concepts/contengoverview.htm
  4. OCI Container Engine for KubernetesノードにSSHでアクセスできること
  5. WebLogic Server、Operator、Load BalancerイメージをプッシュするためのOracle Cloud Infrastructure Registry
    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
以下のような出力でノードが表示されるはずです。
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
Kubernetesクラスタへのアクセス権限を有するには、OCI Container Engine for Kubernetesクラスタのcluster-adminとしてご利用のOCIアカウントを認可する必要があります。これにはOCID(OCIコンソールページのユーザー設定の下にあります)が必要です。例えば、OCIDがocid1.user.oc1..aaaaaaaac26kw7qvuij7i6fadabklqfb7svyuhpitedmguspv6ht67i5l32qの場合、コマンドは以下のようになります。
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アドレスを持つノードを利用します。
Node1: 129.146.109.106  

Node2: 129.146.22.123  

Node3: 129.146.66.11
上記の場合、NFSサーバをNode 1(129.146.109.106)にインストールし、Node 2(129.146.22.123)、Node 3(129.146.22.123)をクライアントとして利用します。各ノードに対応するプライベートIPアドレスを調べるために、各ノードに以下のコマンドを使ってログインします。
ssh -i ~/.ssh/id_rsa opc@[Public IP of Node]

ip addr | grep ens3
~/.ssh/id_rsa はSSHで利用するRSA秘密鍵のパスです。
例えば、Node 1の場合以下のようになります。
ssh -i ~/.ssh/id_rsa opc@129.146.109.106

ip addr | grep ens3
blog17.png

各ノードのプライベートIPアドレスを調べた結果を纏めました。
Nodes:Public IPPrivate 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
  1. systemctl restart nfs
  2. exit
SSHでNode 2にログインします。
ssh -i ~/.ssh/id_rsa opc@129.146.22.123
Node 1の内部IPを追加するために、 /etc/fstab を編集します。
10.0.11.3:/scratch /scratch nfs nfsvers=3 0 0
    • sudo su -
    • yum install -y nfs-utils
    • mkdir /scratch
    • vi /etc/fstab
  1. mount /scratch
  2. exit
Node 3に対しても同様の手順を繰り返します。
ssh -i ~/.ssh/id_rsa opc@129.146.66.11
/etc/fstabを編集し、Node 1の内部IPを追加します。
10.0.11.3:/scratch /scratch nfs nfsvers=3 0 0
    • sudo su -
    • yum install -y nfs-utils
    • mkdir /scratch
    • vi /etc/fstab
  1. mount /scratch
  2. exit

Upload the Docker images to the OCI Registry

WebLogic Server 12.2.1.3とWebLogic Kubernetes Operatorに必要なDockerイメージをビルドします。
WebLogic on Docker
https://github.com/oracle/docker-images/tree/master/OracleWebLogic/
Oracle Weblogic Server Kubernetes Operator
https://github.com/oracle/weblogic-kubernetes-operator
TraefikのDockerイメージはDocker HubリポジトリからPullします。以下はその例です。
docker login

docker pull traefik:1.4.5
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
認証トークンを生成してphx.ocir.ioOCIR Dockerリポジトリにログインします。
OCIダッシュボードにログインし、”User Settings"をクリックした上で、左側のメニューの”Auth Tokens"をクリックします。

生成されたパスワードを安全な場所に保存します。
OCIR Dockerレジストリに以下のコマンドを使ってログインします。
docker login phx.ocir.io
ユーザー名を尋ねてくるので、OCIテナント名/OCIユーザー名を指定します。
docker login phx.ocir.io

Username: weblogicondocker/myusername           
Password: 
Login Succeeded
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
例えば、PHX registry用にocisecretというDockerシークレットを作成する場合は以下の通りです。
kubectl create secret docker-registry ocisecret --docker-server=phx.ocir.io --docker-username=weblogicondocker/myusername --docker-password= _b5HiYcRzscbC48e1AZa  --docker-email=myusername@oracle.com
DockerイメージをOCIRにPushします。
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
OCIコンソールにログインしてイメージを検証します。
  1. Log in to the OCI consoleにログインし、正しいリージョンを使っていることを確認する(例:us-phoenix-1
  2. ContainersからRegistryを選択すると、イメージがRegistryのページで確認できるはず。
  3. イメージ名をクリックし、”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入力ファイルを編集し、イメージ名を反映します。
cd $SRC/weblogic-kubernetes-operator/kubernetes
Change the ‘image’ フィールドを変更し、OCIRの対応するDockerリポジトリのイメージ名を指定します。
./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
create-weblogic-operator-inputs.yaml と create-weblogic-domain-inputs.yaml のその他のパラメータを確認し、変更します。OperatorとWebLogicドメインのインストール手順にある全てのオプションや記述をチェックします。
WebLogic Kubernetes Operator Installation
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 でこのデモ用にカスタマイズした値のリストです。
create-weblogic-operator-inputs.yaml
https://github.com/oracle/weblogic-kubernetes-operator/blob/master/kubernetes/create-weblogic-operator-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 でこのデモ用にカスタマイズした値のリストです。
create-weblogic-domain-inputs.yaml
https://github.com/oracle/weblogic-kubernetes-operator/blob/master/kubernetes/create-weblogic-domain-inputs.yaml
domainUID: domain1

t3PublicAddress: 0.0.0.0

exposeAdminNodePort: true

namespace: domain1

loadBalancer: TRAEFIK

exposeAdminT3Channel: true
weblogicDomainStoragePath: /scratch/external-domain-home/pv001
Note: 現時点では、OCI Container Engine for Kubernetes上でWebLogic Serverを動作させる場合、TraefikとApache HTTP Serverをロードバランサとして利用することを推奨しています。Voyager HAProxy Ingress ControllerはOKEでサポートしていないため、動作保証できません。

WebLogicドメインはパラメータweblogicDomainStoragePathで指定されたパスにマップされた永続ボリュームを使います。以下のコマンドで、永続ボリュームディレクトリをNode 1のNFSサーバに作成しましょう。
ssh -i ~/.ssh/id_rsa opc@129.146.109.106 "mkdir -m 777 -p /scratch/external-domain-home/pv001"
今回のデモドメインは名前空間 domain1 で動作するよう構成済みです。名前空間 domain1 を作成するには、以下のコマンドを実行します。
kubectl create namespace domain1
管理サーバへのアクセスのためのユーザー名とパスワードは、ドメイン稼働する名前空間と同一の名前空間のKubernetesシークレットに格納しておかねばなりません。ファイルへの資格証明を保存しないようにするため、スクリプトではシークレットを作成しません。Oracleは以下のコマンドをSSHで実行し、資格証明のセキュリティを保護するための適切な手段を講じることを推奨します。

シークレットを作成するには、以下のコマンドを発行します。
kubectl -n NAMESPACE create secret generic SECRET_NAME

  --from-literal=username=ADMIN-USERNAME

  --from-literal=password=ADMIN-PASSWORD
今回のデモでは、以下の値を使いました。
kubectl -n domain1 create secret generic domain1-weblogic-credentials --from-literal=username=weblogic --from-literal=password=welcome1
最後に、入力ファイルと出力ディレクトリを指定してcreateスクリプトを実行します。
./create-weblogic-operator.sh –i create-weblogic-operator-job-inputs.yaml  -o /path/to/weblogic-operator-output-directory
これで、関連する全てのOperatorデプロイメントを作成し、それらを起動します。

以下のコマンドを実行して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.war
https://github.com/bhabermaas/kubernetes-projects/blob/master/apps/testwebapp.war
cluster-1をターゲットとして選択し、”終了”、”構成の解放"をクリックします。”制御”タブを選択し、"全てのリクエストを処理"をクリックします。これにより、デプロイメントの状態がアクティブに変わります。

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
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
企業ネットワークの外部にいる場合、T3を制限なく利用できます。

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

0 件のコメント:

コメントを投稿