IBM/Java-MicroProfile-on-Kubernetes

Name: Java-MicroProfile-on-Kubernetes

Owner: International Business Machines

Description: This application demonstrates the deployment of a Java based microservices application using Microprofile on Kubernetes Cluster. MicroProfile is a baseline platform definition that optimizes Enterprise Java for a microservices architecture and delivers application portability across multiple MicroProfile runtimes

Created: 2017-03-31 21:45:08.0

Updated: 2018-05-15 19:13:01.0

Pushed: 2018-05-15 19:12:59.0

Homepage: https://developer.ibm.com/code/patterns/deploy-microprofile-java-microservices-on-kubernetes

Size: 5924

Language: Shell

GitHub Committers

UserMost Recent Commit# Commits

Other Committers

UserEmailMost Recent Commit# Commits

README

Build Status

Deploy MicroProfile based Java microservices on Kubernetes.

Read this in other languages: ??????.

This code demonstrates the deployment of a Java based microservices application using MicroProfile and Microservice Builder on Kubernetes.

MicroProfile is a baseline platform definition that optimizes Enterprise Java for a microservices architecture and delivers application portability across multiple MicroProfile runtimes. Microservice Builder provides means to develop, test and deploy your microservices using a Java and MicroProfile based programming model and tools.

The Microservice Builder sample application is a web application for managing a conference and is based on a number of discrete microservices. The front end is written in Angular; the backing microservices are in Java. All run on WebSphere Liberty, in Docker containers managed by Kubernetes.

Flow

Included Components
Getting Started
Kubernetes

In order to follow this guide you'll need a Kubernetes cluster. If you do not have access to an existing Kubernetes cluster then follow the instructions (in the link) for one of the following:

Note: These instructions are tested on Kubernetes 1.7.3. Your mileage may vary if you use a version much lower of higher than this.

After installing (or setting up your access to) Kubernetes ensure that you can access it by running the following and confirming you get version responses for both the Client and the Server:

bectl version
nt Version: version.Info{Major:"1", Minor:"7", GitVersion:"v1.7.3", GitCommit:"17d7182a7ccbb167074be7a87f0a68bd00d58d97", GitTreeState:"clean", BuildDate:"2017-08-31T09:14:02Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
er Version: version.Info{Major:"1", Minor:"7", GitVersion:"v1.7.3", GitCommit:"17d7182a7ccbb167074be7a87f0a68bd00d58d97", GitTreeState:"clean", BuildDate:"2017-09-18T20:30:29Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
Helm

Some of the instructions utilize Helm to deploy applications. If you don't already have it you should Install Helm and then initialize Helm on your Kubernetes cluster:

lm init
M_HOME has been configured at /home/username/.helm.

er (the Helm server-side component) has been installed into your Kubernetes Cluster.
y Helming!
Steps
1. Install Microservice Builder add-ons

First, clone our repository.

clone https://github.com/IBM/Java-MicroProfile-on-Kubernetes.git
ava-MicroProfile-on-Kubernetes

Then, install the 2 add-ons:

Install Microservice Builder Fabric:

lm repo add mb http://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/wasdev/microservicebuilder/helm/
lm install --name fabric mb/fabric

Install ELK:

lm repo add mb-sample https://wasdev.github.io/sample.microservicebuilder.helm.elk/charts
lm install --name sample-elk mb-sample/sample-elk

It will take up to 20 minutes to install the Microservice Builder Add-ons on your Kubernetes Cluster. If you want to build the application yourself now would be a good time to do that. However for the sake of demonstration you can use the images that we've already built and uploaded to the journeycode docker repository.

Before you start deploying your application, make sure the Microservice Builder Add-ons are installed and running.

bectl get pods --show-all=true
                                    READY     STATUS      RESTARTS   AGE
ic-zipkin-4284087195-d6s1t          1/1       Running     0          11m
retrieval-deploy-gkr9n              0/1       Completed   0          11m  # Make sure this job is completed
na-dashboard-deploy-rd0q5           1/1       Running     0          11m
le-elk-sample-elk-461262821-rp1rl   3/3       Running     0          11m
et-generator-deploy-bj1jj           0/1       Completed   0          11m  # Make sure this job is completed
2. Optional Step - Deploy Istio

If you want to deploy and use Istio to control traffic between the microservices you can deploy it with the following command:

bectl create -f istio
space "istio-system" created
terrole "istio-pilot-istio-system" created
terrole "istio-initializer-istio-system" created
terrole "istio-mixer-istio-system" created


ializerconfiguration "istio-sidecar" created
3. Deploy Microservices

Now, deploy the microservices with the command:

bectl create -f manifests
istentvolume "cloudant-pv" created
istentvolumeclaim "cloudant-pv-claim" created
ice "cloudant-service" created
oyment "cloudant-db" created


Note: this will deploy all of the kubernetes manifests in the manifests/ directory. Take some time to explore their contents to get an idea of the resources being used to deploy and expose the app.

After you have created all the services and deployments, wait for 10 to 15 minutes. You can check the status of your deployment on Kubernetes UI. Run 'kubectl proxy' and go to URL 'http://127.0.0.1:8001/ui' to check when the application containers are ready.

Kubernetes Status Page

After a few minutes you should be able to access the application. Part of our deployment is a Kubernetes Ingress resource. If your Kubernetes cluster already has an ingress service such as IBM Cloud Private then you should be able to access the application with no further changes.

However if you are using minikube, or a Kubernetes cluster that does not have an ingress service you have one more step before you can access your cluster. On minikube you can do the following:

nikube addons enable ingress
ess was successfully enabled
nikube ip
168.99.100

With an Ingress controller enabled you can access the app via the IP provided by minikube above.

Now you can use the link http://[Public IP] to access your application on browser and use http://[Public IP]:30500 to access your Kibana for tracking the metrics.

Web application home page

Web-app Home Page

When you click on speaker name

Speaker Info

When you click on schedules link

Schedule Info

When you click on vote link

Vote Info

Kibana discover page

Kibana

Troubleshooting
References

Privacy Notice

Sample Kubernetes Yaml file that includes this package may be configured to track deployments to IBM Cloud and other Kubernetes platforms. The following information is sent to a Deployment Tracker service on each deployment:

This data is collected from the Kubernetes Job in the sample application's yaml file. This data is used by IBM to track metrics around deployments of sample applications to IBM Cloud to measure the usefulness of our examples so that we can continuously improve the content we offer to you. Only deployments of sample applications that include code to ping the Deployment Tracker service will be tracked.

Disabling Deployment Tracking

Please comment out/remove the Metric Kubernetes Job portion at the end of the 'manifests/deploy-cloudant.yaml' file.


This work is supported by the National Institutes of Health's National Center for Advancing Translational Sciences, Grant Number U24TR002306. This work is solely the responsibility of the creators and does not necessarily represent the official views of the National Institutes of Health.