リフト・アンド・シフト・ガイド
このガイドでは、オンプレミスのWebLogic Serverドメインを、Verrazzanoを使用してKubernetesを実行するクラウド環境に移動(リフト・アンド・シフト)する方法について説明します。
概要
最初のステップでは、Kubernetesに移動する非常に単純なオンプレミス・ドメインを作成します。サンプル・ドメインは、リフト・アンド・シフト・プロセスの開始点であり、1つのアプリケーション(ToDo List)と1つのデータ・ソースが含まれます。まず、データベースとWebLogic Serverドメインを構成します。次に、リフト・アンド・シフトで、ドメインをVerrazzanoを使用するKubernetesに移動します。このガイドには、オンプレミス・データベースへのアクセスに必要なネットワーキングの設定や、データベースをクラウドに移行する方法は含まれません。
必要なもの
-
MySQL Database 8.x - データベース・サーバー
-
WebLogic Server 12.2.1.4.0 - アプリケーション・サーバー。クイック・インストーラを除くすべてのWebLogic Serverインストーラがサポートされることに注意してください。
-
Maven - アプリケーションの構築
-
WebLogic Deploy Tooling (WDT) - v1.9.15以上。WebLogic Serverドメインのメタデータとの間で変換
-
WebLogic Image Tool (WIT) - v1.9.13以上。Dockerイメージの構築
最初のステップ
最初のステップでは、オンプレミスのWebLogic Serverドメインを表すサンプル・ドメインを作成します。
MySQLを使用したtododb
というデータベースの作成
-
Docker HubからMySQLイメージをダウンロードします。
$ docker pull mysql:latest
-
コンテナ・データベースを起動します(オプションで、データのボリュームをマウントします)。
$ export MYSQL_USER=<your-mysql-username> $ export MYSQL_PASSWORD=<your-mysql-password> $ export MYSQL_ROOT_PASSWORD=<your-mysql-rootpassword> $ docker run --name tododb \ -p 3306:3306 \ -e MYSQL_USER=$MYSQL_USER \ -e MYSQL_PASSWORD=$MYSQL_PASSWORD \ -e MYSQL_DATABASE=tododb \ -e MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD \ -d mysql:latest
-
MySQLクライアントを起動して、パスワード・アルゴリズムを
mysql_native_password
に変更します。- データベース・サーバーが実行中の場合は、データベースCLIクライアントを起動します。
$ docker exec \ -it tododb mysql \ -uroot \ -p
- パスワードを要求されたら、rootユーザーのパスワードを入力します。
- 接続後、MySQLプロンプトで
ALTER
コマンドを実行します。$ ALTER USER '<your-mysql-username>'@'%' identified with mysql_native_password by '<your-mysql-password>';
- データベース・サーバーが実行中の場合は、データベースCLIクライアントを起動します。
WebLogic Serverドメインの作成
-
WebLogic Server 12.2.1.4.0がインストールされていない場合は、ここでインストールします。
-
WebLogic Serverダウンロードから
GENERIC
インストーラを選択し、ドキュメントに記載されているインストール手順に従います。 -
次のドメイン制限に注意してください:
- サポートされるドメイン・タイプは、単一サーバーおよび単一クラスタの2つです。
- ドメインでは次を使用する必要があります:
AdminServerName
にデフォルト値AdminServer
。- 管理サーバーに対するWebLogic Serverのリスニング・ポート:
7001
。 - 管理対象サーバーに対するWebLogic Serverのリスニング・ポート:
8001
。 - これらはすべて標準のWebLogic Serverのデフォルト値です。
-
終了後にインストーラを保存します。Dockerイメージを構築する際に必要です。
-
コピー・コマンドを簡単にするには、WebLogic Server 12.2.1.4.0をインストールしたディレクトリを指す
ORACLE_HOME
の環境変数を定義します。たとえば:$ export ORACLE_HOME=$HOME/Oracle/Middleware/Oracle_Home
-
-
Oracle WebLogic Server構成ウィザードを使用して、
tododomain
というドメインを作成します。ノート: この例では、オンプレミスWebLogic ServerドメインがLinuxにあることを前提としています。
$ORACLE_HOME/oracle_common/common/bin/config.sh
を起動します。- 新しいドメインの作成を選択します。
<oracle home>/user_projects/domains/tododomain
というDomain Location
を指定し、「次」をクリックします。- 「Basic WebLogic Server Domain [wlserver]」テンプレートを選択し、「次」をクリックします。
- 管理者ユーザーのパスワードを入力して「次」をクリックします。
Domain Mode
およびJDK
のデフォルトを受け入れて「次」をクリックします。- 「管理サーバー」を選択し、「次」をクリックします。
- サーバー名が
AdminServer
であることを確認し、「次」をクリックします。 - 「作成」をクリックします。
- 完了したら、「次」、「終了」の順にクリックします。
-
新しく作成したドメインを起動するには、ドメインの起動を実行します。
$ $ORACLE_HOME/user_projects/domains/tododomain/bin/startWebLogic.sh
-
ブラウザを使用して新しく起動されたドメインのコンソール(たとえば、http://localhost:7001/console)にアクセスし、指定した管理者資格証明を使用してログインします。
データベースにアクセスするためのデータ・ソース構成の追加
WebLogic Server管理コンソールを使用して、ログインし、データ・ソース構成を追加してMySQLデータベースにアクセスします。データ・ソース構成では、ほとんどのフィールドにデフォルト値を受け入れることができますが、次のフィールドは、MySQLデータベースを作成したときに使用したアプリケーションとデータベース設定に一致させる必要があります。
-
コンソールの左ペインで、「サービス」を展開して「データ・ソース」を選択します。
-
「JDBCデータ・ソースのサマリー」ページで「新規」をクリックし、「汎用データ・ソース」を選択します。
-
「JDBCデータ・ソース」ページで次の情報を入力または選択します:
- 名前:
tododb
- JNDI名:
jdbc/ToDoDB
- データベースのタイプ:
MySQL
- 名前:
-
「次」をクリックし、さらに2回「次」をクリックします。
-
「新規JDBCデータ・ソースの作成」ページで、次の情報を入力します:
- データベース名:
tododb
- ホスト名:
localhost
- データベース・ポート:
3306
- データベース・ユーザー名:
<your-mysql-username>
- パスワード:
<your-mysql-password>
- パスワードの確認:
<your-mysql-password>
- データベース名:
-
「次」をクリックします。
-
「構成のテスト」を選択し、コンソールの
Messages
フィールドに「接続テストが成功しました。」と表示されていることを確認します。 -
「次」をクリックします。
-
「ターゲットの選択」ページで、
AdminServer
を選択します。 -
「終了」をクリックして、構成を完了します。
アプリケーションのビルドとデプロイ
-
Mavenを使用して、このプロジェクトをビルドし、
todo.war
を生成します。ノート: このリポジトリは、モデル作成フェーズでWDTによって無視される可能性があるため、
$ORACLE_HOME
の外部でクローニングするか、WARファイルを別の場所にコピーする必要があります。$ git clone https://github.com/verrazzano/examples.git $ cd examples/todo-list/ $ mvn clean package
-
WebLogic Server管理コンソールを使用して、ToDo Listアプリケーションをデプロイします。
- コンソールの左ペインで、「デプロイメント」を選択し、「インストール」をクリックします。
- ナビゲーション・リンクを使用するか、
todo.war
へのファイル・パス(通常は<repo>/todo-list/target
)を指定します。たとえば、$HOME
ディレクトリにサンプル・リポジトリをクローニングした場合、場所は$HOME/examples/examples/todo-list/target/todo.war
です。 - 「次」を2回クリックし、「終了」をクリックします。
ノート: 残りのステップでは、アプリケーション・コンテキストが
todo
であると想定しています。
データベースの初期化
アプリケーションがデプロイされてWebLogic Serverで実行された後、http://localhost:7001/todo/rest/items/init
RESTサービスにアクセスして、アプリケーションで使用されるデータベース表を作成します。アプリケーション表の作成に加えて、init
サービスは、4つのサンプル項目を表にロードします。
ここでエラーが表示される場合は、WebLogic Server管理コンソールの「ターゲットの選択」ページに戻り、AdminServer
をデータ・ソース・ターゲットとして選択したことを確認します。
アプリケーションへのアクセス
http://localhost:7001/todo/index.html
でアプリケーションにアクセスします。
- いくつかのエントリを追加または削除します。
- アプリケーションとデータベースの検証後、ローカルのWebLogic Serverドメインを停止できます。
リフト・アンド・シフトのステップ
次のステップでは、Verrazzanoを使用するKubernetesにサンプル・ドメインを移動します。
WDTモデルの作成
- まだダウンロードしていない場合は、GitHubからWebLogic Deploy Tooling (WDT)のv1.9.15以降をダウンロードします。
bin/discoverDomain.sh
にアクセスできるように、インストーラのweblogic-deploy.zip
ファイルを解凍します。- コピー・コマンドを簡単にするには、WebLogic Deploy Toolingをインストールしたディレクトリを指す
WDT_HOME
の環境変数を定義します。$ export WDT_HOME=/install/directory
たとえば、最新バージョンを取得するには:
$ curl -OL https://github.com/oracle/weblogic-deploy-tooling/releases/latest/download/weblogic-deploy.zip
$ unzip weblogic-deploy.zip
$ cd weblogic-deploy
$ export WDT_HOME=$(pwd)
アプリケーションおよびドメインの再利用可能なモデルを作成するには、WDTを使用してドメインのメタデータ・モデルを作成します。
- まず、生成されたスクリプトおよびモデルを保持する出力ディレクトリを作成します。
- その後、WDT
discoverDomain
を実行します。$ mkdir v8o $ $WDT_HOME/bin/discoverDomain.sh \ -oracle_home $ORACLE_HOME \ -domain_home /path/to/domain/dir \ -model_file ./v8o/wdt-model.yaml \ -archive_file ./v8o/wdt-archive.zip \ -target vz \ -output_dir v8o
次のファイルが./v8o
にあります:
create_k8s_secrets.sh
- このドメインに必要なKubernetesシークレットを適用するためのkubectl
コマンドを含むヘルパー・スクリプトvz-application.yaml
- Verrazzanoアプリケーション構成およびコンポーネント・ファイルvz_variable.properties
- WDTドメイン・モデルから抽出された一連のプロパティwdt-archive.zip
- ToDo ListアプリケーションWARファイルを含むWDTアーカイブ・ファイルwdt-model.yaml
- WebLogic ServerドメインのWDTモデル
アプリケーションへのアクセス・ステップをスキップし、ToDo Listアプリケーションがデプロイされたことを確認しなかった場合は、wdt-archive.zip
ファイル内にtodo.war
ファイルがあることを確認する必要があります。WARファイルがない場合は、WebLogic Serverでのアプリケーションのデプロイに問題が発生しており、ドメインでの追加のトラブルシューティングが必要になります。
Dockerイメージの作成
この時点では、Verrazzanoモデルは実際のモデルの単なるテンプレートです。WebLogic Image Toolでプレースホルダに入力するか、モデルを手動で編集してイメージ名とドメイン・ホーム・ディレクトリを設定できます。
- まだダウンロードしていない場合は、GitHubからWebLogic Image Tool (WIT)をダウンロードします。
bin/imagetool.sh
にアクセスできるように、インストーラのimagetool.zip
ファイルを解凍します。- コピー・コマンドを簡単にするには、WebLogic Image Toolをインストールしたディレクトリを指す
WIT_HOME
の環境変数を定義します。$ export WIT_HOME=/install/directory
たとえば、最新のWITツールを取得するには:
$ curl -OL https://github.com/oracle/weblogic-image-tool/releases/latest/download/imagetool.zip
$ unzip imagetool.zip
$ cd imagetool
$ export WIT_HOME=$(pwd)
KubernetesでWebLogic Serverドメインを実行するには、Dockerイメージが必要です。WITを使用してDockerイメージを作成するには、imagetool create
を実行します。WITはパッチとPSUをダウンロードしますが、まだインストーラをダウンロードしていません。それまでは、WebLogic ServerおよびJava Development Kitインストーラを手動でダウンロードし、その場所をimagetool cache addInstaller
コマンドに指定する必要があります。
# The directory created previously to hold the generated scripts and models.
$ cd v8o
$ $WIT_HOME/bin/imagetool.sh cache addInstaller \
--path /path/to/installer/jdk-8u231-linux-x64.tar.gz \
--type jdk \
--version 8u231
# The installer file name may be slightly different depending on
# which version of the 12.2.1.4.0 installer that you downloaded, slim or generic.
$ $WIT_HOME/bin/imagetool.sh cache addInstaller \
--path /path/to/installer/fmw_12.2.1.4.0_wls_Disk1_1of1.zip \
--type wls \
--version 12.2.1.4.0
$ $WIT_HOME/bin/imagetool.sh cache addInstaller \
--path /path/to/installer/weblogic-deploy.zip \
--type wdt \
--version latest
# Paths for the files in this command assume that you are running it from the
# v8o directory created during the `discoverDomain` step.
$ $WIT_HOME/bin/imagetool.sh create \
--tag your/repo/todo:1 \
--version 12.2.1.4.0 \
--jdkVersion 8u231 \
--wdtModel ./wdt-model.yaml \
--wdtArchive ./wdt-archive.zip \
--wdtVariables ./vz_variable.properties \
--resourceTemplates=./vz-application.yaml \
--wdtModelOnly
imagetool create
コマンドは、ローカルDockerイメージを作成し、ドメイン・ホームとイメージ名でVerrazzanoモデルを更新します。Docker CLIからdocker images
を使用して、create
コマンドで使用したタグについてDockerイメージを確認します。
すべてが正しく機能した場合は、VerrazzanoがKubernetesからイメージへのアクセスに使用するコンテナ・レジストリにイメージをプッシュします。この例のリポジトリとしてOracle Cloud Infrastructure Registry (OCIR)を使用できますが、Docker準拠のほとんどのレジストリが機能します。
vz-application.yaml
リソース・テンプレートの変数は、イメージ・ツール・ビルドの情報を使用して解決されます。
これを確認するには、v8o/vz-application.yaml
ファイルを参照して、image: {{{imageName}}}
値が指定された--tag
の値で設定されていることを確認します。
イメージをリポジトリにプッシュします。
ノート: イメージ名は、vz-application.yaml
ファイル内のtododomain-domain
コンポーネントのspec > workload > spec > image
にある名前と同じである必要があります。
$ docker push your/repo/todo:1
Verrazzanoへのデプロイ
アプリケーション・イメージの作成後、アプリケーションをVerrazzano環境にデプロイするにはいくつかのステップが必要です。
これには次のものがあります:
tododomain
ネームスペースの作成およびラベル付け。- ToDo Listアプリケーションに必要なシークレットの作成。
- MySQLインスタンスに必要なVerrazzanoコンポーネント(サービス、デプロイメント、ConfigMapなど)の
tododomain
ネームスペースでの作成。 vz-application.yaml
ファイルの更新。ToDo List ApplicationConfiguration内のVerrazzano MySQLコンポーネントを更新してKubernetesオブジェクトとしてデプロイできるようにします。- Verrazzano MySQLデプロイメントを使用し、(オプションで)WebLogic Server管理コンソールを公開するように
vz-application.yaml
ファイルを更新。 vz-application.yaml
ファイルの適用。
次のステップでは、Kubernetesクラスタがあり、そのクラスタにVerrazzanoがすでにインストールされていることを前提としています。
ネームスペースのラベル付け
tododomain
ネームスペースを作成し、WebLogic Server Kubernetes Operatorがそれを管理し、Istioに対して有効化できるようにラベルを追加します。
$ kubectl create namespace tododomain
$ kubectl label namespace tododomain verrazzano-managed=true istio-injection=enabled
必要なシークレットの作成
まだの場合は、create_k8s_secrets.sh
スクリプトを編集して実行し、Kubernetesシークレットを生成します。WDTは既存のドメインからパスワードを検出しません。シークレットの作成スクリプトを実行する前に、create_k8s_secrets.sh
を編集して、WebLogic Serverドメインおよびデータ・ソースのパスワードを設定する必要があります。このドメインには、入力する必要のあるパスワードがいくつかあります:
- 管理者資格証明
- ToDoデータベース資格証明
たとえば:
# Update <admin-user> and <admin-password> for weblogic-credentials
$ create_paired_k8s_secret weblogic-credentials <your-WLS-username> <your-WLS-password>
# Update <user> and <password> for tododomain-jdbc-tododb
$ create_paired_k8s_secret jdbc-tododb <your-mysql-username> <your-mysql-password>
次に、スクリプトを実行します:
$ sh ./create_k8s_secrets.sh
Verrazzanoは、作成したイメージをプルするための資格証明を必要とするため、もう1つシークレットを作成する必要があります。この資格証明の名前は、vz-application.yaml
ファイルで任意の名前に変更できますが、デフォルトはtododomain-registry-credentials
です。
名前をtododomain-registry-credentials
のままにしたと仮定すると、次のようなkubectl create secret
コマンドを実行する必要があります:
$ kubectl create secret docker-registry tododomain-registry-credentials \
--docker-server=phx.ocir.io \
--docker-email=your.name@example.com \
--docker-username=tenancy/username \
--docker-password='passwordForUsername' \
--namespace=tododomain
アプリケーション構成の更新
todo
アプリケーションの生成されたvz-application.yaml
ファイルを次のように更新します:
- クラスタ内MySQLサービスURL
jdbc:mysql://mysql.tododomain.svc.cluster.local:3306/tododb
を使用してデータベースにアクセスするようtododomain-configmap
コンポーネントを更新します。
wdt_jdbc.yaml: |
resources:
JDBCSystemResource:
'todo-ds':
JdbcResource:
JDBCDriverParams:
# This is the URL of the database used by the WebLogic Server application
URL: "jdbc:mysql://mysql.tododomain.svc.cluster.local:3306/tododb"
tododomain-appconf
ApplicationConfigurationを更新して、Verrazzano MySQLコンポーネントをKubernetesオブジェクトとしてデプロイできるようにします。
apiVersion: core.oam.dev/v1alpha2
kind: ApplicationConfiguration
metadata:
name: tododomain-appconf
namespace: tododomain
annotations:
version: v1.0.0
description: "tododomain application configuration"
spec:
components:
- componentName: tododomain-domain
traits:
- trait:
apiVersion: oam.verrazzano.io/v1alpha1
kind: MetricsTrait
spec:
scraper: verrazzano-system/vmi-system-prometheus-0
- trait:
apiVersion: oam.verrazzano.io/v1alpha1
kind: IngressTrait
spec:
rules:
- paths:
# application todo
- path: "/todo"
pathType: Prefix
- componentName: tododomain-configmap
- componentName: todo-mysql-service
- componentName: todo-mysql-deployment
- componentName: todo-mysql-configmap
ファイルvz-application-modified.yamlは、変更された vz-application.yamlファイルの例です。これら2つのサンプル・ファイルの違いを示します:
$ diff vz-application.yaml vz-application-modified.yaml
30a31,33
> - componentName: todo-mysql-service
> - componentName: todo-mysql-deployment
> - componentName: todo-mysql-configmap
102c105
< URL: "jdbc:mysql://localhost:3306/tododb"
---
> URL: "jdbc:mysql://mysql.tododomain.svc.cluster.local:3306/tododb"
MySQL用のVerrazzanoコンポーネントの作成
前述のように、本番環境をVerrazzanoに移行するには、データも移行する必要があります。データ移行はこのガイドの範囲外ではありますが、Verrazzano環境にアプリケーションとともにデプロイするMySQLインスタンスについて簡単に説明します。
このためには、まず、tododomain
ネームスペース内のmysql-oam.yamlファイルを適用して、MySQL用のVerrazzanoコンポーネントを作成する必要があります。次のステップでvz-application.yamlファイルを適用して、ToDo Listアプリケーションがデプロイされると、コンポーネントがKubernetesオブジェクトとしてデプロイされます。
-
mysql-oam.yamlファイルをダウンロードします。
-
次に、YAMLファイルを適用します:
$ kubectl apply -f mysql-oam.yaml
# Expected response
component.core.oam.dev/todo-mysql-service created
component.core.oam.dev/todo-mysql-deployment created
component.core.oam.dev/todo-mysql-configmap created
$ kubectl get components -ntododomain
# Expected response
todo-mysql-configmap ConfigMap 26s
todo-mysql-deployment Deployment 26s
todo-mysql-service Service 26s
ToDo ListアプリケーションおよびMySQLインスタンスをデプロイします。
最後に、kubectl apply
を実行して、VerrazzanoコンポーネントおよびVerrazzanoアプリケーション構成ファイルを適用してドメインを起動します。
$ kubectl apply -f vz-application.yaml
これにより、次のようになります:
- ToDo ListアプリケーションのアプリケーションComponentリソースを作成します。
- Verrazzanoコンポーネント・リソースをKubernetesオブジェクトとしてデプロイし、MySQLインスタンスを作成します。
- VerrazzanoクラスタでToDo Listアプリケーションのインスタンスを作成するアプリケーション構成リソースを作成します。
ToDo Listサンプル・アプリケーションの準備ができるまで待ちます。
$ kubectl wait pod \
--for=condition=Ready tododomain-adminserver \
-n tododomain
# Expected response
pod/tododomain-adminserver condition met
ポッドがRunning
状態であることを確認します:
$ kubectl get pod -n tododomain
# Sample output
NAME READY STATUS RESTARTS AGE
mysql-55bb4c4565-c8zf5 1/1 Running 0 8m
tododomain-adminserver 4/4 Running 0 5m
ブラウザからのアプリケーションへのアクセス
-
アプリケーション用に生成されたホスト名を取得します。
$ kubectl get gateways.networking.istio.io tododomain-tododomain-appconf-gw \ -n tododomain \ -o jsonpath={.spec.servers[0].hosts[0]} # Sample output tododomain-appconf.tododomain.11.22.33.44.nip.io
-
init
URLにアクセスしてデータベースを初期化します。https://tododomain-appconf.tododomain.11.22.33.44.nip.io/todo/rest/items/init
-
アプリケーションにアクセスします。
https://tododomain-appconf.tododomain.11.22.33.44.nip.io/todo
WebLogic Server管理コンソールにアクセスします
-
ポート転送を設定します。
$ kubectl port-forward pods/tododomain-adminserver 7001:7001 -n tododomain
ノート: Oracle Cloud Infrastructure Cloud Shellで
kubectl
を実行する場合、ポート転送を使用してWebLogic Server管理コンソールにアクセスするには、別のマシンでkubectl
を実行する必要があります。 -
ブラウザからWebLogic Server管理コンソールにアクセスします。
http://localhost:7001/console