Bob's Books

WebLogic、HelidonおよびCoherenceに基づいたサンプル・アプリケーション

始める前に

  • インストールの手順に従って、Verrazzanoをインストールします。

  • サンプル・イメージをダウンロードするには、まずライセンス契約に同意する必要があります。

    • ブラウザで、https://container-registry.oracle.com/に移動してサインインします。
    • example-bobbys-coherenceexample-bobbys-front-endexample-bobs-books-order-managerexample-roberts-coherenceおよびweblogicを検索します。
    • それぞれに対して、次を行います:
      • 結果の中でイメージ名を選択します。
      • ドロップダウン・メニューから、ご使用の言語を選択し、「続行」をクリックします。
      • 次に、ライセンス契約を読み、同意してください。

    ノート: Bob’s Booksサンプル・アプリケーションのデプロイメント・ファイルは、<VERRAZZANO_HOME>/examples/bobs-booksにあるVerrazzanoプロジェクトに含まれています(<VERRAZZANO_HOME>は、Verrazzanoプロジェクトのルートです)。

概要

Bob's Booksは、次の3つの主要部分で構成されています:

  • バックエンドの注文処理アプリケーション。これは、RESTサービスと非常に単純なJSP UIを備えたJava EEアプリケーションで、MySQLデータベースにデータを格納します。このアプリケーションはWebLogic Serverで実行されます。
  • フロントエンドのWebストアであるRobert's Books。これは一般の書籍販売者です。これは、Helidonマイクロサービスとして実装されます。Coherenceからブック・データを取得し、Coherenceキャッシュ・ストアを使用してオーダー・マネージャのデータを保持し、React Web UIを持ちます。
  • フロントエンドのWebストアであるBobby's Books。これは、児童書専門店です。これは、Helidonマイクロサービスとして実装されます。(異なる)Coherenceキャッシュ・ストアからブック・データを取得し、オーダー・マネージャと直接インタフェースし、JSF Web UIをWebLogic Server上で実行します。

このアプリケーションの詳細およびソース・コードについては、Verrazzanoの例を参照してください。

