2.6. odo を使用したマルチコンポーネントアプリケーションの作成

odo を使用すると、簡単かつ自動化された方法でマルチコンポーネントアプリケーションを作成し、変更し、そのコンポーネントをリンクすることができます。

この例では、マルチコンポーネントアプリケーション (シューティングゲーム) をデプロイする方法について説明します。アプリケーションはフロントエンド Node.js コンポーネントとバックエンド Java コンポーネントで構成されます。

前提条件

  • odo がインストールされている。
  • OpenShift Container Platform クラスターが実行中である。開発者は CodeReady Containers (CRC) を使用して、OpenShift Container Platform のローカルクラスターを迅速にデプロイできます。
  • Maven がインストールされている。

2.6.1. プロジェクトの作成

プロジェクトを作成し、別個の単一の単位で編成されるソースコード、テスト、ライブラリーを維持します。

手順

  1. OpenShift Container Platform クラスターにログインします。

    $ odo login -u developer -p developer
  2. プロジェクトを作成します。

    $ odo project create myproject
     ✓  Project 'myproject' is ready for use
     ✓  New project created and now using project : myproject

2.6.2. バックエンドコンポーネントのデプロイ

Java コンポーネントを作成するには、Java ビルダーイメージをインポートし、Java アプリケーションをダウンロードし、odo でソースコードをクラスターにプッシュします。

手順

  1. openjdk18 をクラスターにインポートします。

    $ oc import-image openjdk18 \
    --from=registry.access.redhat.com/redhat-openjdk-18/openjdk18-openshift --confirm
  2. イメージに builder のタグを付け、イメージが odo でアクセスできるようにします。

    $ oc annotate istag/openjdk18:latest tags=builder
  3. odo catalog list components を実行し、作成されたイメージを表示します。

    $ odo catalog list components
    Odo Supported OpenShift Components:
    NAME          PROJECT       TAGS
    nodejs        openshift     10,8,8-RHOAR,latest
    openjdk18     myproject     latest
  4. コンポーネントの新規ディレクトリーを作成します。

    $ mkdir my_components $$ cd my_components
  5. バックエンドアプリケーションのサンプルをダウンロードします。

    $ git clone https://github.com/openshift-evangelists/Wild-West-Backend backend
  6. ディレクトリーをバックエンドソースディレクトリーに切り替え、そのディレクトリーに正しいファイルが含まれることを確認します。

    $ cd backend
    $ ls
    debug.sh  pom.xml  src
  7. バックエンドのソースファイルを Maven でビルドし、JAR ファイルを作成します。

    $ mvn package
    ...
    [INFO] --------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] --------------------------------------
    [INFO] Total time: 2.635 s
    [INFO] Finished at: 2019-09-30T16:11:11-04:00
    [INFO] Final Memory: 30M/91M
    [INFO] --------------------------------------
  8. backend という Java コンポーネントタイプのコンポーネント設定を作成します。

    $ odo create openjdk18 backend --binary target/wildwest-1.0.jar
     ✓  Validating component [1ms]
     Please use `odo push` command to create the component with source deployed

    設定ファイルの config.yaml は、デプロイ用のコンポーネントについての情報が含まれるバックエンドコンポーネントのローカルディレクトリーに置かれます。

  9. 以下を使用して config.yaml ファイルでバックエンドコンポーネントの設定内容を確認します。

    $ odo config view
    COMPONENT SETTINGS
    ------------------------------------------------
    PARAMETER         CURRENT_VALUE
    Type              openjdk18
    Application       app
    Project           myproject
    SourceType        binary
    Ref
    SourceLocation    target/wildwest-1.0.jar
    Ports             8080/TCP,8443/TCP,8778/TCP
    Name              backend
    MinMemory
    MaxMemory
    DebugPort
    Ignore
    MinCPU
    MaxCPU
  10. コンポーネントを OpenShift Container Platform クラスターにプッシュします。

    $ odo push
    Validation
     ✓  Checking component [6ms]
    
    Configuration changes
     ✓  Initializing component
     ✓  Creating component [124ms]
    
    Pushing to component backend of type binary
     ✓  Checking files for pushing [1ms]
     ✓  Waiting for component to start [48s]
     ✓  Syncing files to the component [811ms]
     ✓  Building component [3s]

    odo push を使用すると、OpenShift Container Platform はバックエンドコンポーネントをホストするためのコンテナーを作成し、そのコンテナーを OpenShift Container Platform クラスターで実行されている Pod にデプロイし、 backend コンポーネントを起動します。

  11. 以下を検証します。

    • odo でのアクションのステータス

      odo log -f
      2019-09-30 20:14:19.738  INFO 444 --- [           main] c.o.wildwest.WildWestApplication         : Starting WildWestApplication v1.0 onbackend-app-1-9tnhc with PID 444 (/deployments/wildwest-1.0.jar started by jboss in /deployments)
    • バックエンドコンポーネントのステータス

      $ odo list
      APP     NAME        TYPE          SOURCE                             STATE
      app     backend     openjdk18     file://target/wildwest-1.0.jar     Pushed

2.6.3. フロントエンドコンポーネントのデプロイ

フロントエンドコンポーネントを作成およびデプロイするには、Node.js アプリケーションをダウンロードし、ソースコードを odoでクラスターにプッシュします。

