Tutorial

Deploying Acme Air microservices application on Red Hat OpenShift Container Platform

Learn how to deploy a sample flight booking application on the OpenShift platform, build images, and make updates

By

Pravin D'silva

Introduction

Acme Air is a full-fledged sample application for a fictitious airline called Acme Air which handles flight bookings with thousands of entries in its database. The implementation can support running on a variety of runtime platforms including virtual machines (VMs), Red Hat® OpenShift®, Docker containers, IBM Cloud®, and other Kubernetes environments. This tutorial shows you how to deploy the application on Red Hat OpenShift Container Platform on IBM Power Systems™ and to build your own images and perform updates on a running deployment.

The project consists of five components as shown in Figure 1. The front-end and deployment scripts are in the Main Service project.

Figure 1. Major components of Acme Air

img1

Prerequisites

You need to make sure that the following prerequisites are fulfilled before deploying the sample Acme Air application.

Estimated time

The approximate time to deploy the sample Acme Air application and make updates to the images is around 30 minutes.

Deploy the application

Perform the following steps to deploy the application on OpenShift on an IBM Power Systems server.

  1. Clone the https://github.com/ocp-power-demos/acmeair-mainservice-java repository and run the deployToOpenshift.sh script. The script does not require any input parameters.

    The GitHub repositories for acme air in the ocp-power-demos organization are a fork of https://github.com/blueperf

    git clone https://github.com/ocp-power-demos/acmeair-mainservice-java
    cd acmeair-mainservice-java
    ./scripts/deployToOpenshift.sh
    

    After successful completion, the output as shown in Figure 2 is displayed.

    Figure 2. The namespace and URL information are provided at the end of the deployment
    img2

  2. Run the following command to check the status of the pods. Notice that the pods are in the Running state.

    $ oc get pods
    
    NAME                                      READY   STATUS    RESTARTS   AGE
    acmeair-authservice-58459f88c9-bdmt6      1/1     Running   0          2m50s
    acmeair-booking-db-66d696dfd4-5lw7k       1/1     Running   0          2m50s
    acmeair-bookingservice-7fdd8789c4-6h28l   1/1     Running   0          2m50s
    acmeair-customer-db-6f4d998ffb-qfb9w      1/1     Running   0          2m50s
    acmeair-customerservice-fffd899d5-27jb7   1/1     Running   0          2m50s
    acmeair-flight-db-54684fb648-sdvsl        1/1     Running   0          2m50s
    acmeair-flightservice-5566cc7d79-vnqgx    1/1     Running   0          2m50s
    acmeair-mainservice-7f846794d5-5nmk4      1/1     Running   0          2m50s
    
  3. To access the application, open the URL provided in the output of the script in a browser. Click the Configure the Acme Air environment link to load the database and start using the application.

    Figure 3. Acme Air homepage for Version 1.0
    img3

Build your own images for Acme Air

Each repository for Acme Air is present in https://github.com/ocp-power-demos organization. You can make updates to the application across the five components and can deploy seamlessly without uninstalling the application.

Code updates and image creation