アプリケーションのデプロイ

  1. サンプルのネームスペースを作成し、ネームスペースがVerrazzanoによって管理されることを示すラベルを追加します。

     $ kubectl create namespace bobs-books
     $ kubectl label namespace bobs-books verrazzano-managed=true istio-injection=enabled
    

  2. docker-registryシークレットを作成し、レジストリからサンプル・イメージをプルできるようにします。

    $ kubectl create secret docker-registry bobs-books-repo-credentials \
            --docker-server=container-registry.oracle.com \
            --docker-username=YOUR_REGISTRY_USERNAME \
            --docker-password=YOUR_REGISTRY_PASSWORD \
            --docker-email=YOUR_REGISTRY_EMAIL \
            -n bobs-books
    

    YOUR_REGISTRY_USERNAMEYOUR_REGISTRY_PASSWORDおよびYOUR_REGISTRY_EMAILを、レジストリへのアクセスに使用する値に置き換えます。

  3. WebLogicドメインのシークレットを作成します:

      # Replace the values of the WLS_USERNAME and WLS_PASSWORD environment variables as appropriate.
      $ export WLS_USERNAME=<username>
      $ export WLS_PASSWORD=<password>
      $ kubectl create secret generic bobbys-front-end-weblogic-credentials \
          --from-literal=password=$WLS_PASSWORD \
          --from-literal=username=$WLS_USERNAME \
          -n bobs-books
    
      $ kubectl create secret generic bobs-bookstore-weblogic-credentials \
          --from-literal=password=$WLS_PASSWORD \
          --from-literal=username=$WLS_USERNAME \
          -n bobs-books
    
      $ kubectl create secret generic mysql-credentials \
          --from-literal=username=$WLS_USERNAME \
          --from-literal=password=$WLS_PASSWORD \
          --from-literal=url=jdbc:mysql://mysql.bobs-books.svc.cluster.local:3306/books \
          -n bobs-books
    

    サンプル・アプリケーションは、特定のシークレット名を使用するように事前構成されています。このアプリケーションのソース・コードについては、Verrazzanoの例を参照してください。ソース・コードで指定されているものとは異なるシークレット名を使用する場合は、対応するYAMLファイルを更新し、サンプル・アプリケーションのDockerイメージを再作成する必要があります。

  4. アプリケーションをデプロイするには、サンプル・リソースを適用します。

    $ kubectl apply -f https://raw.githubusercontent.com/verrazzano/verrazzano/v1.7.1/examples/bobs-books/bobs-books-comp.yaml -n bobs-books
    $ kubectl apply -f https://raw.githubusercontent.com/verrazzano/verrazzano/v1.7.1/examples/bobs-books/bobs-books-app.yaml -n bobs-books
    

  5. Bob’s Booksサンプル・アプリケーションのすべてのポッドの準備ができるまで待ちます。ポッドのリストおよび出力の検査によって進捗をモニターするか、kubectl waitコマンドを使用できます。

    成功するまで、kubectl waitコマンドを複数回繰り返す必要がある場合があります。WebLogic ServerおよびCoherenceポッドが作成されてReadyになるまで時間がかかる場合があります。

    $ kubectl get pods -n bobs-books
    
    # -or- #
    
    $ kubectl wait \
        --for=condition=Ready pods \
        --all -n bobs-books \
        --timeout=600s
    

  6. istio-ingressgatewayサービスのEXTERNAL_IPアドレスを取得します。

    $ ADDRESS=$(kubectl get service \
        -n istio-system istio-ingressgateway \
        -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
    $ echo $ADDRESS
    
    # Sample output
    11.22.33.44
    

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

    $ HOST=$(kubectl get gateways.networking.istio.io bobs-books-bobs-books-gw \
        -n bobs-books \
        -o jsonpath='{.spec.servers[0].hosts[0]}')
    $ echo $HOST
    
    # Sample output
    bobs-books.bobs-books.11.22.33.44.nip.io
    

  8. アプリケーションにアクセスします。ブラウザでアプリケーションにアクセスするには、次のいずれかを実行する必要があります:

    • オプション1: nip.ioを使用している場合は、生成されたホスト名を使用してアプリケーションにアクセスできます。たとえば:

      • Robert’s Books UI: https://bobs-books.bobs-books.11.22.33.44.nip.io/

      • Bobby’s Books UI: https://bobs-books.bobs-books.11.22.33.44.nip.io/bobbys-front-end/

      • Bob’sのオーダー・マネージャUI: https://bobs-books.bobs-books.11.22.33.44.nip.io/bobs-bookstore-order-manager/orders

    • オプション2: 一時的に、/etc/hostsファイル(MacまたはLinuxの場合)またはc:\Windows\System32\Drivers\etc\hostsファイル(Windows 10の場合)を変更して、アプリケーションで使用されるホストをゲートウェイに割り当てられた外部IPアドレスにマップするエントリ・マッピングを追加します。たとえば:

      11.22.33.44 bobs-books.example.com
      

      その後、ブラウザを使用してアプリケーションにアクセスできます:

      • Robert’s Books UI: https://bobs-books.example.com/

      • Bobby’s Books UI: https://bobs-books.example.com/bobbys-front-end/

      • Bob’sのオーダー・マネージャUI: https://bobs-books.example.com/bobs-bookstore-order-manager/orders

    • オプション3: または、独自のDNS名をロード・バランサの外部IPアドレスに指定します。この場合、アプリケーションのデプロイ前に、bobs-books-app.yamlファイルを編集して、アプリケーションのhostsセクション(your-roberts-books-host.your.domainなど)で適切な値を使用する必要があります。その後、ブラウザを使用してアプリケーションにアクセスできます:

      • Robert’s Books UI: https://<your-roberts-books-host.your.domain>/

      • Bobby’s Books UI: https://<your-bobbys-books-host.your.domain>/bobbys-front-end/

      • Bob’sのオーダー・マネージャUI: https://<your-bobs-orders-host.your.domain>/

WebLogic Server管理コンソールを使用したアプリケーションのアクセス

WebLogic Server管理コンソールを使用して、次のようにアプリケーションにアクセスします。

bobs-bookstoreへのアクセス

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

    $ kubectl port-forward pods/bobs-bookstore-adminserver 7001:7001 -n bobs-books
    

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

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

    http://localhost:7001/console
    

bobbys-front-endへのアクセス

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

    $ kubectl port-forward pods/bobbys-front-end-adminserver 7001:7001 -n bobs-books
    

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

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

    http://localhost:7001/console
    

デプロイされたアプリケーションの確認

  1. アプリケーション構成、ドメイン、Coherenceリソースおよびイングレス・トレイトがすべて存在することを確認します。

    $ kubectl get ApplicationConfiguration -n bobs-books
    $ kubectl get Domain -n bobs-books
    $ kubectl get Coherence -n bobs-books
    $ kubectl get IngressTrait -n bobs-books
    

  2. サービス・ポッドが正常に作成され、READY状態に移行していることを確認します。これには数分かかる場合があり、一部のサービスが終了して再起動する場合があります。

    $ kubectl get pods -n bobs-books
    
    # Sample output
    NAME                                                READY   STATUS    RESTARTS   AGE
    bobbys-helidon-stock-application-868b5965c8-dk2xb   3/3     Running   0          19h
    bobbys-coherence-0                                  2/2     Running   0          19h
    bobbys-front-end-adminserver                        3/3     Running   0          19h
    bobbys-front-end-managed-server1                    3/3     Running   0          19h
    bobs-bookstore-adminserver                          3/3     Running   0          19h
    bobs-bookstore-managed-server1                      3/3     Running   0          19h
    mysql-669665fb54-9m8wq                              2/2     Running   0          19h
    robert-helidon-96997fcd5-kzjkf                      3/3     Running   0          19h
    robert-helidon-96997fcd5-nlswm                      3/3     Running   0          19h
    roberts-coherence-0                                 2/2     Running   0          17h
    roberts-coherence-1                                 2/2     Running   0          17h
    

アプリケーションのアンデプロイ

  1. アプリケーションをアンデプロイするには、Bob’s Books OAMリソースを削除します。

    $ kubectl delete -f https://raw.githubusercontent.com/verrazzano/verrazzano/v1.7.1/examples/bobs-books/bobs-books-app.yaml -n bobs-books
    $ kubectl delete -f https://raw.githubusercontent.com/verrazzano/verrazzano/v1.7.1/examples/bobs-books/bobs-books-comp.yaml -n bobs-books
    

  2. アプリケーション・ポッドの終了後にネームスペースbobs-booksを削除します。WebLogicドメイン用に作成されたシークレットも削除されます。

    $ kubectl delete namespace bobs-books