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
BusinessWorks Applikation erstellen
Projekt Konfigurieren
Schema Konfigurieren
Neuen Rest Service Erstellen
Service Konfigurieren
Neuer Prozess mit leerer Get und Put Methode
Implementieren der Post Methode
Starten des Services im Designer
Aufruf von Swagger im Browser
Testen des Services
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
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.
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’
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
Starte Container
Ö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 minikubeNachdem 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:30724Mit der zurückgegebenen URL können wir die Swagger WEBUI aufrufen (http://192.168.99.100:30724/swagger)