手順

  1. フロントエンドアプリケーションのサンプルをダウンロードします。

    $ git clone https://github.com/openshift/nodejs-ex
  2. 現在のディレクトリーをフロントエンドディレクトリーに切り替えます。

    $ cd <directory-name>
  3. フロントエンドが Node.js アプリケーションであることを確認するために、ディレクトリーの内容を一覧表示します。

    $ ls
    assets  bin  index.html  kwww-frontend.iml  package.json  package-lock.json  playfield.png  README.md  server.js
    注記

    フロントエンドコンポーネントはインタプリター型言語で記述され (Node.js)、ビルドされる必要はありません。

  4. frontendという名前の Node.js コンポーネントタイプのコンポーネント設定を作成します。

    $ odo create nodejs frontend
     ✓  Validating component [5ms]
    Please use `odo push` command to create the component with source deployed
  5. コンポーネントを実行中のコンテナーにプッシュします。

    $ odo push
    Validation
     ✓  Checking component [8ms]
    
    Configuration changes
     ✓  Initializing component
     ✓  Creating component [83ms]
    
    Pushing to component frontend of type local
     ✓  Checking files for pushing [2ms]
     ✓  Waiting for component to start [45s]
     ✓  Syncing files to the component [3s]
     ✓  Building component [18s]
     ✓  Changes successfully pushed to component

2.6.4. 2 つのコンポーネントのリンク

クラスターで実行されるコンポーネントは、対話するために接続される必要があります。OpenShift Container Platform は、リンクの仕組みを提供し、プログラムからクライアントへの通信バインディングを公開します。

手順

  1. クラスターで実行されるすべてのコンポーネントの一覧を表示します。

    $ odo list
    APP     NAME         TYPE          SOURCE                             STATE
    app     backend      openjdk18     file://target/wildwest-1.0.jar     Pushed
    app     frontend     nodejs        file://./                          Pushed
  2. 現在のフロントエンドコンポーネントをバックエンドにリンクします。

    $ odo link backend --port 8080
     ✓  Component backend has been successfully linked from the component frontend
    
    Following environment variables were added to frontend component:
    - COMPONENT_BACKEND_HOST
    - COMPONENT_BACKEND_PORT

    バックエンドコンポーネントの設定情報がフロントエンドコンポーネントに追加され、フロントエンドコンポーネントが再起動します。

2.6.5. コンポーネントの公開

手順

  1. アプリケーションの外部 URL を作成します。

    $ cd frontend
    $ odo url create frontend --port 8080
     ✓  URL frontend created for component: frontend
    
    To create URL on the OpenShift  cluster, use `odo push`
  2. 変更を適用します。

    $ odo push
    Validation
     ✓  Checking component [21ms]
    
    Configuration changes
     ✓  Retrieving component data [35ms]
     ✓  Applying configuration [29ms]
    
    Applying URL changes
     ✓  URL frontend: http://frontend-app-myproject.192.168.42.79.nip.io created
    
    Pushing to component frontend of type local
     ✓  Checking file changes for pushing [1ms]
     ✓  No file changes detected, skipping build. Use the '-f' flag to force the build.
  3. ブラウザーで URL を開き、アプリケーションを表示します。
注記

アプリケーションに OpenShift Container Platform namespace にアクセスし、アクティブな Pod を削除するのに有効なサービスアカウントのパーミッションが必要な場合、バックエンドコンポーネントから odo log を参照すると以下のエラーが発生する場合があります。

Message: Forbidden!Configured service account doesn’t have access.Service account may have been revoked

このエラーを解決するには、サービスアカウントロールのパーミッションを追加します。

$ oc policy add-role-to-group view system:serviceaccounts -n <project>
$ oc policy add-role-to-group edit system:serviceaccounts -n <project>

これは実稼働クラスターでは実行しないでください。

2.6.6. 実行中のアプリケーションの変更

手順

  1. ローカルディレクトリーをフロントエンドディレクトリーに切り替えます。

    $ cd ~/frontend
  2. 以下のコマンドを実行して、ファイルシステムで変更を監視します。

    $ odo watch
  3. index.html ファイルを編集して、ゲームの表示される名前を変更します。

    注記

    odo が変更を認識するまでに若干の遅延が発生する場合があります。

    odo は変更をフロントエンドコンポーネントにプッシュし、そのステータスをターミナルに印刷します。

    File /root/frontend/index.html changed
    File  changed
    Pushing files...
     ✓  Waiting for component to start
     ✓  Copying files to component
     ✓  Building component
  4. Web ブラウザーでアプリケーションページを更新します。これで新しい名前が表示されます。

2.6.7. アプリケーションの削除

重要

アプリケーションを削除すると、アプリケーションに関連付けられたすべてのコンポーネントが削除されます。

手順

  1. 現在のプロジェクトのアプリケーションを一覧表示します。

    $ odo app list
        The project '<project_name>' has the following applications:
        NAME
        app
  2. アプリケーションに関連付けられたコンポーネントを一覧表示します。これらのコンポーネントはアプリケーションと共に削除されます。

    $ odo component list
        APP     NAME                      TYPE       SOURCE        STATE
        app     nodejs-nodejs-ex-elyf     nodejs     file://./     Pushed
  3. アプリケーションを削除します。

    $ odo app delete <application_name>
        ? Are you sure you want to delete the application: <application_name> from project: <project_name>
  4. Y で削除を確定します。-f フラグを使用すると、確認プロンプトを非表示にできます。