An implementation of the Acme Air Main Service for Java/Liberty. The main service primarily consists of the presentation layer (web pages) that interact with the other services.
This implementation can support running on a variety of runtime platforms including standalone bare metal system, Virtual Machines, docker containers, IBM Cloud, IBM Cloud Private, and other Kubernetes environments.
- Instructions for setting up and building the codebase
- Instructions for driving load to the app after it has been deployed
All of these examples assume you have the acmeair-mainservice-java, acmeair-authservice-java, acmeair-bookingservice-java, acmeair-customerservice-java, and acmeair-flightservice-java directories, (and possibly others) on your docker machine in the same directory. It also assumes all applications have been built with maven.
Prereq: Install Docker, docker-compose, and start Docker daemon on your local machine
- cd acmeair-mainservice-java
- Create docker network
- docker network create --driver bridge my-net
-
Build/Start Containers. This will build all the micro-services, mongo db instances, and an nginx proxy.
- docker-compose --pull build
- NETWORK=my-net docker-compose up
-
Go to http://docker_machine_ip/acmeair
-
Go to the Configuration Page and Load the Database or do the following:
curl http://docker_machine_ip/booking/loader/load curl http://docker_machine_ip/flight/loader/load curl http://docker_machine_ip/customer/loader/load?numCustomers=10000
This doc assumes Openshift is installed and configured, and internal image registry is available and its default-route is exposed.
-
Log in with oc
Example
oc login https://api.your.clusterhost.com:6443 -u ocpadmin -p password
-
Create new project
oc new-project acmeair
-
Run the deploy script. This will build the code, build the conatainers, push the containers, and setup the deployments for all 5 services.
cd acmeair-mainservice-java/scripts ./buildAndDeployToOpenshift.sh
Add podman as the last argument if using podman.
./buildAndDeployToOpenshift.sh podman
-
Go to the Configuration Page and Load the Database or do the following:
curl http://acmeair.apps.your.clusterhost.com/booking/loader/load curl http://acmeair.apps.your.clusterhost.com/flight/loader/load curl http://acmeair.apps.your.clusterhost.com/customer/loader/load?numCustomers=10000
- Create new project: oc new-project app-metrics
- On the Openshift console under "Operators", click "Operator Hub" and install the following operators to your individual project.
- Install "Grafana Operator"
- Install "Prometheus Operator"
- Run ./setupOpenshiftMetrics.sh project_name app_metrics_project_name
- Example: ./setupOpenshiftMetrics.sh acmeair app-metrics
- Visit the Grafana URL in the "Networking" > "Routes" section and click to open the pre-loaded dashboard.
- On the Openshift console, navigate to your acmeair project
- The following environment variables are already setup in each acmeair deployment for your ease of use.
- JAEGER_AGENT_HOST - jaeger-all-in-one-inmemory-agent
- JAEGER_AGENT_PORT - 6832
- JAEGER_ENDPOINT - http://jaeger-all-in-one-inmemory-collector:14268/api/traces
- Under "Operators", click "Operator Hub" and install the "Community Jaeger Operator" to your individual project.
- Click "Installed Operators" and for the newly installed operator create a new Jaeger instance.
- Visit the Jaeger URL in the "Networking" > "Routes" section and load test the application to see some traces.
To get more data, you can optionally enable access logs and tracing or switch the logging format to json for each service by updating the following env variables.
- name: LOGGING_FORMAT
value: 'json'
- name: ACCESS_LOGGING_ENABLED
value: 'true'
- name: TRACE_SPEC
value: 'com.acmeair*=all'
- Prereq: Install Docker, docker-compose, and start Docker daemon on your local machine
- Prereq: Install and configure Minikube, and install kubectl
- minikube docker-env
- eval $(minikube docker-env)
- minikube addons enable ingress
- cd acmeair-mainservice-java/scripts
- Build and Deploy Services ./buildAndDeployToMinikube.sh
- Wait a couple minutes and go to http://kubernetes_ip/acmeair
- Go to the Configuration Page and Load the Database
There is also a sample manifest file for deployment of the Acmeair application in a Istio service mesh, with all services and deployments required to run the application, including the gateway and virtual services definition. The required Mongo databases are also deployed as pods/services. You need to define the docker images to be used and inject the sidecars, either automatically or manually (with kubectl kube-inject command).