<<HOME <TechDocs

Alexander von Boguszewski

TIBCO BWCE auf Kubernetes


In diesem Blogpost werden wir die TIBCO BWCE Applikation entwickeln und das Docker Image auf einem lokalen Kubernetes Cluster (Minikube) starten.

Was ist Kubernetes?

Kubernetes (K8s, griechisch für “Steuermann” oder “Pilot”) ist ein Open-Source-System zur Automatisierung von Deployment, Skalierung und Management von containerisierten Anwendungen. Es wurde ursprünglich von Google erstellt und ist meiner Meinung nach das das verbreitetste Tool zur Container Orchestrierung. Einen einfachen Einstieg um K8 auf einem Laptop zu nutzen ist Minikube. Minikube betreibt einen Kubernetes-Cluster mit einem einzigen Knoten in einer VM (z.B. VirtualBox). Eine gute Einführung zu Minikube findet sich zu [https://kubernetes.io/docs/getting-started-guides/minikube/]

Entwicklung einer Demo Anwendung

Zuerst müssen wir natürlich mit dem Designer einen kleinen Prozess bauen, den wir in K8 ausrollen können. Nachdem wir den TIBCO BWCE Designer gestartet haben erstellen wir eine neue BusinessWorks Applikation

1. BusinessWorks Applikation im Kontextmenü des Designers

BusinessWorks Applikation erstellen

2. Projektname Calculator angeben und Create Applikation Module auswählen

Projekt Konfigurieren

3. Neues Datenschema anlegen

Schema Konfigurieren

4. Create Rest Service im angelegten Prozess auswählen

Neuen Rest Service Erstellen

4. Configure Rest Service Implementation

Service Konfigurieren

6. Neuer Prozess mit leerer Get und Put Methode

Neuer Prozess mit leerer Get und Put Methode

7. Einfachen Service zur Addition aller Werte einer Liste Implementieren

Implementieren der Post Methode

8. Run as BusinessWorks Application

Starten des Services im Designer

9. Test Application mit Swagger

Aufruf von Swagger im Browser

10. Aufruf des Add Services mit Swagger

Testen des Services

11. Konfiguration des HTTP Connectors

Bei der Konfiguration des HTTP Endpoints müssen wir the 0.0.0.0 anstatt 127.0.0.1, bwz. die Variablen BW.HOST.NAME und BW.CLOUD.PORT setzen

12. Export des EAR Files

Build der Applikation

Docker Image

Für das gerade gebaute EAR File benötigen wir noch die Laufzeitumgebung. TIBCO stellt unter (GITHub)[https://github.com/TIBCOSoftware/bwce-docker] einen entsprechenden Container bereit.

13. Export des bwce-docker Github Projekts

Download Docker Project

Da in dem Container die BWZW Laufzeitumgebung fehlt, müssen wir uns diese (bwce_cf.zip) von http://edelivery.tibco.com herunterladen (Konto erforderlich). Die Datei bwce_cf.zip kopieren wir in das ausgecheckte GITHUb Projekt nach ‘Resources/BWCE-Runtime’

14. BWCE RUNTIME

BWCE Runtime kopieren

Ich hatte einige Probleme mit dem com.tibco.bwce.profile.resolver.Resolver, daher habe ich die start.sh und setup.sh anpassen müssen.

#!/bin/bash
#start.sh
#Set ENV Variables
export APPDIR=${BWCE_HOME}
export MALLOC_ARENA_MAX=2
export MALLOC_MMAP_THRESHOLD_=1024
export MALLOC_TRIM_THRESHOLD_=1024
export MALLOC_MMAP_MAX_=65536

export BW_KEYSTORE_PATH=/resources/addons/certs

#ADD THIS
export JAVA_HOME=$BWCE_HOME/tibco.home/tibcojre64/1.8.0
#setup.sh
STATUS=$?
if [ $STATUS == "1" ]; then
    echo "ERROR: Failed to setup BWCE runtime. See logs for more details."
    exit 1
fi
exec bash $BWCE_HOME/tibco.home/bw*/*/bin/startBWAppNode.sh


setup.sh anpassen
#$JAVA_HOME/bin/java -cp `echo $BWCE_HOME/tibco.home/bw*/*/system/shared/com.tibco.bwce.profile.resolver_*.jar`:`echo $BWCE_HOME/tibco.home/bw*/*/system/shared/com.tibco.tpcl.com.fasterxml.jackson_*`/*:`echo $BWCE_HOME/tibco.home/bw*/*/system/shared/com.tibco.bw.tpcl.org.codehaus.jettison_*`/*:$BWCE_HOME:$JAVA_HOME/lib -DBWCE_APP_NAME=$bwBundleAppName com.tibco.bwce.profile.resolver.Resolver


checkJAVAHOME()
{
		# COMMENT THIS
		#if [[ ${JAVA_HOME}  ]]; then
 		#	print_Debug $JAVA_HOME
 		#else
 			export JAVA_HOME=$BWCE_HOME/tibco.home/tibcojre64/1.8.0
 		#fi
}

Anschließend können wir das Image mit dem mitgelieferten Script bauen.

$ ./createDockerImage.sh resources/bwce-runtime/bwce-runtime-2.3.2.zip 
Tag is set to bwce:latest
Sending build context to Docker daemon  400.2MB
Step 1/5 : FROM debian:jessie-slim
 ---> d086c1dfff1f
Step 2/5 : MAINTAINER TIBCO Software Inc.
 ---> Using cache
 ---> ecf2e3eaf860
Step 3/5 : ADD . /
 ---> 73a54a288b9b
Step 4/5 : RUN chmod 755 /scripts/*.sh && apt-get update && apt-get --no-install-recommends -y install unzip ssh net-tools && apt-get clean && rm -rf /var/lib/apt/lists/*
 ---> Running in c5c10c15b9f9
Get:1 http://security.debian.org jessie/updates InRelease [63.1 kB]
....
Processing triggers for libc-bin (2.19-18+deb8u10) ...
Processing triggers for systemd (215-17+deb8u7) ...
 ---> 0c0deccccc63
Removing intermediate container c5c10c15b9f9
Step 5/5 : ENTRYPOINT /scripts/start.sh
 ---> Running in ae9754bae67b
 ---> 6e0530148b24
Removing intermediate container ae9754bae67b
Successfully built 6e0530148b24
Successfully tagged bwce:latest
$
$
$ cd calculator/
$ vi Dockerfile

FROM bwce:latest
MAINTAINER Alexander von Boguszewski
ADD Calculator_1.0.0.ear /
EXPOSE 8080
EXPOSE 8090
EXPOSE 7777

$ ls
Calculator_1.0.0.ear	Dockerfile
$
$
$ docker build -t calculator:v1 .
Sending build context to Docker daemon  15.36kB
Step 1/6 : FROM bwce:latest
 ---> 6e0530148b24
Step 2/6 : MAINTAINER Alexander von Boguszewski
 ---> Running in 1ee07480f95c
 ---> 4c9dbfbaf1b4
Removing intermediate container 1ee07480f95c
Step 3/6 : ADD Calculator_1.0.0.ear /
 ---> 4b957635177a
Step 4/6 : EXPOSE 8080
 ---> Running in 1d528b8fc69f
 ---> 6e1c63d40da2
Removing intermediate container 1d528b8fc69f
Step 5/6 : EXPOSE 8090
 ---> Running in ea2f951e20ec
 ---> d820efa49b2b
Removing intermediate container ea2f951e20ec
Step 6/6 : EXPOSE 7777
 ---> Running in 554c515e4c77
 ---> d3ca020299a0
Removing intermediate container 554c515e4c77
Successfully built d3ca020299a0
Successfully tagged calculator:v1
$
$ docker run -P calculator 
15. docker run -P calculator

Starte Container

16. docker ps und öffene http://localhost:32816/swagger/

Öffne Swagger

Installation Minikube

Ursprünglich wollte ich VMWare Fusion als Laufzeitumgebung verwenden, aber auch nach langen probieren ist mir das so nicht gelungen. Daher habe ich schlussendlich Virtual Box werwendet, was out of the Box funktioniert hat

brew cask install minikube

Nachdem wir Minikube installiert haben, können wir es starten, indem wir minikube start starten. Wenn wir wollen, können wir mit minikube Dashboard das K8 Dashboard zu starten.

$ minikube start
Starting local Kubernetes v1.8.0 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.

In einem zweiten Terminal können wir dann unsere Anwendung zu K8 hinzufügen

$
$
$ kubectl run bwcecalculator-node --image=calculator:v1 --port=8080
deployment "bwcecalculator-node" created

$
$ kubectl get deployments
NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
bwce-node             1         1         1            0           1d
bwcecalculator-node   1         1         1            0           <invalid>

$
$
$ kubectl get pods
NAME                                   READY     STATUS             RESTARTS   AGE
bwce-node-7474788dcf-qwjrn             0/1       ImagePullBackOff   0          1d
bwcecalculator-node-8548dfdf57-rshnw   0/1       ImagePullBackOff   0          20s
$
$
$ kubectl expose deployment bwcecalculator-node --type=LoadBalancer service "bwcecalculator-node" exposed
$
$ minikube service --url bwcecalculator-node
Waiting, endpoint for service is not ready yet...
.....

$minikube service --url helloworldbwce-node
http://192.168.0.100:30724

Mit der zurückgegebenen URL können wir die Swagger WEBUI aufrufen (http://192.168.99.100:30724/swagger)