To demonstrate, we will make a version change to the front end of the application dashboard. After an update is performed, the change will be reflected on the browser without having to uninstall the application.

  1. Fork the https://github.com/ocp-power-demos repository to your GitHub account to start creating changes. Create a new branch on the acmeair-mainservice-java repository. Because this is a version update, we call this branch version-update.

    git clone https://github.com/<fork-repository-account>/acmeair-mainservice-java
    cd acmeair-mainservice-java
    git checkout -b version-update
    
  2. Update the code in the Java™ web application.

    As a small update, change the version of the application from Version 1.0 to Version 1.1. Update the HTML code under acmeair-mainservice-java/src/main/webapp/.

    Note: There is a separate HTML file for each page of the application under the webapp directory.

    Figure 4. Header section of the HTML file contains the title image and caption of the Acme Air web application
    img4

  3. Update the deployment YAML file (deploy-acmeair-mainservice-java.yaml) in the manifests-openshift directory of the source code to reflect the version of the new image for future deployments. Update the quay.io username with the account registered to you. The tag used here is 1.1 to relate to our new version 1.1.

    Figure 5. An example of the image name in the deploy-acmeair-mainservice-java.yaml deployment manifest
    img5

  4. As the images will be built using Travis CI, you need to authorize Travis CI to push images to our Quay.io account. To do this, create a new robot account in Quay.io and add the credentials to Travis CI. To create a new robot account, go to the Robot Account section in your Quay.io account and add a name and description and click Create robot account.

    Figure 6. Creating a robot account
    img6

  5. Notice that the credentials for the robot account are provided in the Robot Token section. The username and token can be shared by multiple repositories that are owned by a user or organization.

    Figure 7. Token generated after creating a new robot account
    img7

  6. Create a new empty public repository in Quay.io with the name of the image. To create a repository in the Quay.io UI, click the + (plus) icon at the upper-right side of the header on any Quay.io page and click New Repository.

    Figure 8. Selecting the option to create a new repository
    img8

    Figure 9. Window to create a new repository
    img9

  7. Select the newly created repository (in this example, acmeair-mainservice-java) under REPOSITORY NAME and click Settings.

    Figure 10. Selecting the new repository
    img10

  8. In the User and Robot Permissions section, add the robot token with Write permissions.

    Figure 11. User and Robot permissions on the Repository settings page
    img11

  9. Go to travis-ci.org, navigate to your Travis CI account settings and enable the project under the Repositories section. Repositories in travis-ci.org are disabled by default.

    Figure 12. The repositories section in user account settings
    img12

  10. To populate the environment variables in travis-ci.org, click Settings next to the project name. Add two environment variables, ROBOT_TOKEN and ROBOT_USER and set the values from step 5. The names of the environment variables should match the variable names given in the .travis.yml file.

    Figure 13. Environment variables for robot user and token
    img13

  11. Update the .travis.yml file in the repository source code. IMAGE_PREFIX must contain the name of your Quay.io repository and the ACME_VERSION is the image tag, which is 1.1.

    The .travis.yml file specifies the tasks for Travis CI to perform. The robot user and token information will be picked up directly from the environment variables set in the travis-ci.org repository settings.

    Figure 14. Acme Air build configuration in the .travis.yml file
    img14

  12. Push the local changes to remote. After successfully pushing the code, the Travis CI job will begin, and a new version of the image will be generated in Quay.io.

    Figure 15. Green check mark indicating that the job is successful
    img15

Perform a rolling update

Each deployment for Acme Air has a rolling update strategy. You may update fields for RollingUpdate during deployment with the required values.

StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
  1. Run the following command to perform the rolling update:

    $ oc set image deployments/acmeair-mainservice acmeair-mainservice-java=quay.io/<quay.io account>/acmeair-mainservice-java:1.1 --record
    
    deployment.apps/acmeair-mainservice image updated
    
  2. Track the status of the rolling update.

    $ oc rollout status deployment acmeair-mainservice
    
    deployment "acmeair-mainservice" successfully rolled out
    
  3. Open the Acme Air URL provided in Figure 2 in a browser. Note that the version has changed to 1.1.

    Figure 16. Acme Air home page with the updated version 1.1
    img16

  4. Notice that a new pod for mainservice is created for the newly updated deployment. The new image will also be reflected in the deployment.

    $ oc get pods
    
    NAME                                      READY   STATUS    RESTARTS   AGE
    acmeair-authservice-58459f88c9-qdxjd      1/1     Running   0          18h
    acmeair-booking-db-66d696dfd4-ngb4x       1/1     Running   0          18h
    acmeair-bookingservice-7fdd8789c4-wh52r   1/1     Running   0          18h
    acmeair-customer-db-6f4d998ffb-2grwv      1/1     Running   0          18h
    acmeair-customerservice-fffd899d5-s95dj   1/1     Running   0          18h
    acmeair-flight-db-54684fb648-mn6zk        1/1     Running   0          18h
    acmeair-flightservice-5566cc7d79-gjnrv    1/1     Running   0          18h
    acmeair-mainservice-657594bdb4-hgtgf      1/1     Running   0          64m
    

Summary

You can perform similar steps to build images for all the five projects as required. Making updates and deploying this sample application can help you to discover and understand the different features of OpenShift on IBM Power Systems servers. You can also perform performance benchmark tests, change the update strategy, and add in your own set of features to the application.