Creating a multicomponent application with odo
This example describes how to deploy a multicomponent application - a shooter game. The application consists of a front-end Node.js component and a back-end Java component.
Prerequisites
odo
is installed.You have a running cluster. Developers can use CodeReady Containers (CRC) to deploy a local cluster quickly.
Maven is installed.
Create a project to keep your source code, tests, and libraries organized in a separate single unit.
Procedure
Log in to an OKD cluster:
Create a project:
$ odo project create myproject
Example output
✓ Project 'myproject' is ready for use
✓ New project created and now using project : myproject
Deploying the back-end component
To create a Java component, import the Java builder image, download the Java application and push the source code to your cluster with odo
.
Procedure
Import
openjdk18
into the cluster:$ oc import-image openjdk18 \
--from=registry.access.redhat.com/redhat-openjdk-18/openjdk18-openshift --confirm
Tag the image as
builder
to make it accessible for odo:$ oc annotate istag/openjdk18:latest tags=builder
Run
odo catalog list components
to see the created image:$ odo catalog list components
Example output
Odo Devfile Components:
NAME DESCRIPTION REGISTRY
java-maven Upstream Maven and OpenJDK 11 DefaultDevfileRegistry
java-openliberty Open Liberty microservice in Java DefaultDevfileRegistry
java-quarkus Upstream Quarkus with Java+GraalVM DefaultDevfileRegistry
java-springboot Spring Boot® using Java DefaultDevfileRegistry
nodejs Stack with NodeJS 12 DefaultDevfileRegistry
Odo OpenShift Components:
NAME PROJECT TAGS SUPPORTED
java openshift 11,8,latest YES
dotnet openshift 2.1,3.1,latest NO
golang openshift 1.13.4-ubi7,1.13.4-ubi8,latest NO
httpd openshift 2.4-el7,2.4-el8,latest NO
nginx openshift 1.14-el7,1.14-el8,1.16-el7,1.16-el8,latest NO
nodejs openshift 10-ubi7,10-ubi8,12-ubi7,12-ubi8,latest NO
perl openshift 5.26-el7,5.26-ubi8,5.30-el7,latest NO
php openshift 7.2-ubi7,7.2-ubi8,7.3-ubi7,7.3-ubi8,latest NO
python openshift 2.7-ubi7,2.7-ubi8,3.6-ubi7,3.6-ubi8,3.8-ubi7,3.8-ubi8,latest NO
ruby openshift 2.5-ubi7,2.5-ubi8,2.6-ubi7,2.6-ubi8,2.7-ubi7,latest NO
wildfly openshift 10.0,10.1,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,8.1,9.0,latest NO
Create a directory for your components:
$ mkdir my_components && cd my_components
Download the example back-end application:
$ git clone https://github.com/openshift-evangelists/Wild-West-Backend backend
Change to the back-end source directory:
$ cd backend
Check that you have the correct files in the directory:
$ ls
Example output
debug.sh pom.xml src
Build the back-end source files with Maven to create a JAR file:
$ mvn package
Example output
...
[INFO] --------------------------------------
[INFO] BUILD SUCCESS
[INFO] --------------------------------------
[INFO] Finished at: 2019-09-30T16:11:11-04:00
[INFO] Final Memory: 30M/91M
[INFO] --------------------------------------
Create a component configuration of Java component-type named
backend
:Example output
✓ Validating component [1ms]
Please use `odo push` command to create the component with source deployed
Now the configuration file
config.yaml
is in the local directory of the back-end component that contains information about the component for deployment.-
$ odo config view
Example output
Push the component to the OKD cluster.
$ odo push
Example output
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]
Using
odo push
, OKD creates a container to host the back-end component, deploys the container into a pod running on the OKD cluster, and starts thebackend
component.Validate:
The status of the action in odo:
$ odo log -f
Example output
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)
The status of the back-end component:
$ odo list
Example output
APP NAME TYPE SOURCE STATE
app backend openjdk18 file://target/wildwest-1.0.jar Pushed
To create and deploy a front-end component, download the Node.js application and push the source code to your cluster with odo
.
Procedure
Download the example front-end application:
$ git clone https://github.com/openshift/nodejs-ex frontend
Change the current directory to the front-end directory:
$ cd frontend
List the contents of the directory to see that the front end is a Node.js application.
$ ls
Example output
README.md openshift server.js views
helm package.json tests
Create a component configuration of Node.js component-type named
frontend
:$ odo create --s2i nodejs frontend
Example output
✓ Validating component [5ms]
Please use `odo push` command to create the component with source deployed
Push the component to a running container.
$ odo push
Example output
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
Linking both components
Components running on the cluster need to be connected to interact. OKD provides linking mechanisms to publish communication bindings from a program to its clients.
Procedure
Link the current front-end component to the back end:
Example output
✓ Component backend has been successfully linked from the component frontend
Following environment variables were added to frontend component:
- COMPONENT_BACKEND_HOST
- COMPONENT_BACKEND_PORT
Procedure
Navigate to the
frontend
directory:$ cd frontend
Create an external URL for the application:
$ odo url create frontend --port 8080
Example output
✓ URL frontend created for component: frontend
To create URL on the OpenShift cluster, use `odo push`
Apply the changes:
$ odo push
Example output
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.
Open the URL in a browser to view the application.
Modifying the running application
Procedure
Change the local directory to the front-end directory:
$ cd frontend
Monitor the changes on the file system using:
$ odo watch
Edit the
index.html
file to change the displayed name for the game.odo pushes the changes to the front-end component and prints its status to the terminal:
File /root/frontend/index.html changed
File changed
Pushing files...
✓ Waiting for component to start
✓ Copying files to component
✓ Building component
Refresh the application page in the web browser. The new name is now displayed.
Use the odo app delete
command to delete your application.
Procedure
List the applications in the current project:
$ odo app list
Example output
The project '<project_name>' has the following applications:
NAME
app
List the components associated with the applications. These components will be deleted with the application:
$ odo component list
Example output
APP NAME TYPE SOURCE STATE
app nodejs-nodejs-ex-elyf nodejs file://./ Pushed
Delete the application:
Example output