2.6. odo を使用したマルチコンポーネントアプリケーションの作成
odo を使用すると、簡単かつ自動化された方法でマルチコンポーネントアプリケーションを作成し、変更し、そのコンポーネントをリンクすることができます。
この例では、マルチコンポーネントアプリケーション (シューティングゲーム) をデプロイする方法について説明します。アプリケーションはフロントエンド Node.js コンポーネントとバックエンド Java コンポーネントで構成されます。
2.6.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
-
odoがインストールされている。 - OpenShift Container Platform クラスターが実行中である。開発者は CodeReady Containers (CRC) を使用して、OpenShift Container Platform のローカルクラスターを迅速にデプロイできます。
- Maven がインストールされている。
2.6.2. プロジェクトの作成 リンクのコピーリンクがクリップボードにコピーされました!
プロジェクトを作成し、別個の単一の単位で編成されるソースコード、テスト、ライブラリーを維持します。
手順
OpenShift Container Platform クラスターにログインします。
$ odo login -u developer -p developerプロジェクトを作成します。
$ odo project create myproject ✓ Project 'myproject' is ready for use ✓ New project created and now using project : myproject
2.6.3. バックエンドコンポーネントのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
Java コンポーネントを作成するには、Java ビルダーイメージをインポートし、Java アプリケーションをダウンロードし、odo でソースコードをクラスターにプッシュします。
手順
openjdk18をクラスターにインポートします。$ oc import-image openjdk18 \ --from=registry.access.redhat.com/redhat-openjdk-18/openjdk18-openshift --confirmイメージに
builderのタグを付け、イメージが odo でアクセスできるようにします。$ oc annotate istag/openjdk18:latest tags=builderodo catalog list componentsを実行し、作成されたイメージを表示します。$ odo catalog list components Odo Supported OpenShift Components: NAME PROJECT TAGS nodejs openshift 10,8,8-RHOAR,latest openjdk18 myproject latestコンポーネントの新規ディレクトリーを作成します。
$ mkdir my_components $$ cd my_componentsバックエンドアプリケーションのサンプルをダウンロードします。
$ git clone https://github.com/openshift-evangelists/Wild-West-Backend backendディレクトリーをバックエンドソースディレクトリーに切り替え、そのディレクトリーに正しいファイルが含まれることを確認します。
$ cd backend $ ls debug.sh pom.xml srcバックエンドのソースファイルを 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] --------------------------------------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は、デプロイ用のコンポーネントについての情報が含まれるバックエンドコンポーネントのローカルディレクトリーに置かれます。以下を使用して
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コンポーネントを 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コンポーネントを起動します。以下を検証します。
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.4. フロントエンドコンポーネントのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
フロントエンドコンポーネントを作成およびデプロイするには、Node.js アプリケーションをダウンロードし、ソースコードを odoでクラスターにプッシュします。
手順
フロントエンドアプリケーションのサンプルをダウンロードします。
$ git clone https://github.com/openshift/nodejs-ex現在のディレクトリーをフロントエンドディレクトリーに切り替えます。
$ cd <directory-name>フロントエンドが Node.js アプリケーションであることを確認するために、ディレクトリーの内容を一覧表示します。
$ ls assets bin index.html kwww-frontend.iml package.json package-lock.json playfield.png README.md server.js注記フロントエンドコンポーネントはインタプリター型言語で記述され (Node.js)、ビルドされる必要はありません。
frontendという名前の Node.js コンポーネントタイプのコンポーネント設定を作成します。$ odo create nodejs frontend ✓ Validating component [5ms] Please use `odo push` command to create the component with source deployedコンポーネントを実行中のコンテナーにプッシュします。
$ 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.5. 2 つのコンポーネントのリンク リンクのコピーリンクがクリップボードにコピーされました!
クラスターで実行されるコンポーネントは、対話するために接続される必要があります。OpenShift Container Platform は、リンクの仕組みを提供し、プログラムからクライアントへの通信バインディングを公開します。
手順
クラスターで実行されるすべてのコンポーネントの一覧を表示します。
$ odo list APP NAME TYPE SOURCE STATE app backend openjdk18 file://target/wildwest-1.0.jar Pushed app frontend nodejs file://./ Pushed現在のフロントエンドコンポーネントをバックエンドにリンクします。
$ 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.6. コンポーネントの公開 リンクのコピーリンクがクリップボードにコピーされました!
手順
アプリケーションの外部 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`変更を適用します。
$ 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.- ブラウザーで 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.7. 実行中のアプリケーションの変更 リンクのコピーリンクがクリップボードにコピーされました!
手順
ローカルディレクトリーをフロントエンドディレクトリーに切り替えます。
$ cd ~/frontend以下のコマンドを実行して、ファイルシステムで変更を監視します。
$ odo watchindex.htmlファイルを編集して、ゲームの表示される名前を変更します。注記odo が変更を認識するまでに若干の遅延が発生する場合があります。
odo は変更をフロントエンドコンポーネントにプッシュし、そのステータスをターミナルに印刷します。
File /root/frontend/index.html changed File changed Pushing files... ✓ Waiting for component to start ✓ Copying files to component ✓ Building component- Web ブラウザーでアプリケーションページを更新します。これで新しい名前が表示されます。
2.6.8. アプリケーションの削除 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションを削除すると、アプリケーションに関連付けられたすべてのコンポーネントが削除されます。
手順
現在のプロジェクトのアプリケーションを一覧表示します。
$ odo app list The project '<project_name>' has the following applications: NAME appアプリケーションに関連付けられたコンポーネントを一覧表示します。これらのコンポーネントはアプリケーションと共に削除されます。
$ odo component list APP NAME TYPE SOURCE STATE app nodejs-nodejs-ex-elyf nodejs file://./ Pushedアプリケーションを削除します。
$ odo app delete <application_name> ? Are you sure you want to delete the application: <application_name> from project: <project_name>-
Yで削除を確定します。-fフラグを使用すると、確認プロンプトを非表示にできます。