Quickstart Guide
In this guide, we will be using odo to create a to-do list application, with the following:
- ReactJS for the frontend
- Java Spring Boot for the backend
- PostgreSQL to store all persistent data
At the end of the guide, you will be able to list, add and delete to-do items from the web browser.
Prerequisites
- Have the odo binary installed.
- A Kubernetes cluster set up with a ingress controller, operator lifecycle manager and (optional) service binding operator.
- Or a OpenShift cluster set up with the (optional) service binding operator
Clone the quickstart guide
Clone the quickstart repo from GitHub:
git clone https://github.com/odo-devfiles/odo-quickstart
cd odo-quickstart
Create a project
We will create a project named quickstart
on the cluster to keep all quickstart-related activities separate from rest of the cluster:
odo project create quickstart
Create the frontend Node.JS component
Our frontend component is a React application that communicates with the backend component.
We will use the catalog command to list all available components and find nodejs
:
odo catalog list components
Example output of odo catalog list components
:
Odo Devfile Components:
NAME DESCRIPTION REGISTRY
nodejs Stack with Node.js 14 DefaultDevfileRegistry
nodejs-angular Stack with Angular 12 DefaultDevfileRegistry
nodejs-nextjs Stack with Next.js 11 DefaultDevfileRegistry
nodejs-nuxtjs Stack with Nuxt.js 2 DefaultDevfileRegistry
...
Pick nodejs
to create the frontend component:
cd frontend
odo create nodejs frontend
Create a URL in order to access the component in the browser:
odo url create --port 3000 --host <CLUSTER-HOSTNAME>
Minikube users: Use minikube ip
to find out the hostname and then use <MINIKUBE-HOSTNAME>.nip.io
for --host
.
Push the component to the cluster:
odo push
The URL will be listed in the odo push
output, or can be found in odo url list
.
Browse the site and try it out! Note that you will not be able to add, remove or list the to-dos yet, as we have not linked the frontend and the backend components yet.
Create the backend Java component
The backend application is a Java Spring Boot based REST API which will list, insert and delete to-dos from the database.
Find java-springboot
in the catalog:
odo catalog list components
Example output of odo catalog list components
:
Odo Devfile Components:
NAME DESCRIPTION REGISTRY
java-quarkus Quarkus with Java DefaultDevfileRegistry
java-springboot Spring Boot® using Java DefaultDevfileRegistry
java-vertx Upstream Vert.x using Java DefaultDevfileRegistry
...
Let's create the component below:
cd ../backend
odo create java-springboot backend
odo url create --port 8080 --host <CLUSTER-HOSTNAME>
odo push
Note, you will not be able to access http://<YOUR-URL>/api/v1/todos
yet until we link the backend component to the database service.
Create the Postgres service
Use odo catalog list services
to list all available operators.
By default, Operator Lifecycle Manager (OLM) includes no Operators and they must be installed via Operator Hub
Install the Postgres Operator on the cluster:
kubectl create -f https://operatorhub.io/install/postgresql.yaml
Find postgresql
in the catalog:
odo catalog list services
Example output of odo catalog list services
:
Services available through Operators
NAME CRDs
postgresoperator.v5.0.3 PostgresCluster
If you don't see the PostgreSQL Operator listed yet, it may still be installing. Check out our Operator troubleshooting guide for more information.
Create the service usng the provided postgrescluster.yaml
file from CrunchyData's Postgres guide:
odo service create --from-file ../postgrescluster.yaml
The service from postgrescluster.yaml
should now be added to your devfile.yaml
, do a push to create the database on the cluster:
odo push
Link the backend component and the service
Now we will link the the backend component (Java API) to the service (Postgres).
First, see if the service has been deployed:
odo service list
NAME MANAGED BY ODO STATE AGE
PostgresCluster/hippo Yes (backend) Pushed 3m42s
Link the backend component with the above service:
odo link PostgresCluster/hippo
Push the changes and odo
will link the service to the component:
odo push
Now your service is linked to the backend component!
Link the frontend and backend components
For our last step, we will now link the backend Java component (which also uses the Postgres service) and the frontend Node.JS component.
This will allow both to communicate with each other in order to store persistent data.
Change to the frontend
component directory and link it to the backend:
cd ../frontend
odo link backend
Push the changes:
odo push
We're done! Now it's time to test your new multi-component and service application.
Testing your application
Frontend Node.JS component
Find out what URL is being used by the frontend:
odo url list
Found the following URLs for component frontend
NAME STATE URL PORT SECURE KIND
http-3000 Pushed http://<URL-OUTPUT> 3000 false ingress
Visit the link and type in some to-dos!
Backend Java component
Let's see if each to-do is being stored in the backend api and database.
Find out what URL is being used by the backend:
odo url list
Found the following URLs for component backend
NAME STATE URL PORT SECURE KIND
8080-tcp Pushed http://<URL-OUTPUT> 8080 false ingress
When you curl
or view the URL on your browser, you'll now see the list of your to-dos:
curl http://<URL-OUTPUT>/api/v1/todos
[{"id":1,"description":"hello"},{"id":2,"description":"world"}]
Further reading
Want to learn what else odo
can do? Check out the Tutorials on the sidebar.