リフト・アンド・シフト・ガイド

WebLogic ServerドメインをVerrazzanoに移動するためのガイド

このガイドでは、オンプレミスのWebLogic Serverドメインを、Verrazzanoを使用してKubernetesを実行するクラウド環境に移動(リフト・アンド・シフト)する方法について説明します。

概要

最初のステップでは、Kubernetesに移動する非常に単純なオンプレミス・ドメインを作成します。サンプル・ドメインは、リフト・アンド・シフト・プロセスの開始点であり、1つのアプリケーション(ToDo List)と1つのデータ・ソースが含まれます。まず、データベースとWebLogic Serverドメインを構成します。次に、リフト・アンド・シフトで、ドメインをVerrazzanoを使用するKubernetesに移動します。このガイドには、オンプレミス・データベースへのアクセスに必要なネットワーキングの設定や、データベースをクラウドに移行する方法は含まれません。

必要なもの

  • Gitコマンドライン・ツールとGitHubへのアクセス

  • 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というデータベースの作成

  1. Docker HubからMySQLイメージをダウンロードします。

    $ docker pull mysql:latest
    
  2. コンテナ・データベースを起動します(オプションで、データのボリュームをマウントします)。

    $ 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
    
  3. 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>';
      

WebLogic Serverドメインの作成

  1. 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
      
  2. 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であることを確認し、「次」をクリックします。
    • 「作成」をクリックします。
    • 完了したら、「次」「終了」の順にクリックします。
  3. 新しく作成したドメインを起動するには、ドメインの起動を実行します。

     $ $ORACLE_HOME/user_projects/domains/tododomain/bin/startWebLogic.sh
    
  4. ブラウザを使用して新しく起動されたドメインのコンソール(たとえば、http://localhost:7001/console)にアクセスし、指定した管理者資格証明を使用してログインします。

データベースにアクセスするためのデータ・ソース構成の追加

WebLogic Server管理コンソールを使用して、ログインし、データ・ソース構成を追加してMySQLデータベースにアクセスします。データ・ソース構成では、ほとんどのフィールドにデフォルト値を受け入れることができますが、次のフィールドは、MySQLデータベースを作成したときに使用したアプリケーションとデータベース設定に一致させる必要があります。

  1. コンソールの左ペインで、「サービス」を展開して「データ・ソース」を選択します。

  2. 「JDBCデータ・ソースのサマリー」ページで「新規」をクリックし、「汎用データ・ソース」を選択します。

  3. 「JDBCデータ・ソース」ページで次の情報を入力または選択します:

    • 名前: tododb
    • JNDI名: jdbc/ToDoDB
    • データベースのタイプ: MySQL
  4. 「次」をクリックし、さらに2回「次」をクリックします。

  5. 「新規JDBCデータ・ソースの作成」ページで、次の情報を入力します:

    • データベース名: tododb
    • ホスト名: localhost
    • データベース・ポート: 3306
    • データベース・ユーザー名: <your-mysql-username>
    • パスワード: <your-mysql-password>
    • パスワードの確認: <your-mysql-password>
  6. 「次」をクリックします。

  7. 「構成のテスト」を選択し、コンソールのMessagesフィールドに「接続テストが成功しました。」と表示されていることを確認します。

    接続テスト

  8. 「次」をクリックします。

  9. 「ターゲットの選択」ページで、AdminServerを選択します。

  10. 「終了」をクリックして、構成を完了します。

アプリケーションのビルドとデプロイ

  1. Mavenを使用して、このプロジェクトをビルドし、todo.warを生成します。

    ノート: このリポジトリは、モデル作成フェーズでWDTによって無視される可能性があるため、$ORACLE_HOMEの外部でクローニングするか、WARファイルを別の場所にコピーする必要があります。

     $ git clone https://github.com/verrazzano/examples.git
     $ cd examples/todo-list/
     $ mvn clean package
    
  2. 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でアプリケーションにアクセスします。

ToDoList

  • いくつかのエントリを追加または削除します。
  • アプリケーションとデータベースの検証後、ローカルの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環境にデプロイするにはいくつかのステップが必要です。

これには次のものがあります:

  1. tododomainネームスペースの作成およびラベル付け。
  2. ToDo Listアプリケーションに必要なシークレットの作成。
  3. MySQLインスタンスに必要なVerrazzanoコンポーネント(サービス、デプロイメント、ConfigMapなど)のtododomainネームスペースでの作成。
  4. vz-application.yamlファイルの更新。ToDo List ApplicationConfiguration内のVerrazzano MySQLコンポーネントを更新してKubernetesオブジェクトとしてデプロイできるようにします。
  5. Verrazzano MySQLデプロイメントを使用し、(オプションで)WebLogic Server管理コンソールを公開するようにvz-application.yamlファイルを更新。
  6. 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

ブラウザからのアプリケーションへのアクセス

  1. アプリケーション用に生成されたホスト名を取得します。

    $ 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
    
  2. init URLにアクセスしてデータベースを初期化します。

    https://tododomain-appconf.tododomain.11.22.33.44.nip.io/todo/rest/items/init
    
  3. アプリケーションにアクセスします。

    https://tododomain-appconf.tododomain.11.22.33.44.nip.io/todo
    

WebLogic Server管理コンソールにアクセスします

  1. ポート転送を設定します。

    $ kubectl port-forward pods/tododomain-adminserver 7001:7001 -n tododomain
    

    ノート: Oracle Cloud Infrastructure Cloud Shellでkubectlを実行する場合、ポート転送を使用してWebLogic Server管理コンソールにアクセスするには、別のマシンでkubectlを実行する必要があります。

  2. ブラウザからWebLogic Server管理コンソールにアクセスします。

    http://localhost:7001/console