Developing Java based microservices
ready for the world of containers
@davsclaus davsclaus
davsclaus.comClaus Ibsen
I was here in 2015
.. and talking about Apache Camel
Claus Ibsen• Principal Software Engineer
at Red Hat
• Apache Camel8 years working with Camel
• Author of Camel in Action books
@davsclaus davsclaus
davsclaus.com
?
?
OS Level Virtualization
Docker Orchestration
PaaS Platform on top of Kubernetes
Services and Tools forKubernetes and OpenShift
Kubernetes
Kubernetes
‣ Open Source orchestration platform for Docker containers
• Rewrite of Google’s internal framework “Borg”‣ Declarative specification of a desired state‣ Self-healing‣ Service discovery‣ Scheduling across hosts‣ Replication
Architecture
Key Concepts‣Nodes• Worker machine (physical or VM) running pods‣Pods
• Collection of one or more Docker containers‣Replication Controller
• Creates and takes care of Pods‣Services
• Network Proxy for a collection of Pods‣Labels
• Grouping and organization of Objects‣Namespaces
• Virtual clusters backend by same physical cluster
What is Kubernetes?
http://blog.kubernetes.io/2016/06/illustrated-childrens-guide-to-kubernetes.html
fabric8
‣ Tools and Services for value add to Kubernetes and OpenShift
• Management: console, logging, metrics, dashboards, …• Continuous Delivery Workflow• iPaaS: Camel route visualization, API registry, Messaging as
a Service, …• Tools: Kubernetes/OpenShift build integration, Kubernetes
component test support, CDI extensions• Quickstarts: Ready to use examples, also available as
Maven archetypes
Kubernetes Demo Time
Java Developer
?
Build a Camel Demo
Time
Hello Service
Hello ServiceClient
Hello Service
Hello Service
name=Claus
Hi $name I am $HOSTNAME
Client
Implementation
Client Hello Service
HTTP
ApacheTomcatSpring Boot
Implementation
Hello Service
Client Hello Service
HTTP
Implementation
Client Hello Service
HTTP
from timer to http
logfrom servlet transform
hello service
Hello Service
Client
Ready to run local
Client Hello Service
HTTP 8080
from timer to netty
logfrom servlet transform
hello service
How to build Docker Image?
Maven Project Docker Image
Docker Maven Plugin
Maven Project Docker Maven Plugin Docker Imagebuild
Docker Maven Plugin in pom.xml
Docker Maven Plugin in pom.xml
Build Docker Imagemvn clean install docker:build
Local Docker Repository
Hello Service
Client
Our Demo
Client Hello Service
HTTP 8080
from timer to http
logfrom servlet transform
hello service
Static vs Dynamic Platform
Client Hello Service
HTTP 8080
from timer to http
logfrom servlet transform
hello service
Hardcoded hostname and port
Dynamic Platform
Hello Service
HTTP 8080
Client
from timer to http
logfrom servlet transform
hello service
Kubernetes Service
Kubernetes Service• Network Connection to one or more Pods
• Unique static IP and port (lifetime of service)
Kubernetes Service
HTTP 8080
from timer to http
logfrom servlet transform
hello service
kube proxy
Kubernetes Master
enlisted on deployment
changes
pod
node
pod
node
Kubernetes Servicefrom user point of view
service ip:port
from timer to http
logfrom servlet transform
hello service
pod pod
Service defined in pom.xml
Hello Service
from servlet transform
hello serviceContainer Port =
Inside
Service Port = Outside
Using Kubernetes Service
Client
from timer to http
log
We want to use hello service
How do we do that?
Using Kubernetes Service
• Environment Variables
• Hostname
• Port
Client
from timer to http
log
Service Discovery using DNS is available in newer versions of Kubernetes.
Camel using service
• Use {{service:hello}} Client
from timer to http
log
Ready to run in Kubernetes
Client Hello Service
service:hello
from timer to netty
logfrom servlet transform
hello service
kube proxy
How to deploy to Kubernetes?
Maven Project
How to deploy to Kubernetes?
Maven Project fabric8 Maven Plugin
apply
Deploy - Hello Service
Hello Service
from servlet transform
hello service• mvn -Pf8-local-deploy
Deploy - Client
• mvn -Pf8-local-deploy Client
from timer to http
log
fabric8 Web Console
OpenShift CLI• oc get pods
You can also use CLI from docker &
kubernetes
OpenShift CLI• oc get services
OpenShift CLI• oc logs -f <pod name>
OpenShift CLI No they are not Camel routes,but networking routes.
• oc get routes
Scaling• Change replication controller replicas
Scaling• Service load balancing
Load balancing is random
Angry Pods
1st person shooter - Kill your pods
Zipkin
Distributed message tracing
Zipkin• camel-zipkin (coming in Camel 2.18)
• https://github.com/apache/camel/tree/master/examples/camel-example-zipkin
• kubernetes-zipkin
• https://github.com/fabric8io/kubernetes-zipkin
• https://github.com/fabric8io/kubeflix/blob/master/examples/loanbroker/readme.md
Links
• fabric8 • http://fabric8.io • https://blog.fabric8.io/
• Try kubernetes / fabric8 • http://fabric8.io/guide/getStarted/vagrant.html
@davsclaus davsclaus
davsclaus.com