2.6. odo を使用したマルチコンポーネントアプリケーションの作成
odo
を使用すると、簡単かつ自動化された方法でマルチコンポーネントアプリケーションを作成し、変更し、そのコンポーネントをリンクすることができます。
この例では、マルチコンポーネントアプリケーション (シューティングゲーム) をデプロイする方法について説明します。アプリケーションはフロントエンド Node.js コンポーネントとバックエンド Java コンポーネントで構成されます。
前提条件
-
odo
がインストールされている。 - OpenShift Container Platform クラスターが実行中である。開発者は CodeReady Containers (CRC) を使用して、OpenShift Container Platform のローカルクラスターを迅速にデプロイできます。
- Maven がインストールされている。
2.6.1. プロジェクトの作成
プロジェクトを作成し、別個の単一の単位で編成されるソースコード、テスト、ライブラリーを維持します。
手順
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.2. バックエンドコンポーネントのデプロイ
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=builder
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
コンポーネントの新規ディレクトリーを作成します。
$ 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.3. フロントエンドコンポーネントのデプロイ
フロントエンドコンポーネントを作成およびデプロイするには、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.4. 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.5. コンポーネントの公開
手順
アプリケーションの外部 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.6. 実行中のアプリケーションの変更
手順
ローカルディレクトリーをフロントエンドディレクトリーに切り替えます。
$ cd ~/frontend
以下のコマンドを実行して、ファイルシステムで変更を監視します。
$ odo watch
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
- Web ブラウザーでアプリケーションページを更新します。これで新しい名前が表示されます。
2.6.7. アプリケーションの削除
アプリケーションを削除すると、アプリケーションに関連付けられたすべてのコンポーネントが削除されます。
手順
現在のプロジェクトのアプリケーションを一覧表示します。
$ 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
フラグを使用すると、確認プロンプトを非表示にできます。