APACHECON North America Sept. 9-12, 2019
From a cluster to the CloudFrom a cluster to the Cloud
Jean-Frederic Clere
Tomcat
@jfclere
Jean-Frederic Clere
Tomcat
@jfclere
TM
219/09/19
AgendaAgenda
Who I am
A cluster:
Session replication and application.
The cloud:
Looking at the different cloud providers
KUBEPing and DNSPing
Modify the tomcat cluster
Allow a dynamic list of nodes
Only TCP. (8888 port exported via deployment.yml)
Operator and S2I
Demos
What next? Questions / Suggestions
TM
319/09/19
Who am I?Who am I?Who am I?Who am I?
Jean-Frederic Clere
● Red Hat
● Years writing JAVA code and server software
● Tomcat committer since 2001
● Doing OpenSource since 1999
● Cyclist/Runner etc
● Lived 15 years in Spain (Barcelona)
● Now in Neuchâtel (CH)
TM
419/09/19
Session replication in a clusterSession replication in a clusterSession replication in a clusterSession replication in a cluster
HTTP/1.1
No transaction
No persistent connection
Web App:
Using cookies to carry session ID
Store information in the session:
Shopping cart etc.
Multi nodes and dynamic
Route request to right node
Replicate information
TM
519/09/19
A clusterA cluster
! Power
COL 1 2 3 4 5 6 7 8 1 2 3 6 25 50 8012
100
10
Ether 10/100
Load balancer
HTTPD
mod_proxy
Tomcat node Tomcat nodeTomcat node
TM
619/09/19
How to replicate sessionsHow to replicate sessions
In cluster:
<distributable/> in web.xml
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
Port upd 45564
Ports tcp range 4000:4100
TM
819/09/19
KubernetesKubernetes
Kubernetes is an open-source system for automating
deployment, scaling, and management of containerized
applications. https://kubernetes.io/
TM
919/09/19
Cloud providersCloud providers
Most of the major cloud providers rely on Kubernetes as a
container management solution.
TM
1019/09/19
Cloud providersCloud providers
We worked on adding support for Kubernetes so that our
solution would be available on all of these providers.
TM
1119/09/19
DeploymentDeployment
Build Push Run Expose
Image of tomcat-
in-the-cloud
Docker registry Port 80Docker
container
TM
1219/09/19
AutomationAutomation
Because the deployment can be time consuming and slightly different
for each of the cloud providers (in terms of permission management).
We’re currently working on automating the process preparing an
operator.
AWS:
awscli /IAM console / docker / kops / kubectl
Azure:
azure-cli /Azure console / docker / kubectl
Google:
google-cloud-sdk / google cloud console / docker / kubectl
IBM:
Need to check / kubectl
TM
1319/09/19
OPENSHIFTOPENSHIFT
A Red Hat project / product
See OpenShift
https://www.openshift.com/
Can use AWS (public cloud) or Private on premise.
A layer on top of kubernetes to make developpers life more
easy.
TM
1419/09/19
Tomcat in OpenShift/KubernetesTomcat in OpenShift/Kubernetes
TM
1519/09/19
Developping Tomcat App in OpenShift/KubernetesDevelopping Tomcat App in OpenShift/Kubernetes
RHEL RHEL
When a developer
creates a new
application OpenShift
start a new pod
Web Console
Eclipse IDE
Command Line
Master Node Node Node
RHEL
pod
AWS / CloudForms / OpenStack (IaaS) / RHEV (Virt) / Bare Metal
TM
1619/09/19
Getting startedGetting started
minishift:
Allows a demo on a single box.
Easy to setup
Small demo
Online:
We have prepared wiki to help you to start:
https://github.com/web-servers/tomcat-in-the-cloud/wiki
We have a katacoda tutorial:
https://katacoda.com/jfclere/courses/tomcat-in-the-cloud
Bare metal / VM:
Use ansible to install
2 nodes + master + infra minimal
Tomcat webapp with sessions
Rest Counter demo.
TM
1719/09/19
From a cluster to the CloudFrom a cluster to the Cloud
RHEL RHEL
Broker Node Node Node
RHEL
! Power
COL 1 2 3 4 5 6 7 8 1 2 3 6 25 50 8012
100
10
Ether 10/100
Load balancer Tomcat node Tomcat nodeTomcat node
TM
1819/09/19
Problems for a cluster to cloud...Problems for a cluster to cloud...
Many ways to solve:
Embed tomcat with SpringBoot
Create a docker image
Extend an existing docker image
Fabric8
Tomcat session replication:
No multicast in the cloud.
Need a “ping” to find the other nodes (KubePing/DNSPing)
Need to add “view nodes” permission to the system account of the project.
TM
1919/09/19
Solutions: KUBEPingSolutions: KUBEPing
Tomcat cluster built-in solution
Peer discovery through multicast
heartbeat messages
Does not work in a cloud environment
Session
Data
Session
Data
Session
Data
Session
Data
Session
Data
Session
Data
Multicast
solution
Peer discovery through Kubernetes
Downward API
Works in all kubernetes clouds
Kubernetes API
TM
2019/09/19
Kubernetes APIKubernetes API
Tools for managing a Kubernetes
cluster
Accessible from the pods within the
cluster
GET /api/v1/namespaces/tomcat-in-the-
cloud/pods
➔
Return a JSON representation of all the pods in
the cluster
➔
Requires permissions
TM
2119/09/19
Architecture KUBEPing caseArchitecture KUBEPing case
DynamicMembershipService
RefreshThread
●
Call memberProvider.getMembers()
●
Filter out already known Member
●
Inform listeners of
new/dead members
KubernetesMemberProvider
●
init():
●
Get URL, cert, ... from
environment variables
●
Set startTime
●
getMembers():
●
Call api to get pods
●
Filter active pods
●
Compute aliveTime
MemberProvider
●
init(Properties)
●
getMembers(): List<Member>
TM
2219/09/19
Solutions: DNSPingSolutions: DNSPing
Tomcat cluster built-in solution
Peer discovery through multicast
heartbeat messages
Does not work in a cloud environment
Session
Data
Session
Data
Session
Data
Session
Data
Session
Data
Session
Data
Multicast
solution
Peer discovery through DNS lookup
Works in all kubernetes clouds
InetAddress.getAllByName(namespace)
TM
2319/09/19
DNS lookupDNS lookup
nslookup name-space
Accessible from the pods within
the cluster
InetAddress.getAllByName()
TM
2419/09/19
Demos contents:
We use Katacoda for the demos.
Where is the code:
In Tomcat tomcat-maven for the Docker Image
In github for the S2I (there is PR 188)
In github for the operator
More documentation / tests are welcome
What is doneWhat is done
TM
2519/09/19
Katacoda demo using KUBEPingKatacoda demo using KUBEPing
https://katacoda.com/jfclere/courses/tomcat-in-the-cloud
And the sources:
https://github.com/jfclere/intro-katacoda/tree/master/tomcat-in-t
he-cloud/deploy-titc-using-cli
Requires permission to read pods configuration (use it in private
cloud)
TM
2619/09/19
Katacoda demo using DNSPingKatacoda demo using DNSPing
https://katacoda.com/jfclere/scenarios/dnsping-tomcat
And the sources:
https://github.com/jfclere/intro-katacoda/tree/master/DNSPing-t
omcat
Runs everywhere, but requires a service for DNS discovering.
TM
2719/09/19
OperatorOperator
What is a Kubernetes operator
kubernetes definition
Basically it automates the services, routes and build (S2I) process.
What do we have now
We have one written in GO (prototype)
S2I (source to image) just tooling (PR # 188) vetoed but doesn’t need to be in Tomcat.
TM
2819/09/19
Katacoda demo using operatorKatacoda demo using operator
Operator demo in Katacoda
And the sources:
https://github.com/jfclere/intro-katacoda/tree/master/war-kataco
da
Every thing is created by the operator: pods, services etc.
TM
2919/09/19
Where we areWhere we are
Main sites:
https://github.com/web-servers/tomcat-in-the-cloud
https://github.com/jfclere/tomcatPI
https://docs.openshift.com
https://github.com/apache/tomcat
tomcat : res/tomcat-maven
DNSMembershipProvider / KubernetesMembershipProvider
Tomcat operator and S2I PR#188
TM
19/09/19 30
Questions ?
Suggestions?
THANK YOUTHANK YOU
JEAN-FREDERIC CLERE
@jclere
jfclere@gmail.com
JEAN-FREDERIC CLERE
@jclere
jfclere@gmail.com

From a cluster to the Cloud

  • 1.
    APACHECON North AmericaSept. 9-12, 2019 From a cluster to the CloudFrom a cluster to the Cloud Jean-Frederic Clere Tomcat @jfclere Jean-Frederic Clere Tomcat @jfclere
  • 2.
    TM 219/09/19 AgendaAgenda Who I am Acluster: Session replication and application. The cloud: Looking at the different cloud providers KUBEPing and DNSPing Modify the tomcat cluster Allow a dynamic list of nodes Only TCP. (8888 port exported via deployment.yml) Operator and S2I Demos What next? Questions / Suggestions
  • 3.
    TM 319/09/19 Who am I?Whoam I?Who am I?Who am I? Jean-Frederic Clere ● Red Hat ● Years writing JAVA code and server software ● Tomcat committer since 2001 ● Doing OpenSource since 1999 ● Cyclist/Runner etc ● Lived 15 years in Spain (Barcelona) ● Now in Neuchâtel (CH)
  • 4.
    TM 419/09/19 Session replication ina clusterSession replication in a clusterSession replication in a clusterSession replication in a cluster HTTP/1.1 No transaction No persistent connection Web App: Using cookies to carry session ID Store information in the session: Shopping cart etc. Multi nodes and dynamic Route request to right node Replicate information
  • 5.
    TM 519/09/19 A clusterA cluster !Power COL 1 2 3 4 5 6 7 8 1 2 3 6 25 50 8012 100 10 Ether 10/100 Load balancer HTTPD mod_proxy Tomcat node Tomcat nodeTomcat node
  • 6.
    TM 619/09/19 How to replicatesessionsHow to replicate sessions In cluster: <distributable/> in web.xml <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> Port upd 45564 Ports tcp range 4000:4100
  • 7.
    TM 819/09/19 KubernetesKubernetes Kubernetes is anopen-source system for automating deployment, scaling, and management of containerized applications. https://kubernetes.io/
  • 8.
    TM 919/09/19 Cloud providersCloud providers Mostof the major cloud providers rely on Kubernetes as a container management solution.
  • 9.
    TM 1019/09/19 Cloud providersCloud providers Weworked on adding support for Kubernetes so that our solution would be available on all of these providers.
  • 10.
    TM 1119/09/19 DeploymentDeployment Build Push RunExpose Image of tomcat- in-the-cloud Docker registry Port 80Docker container
  • 11.
    TM 1219/09/19 AutomationAutomation Because the deploymentcan be time consuming and slightly different for each of the cloud providers (in terms of permission management). We’re currently working on automating the process preparing an operator. AWS: awscli /IAM console / docker / kops / kubectl Azure: azure-cli /Azure console / docker / kubectl Google: google-cloud-sdk / google cloud console / docker / kubectl IBM: Need to check / kubectl
  • 12.
    TM 1319/09/19 OPENSHIFTOPENSHIFT A Red Hatproject / product See OpenShift https://www.openshift.com/ Can use AWS (public cloud) or Private on premise. A layer on top of kubernetes to make developpers life more easy.
  • 13.
  • 14.
    TM 1519/09/19 Developping Tomcat Appin OpenShift/KubernetesDevelopping Tomcat App in OpenShift/Kubernetes RHEL RHEL When a developer creates a new application OpenShift start a new pod Web Console Eclipse IDE Command Line Master Node Node Node RHEL pod AWS / CloudForms / OpenStack (IaaS) / RHEV (Virt) / Bare Metal
  • 15.
    TM 1619/09/19 Getting startedGetting started minishift: Allowsa demo on a single box. Easy to setup Small demo Online: We have prepared wiki to help you to start: https://github.com/web-servers/tomcat-in-the-cloud/wiki We have a katacoda tutorial: https://katacoda.com/jfclere/courses/tomcat-in-the-cloud Bare metal / VM: Use ansible to install 2 nodes + master + infra minimal Tomcat webapp with sessions Rest Counter demo.
  • 16.
    TM 1719/09/19 From a clusterto the CloudFrom a cluster to the Cloud RHEL RHEL Broker Node Node Node RHEL ! Power COL 1 2 3 4 5 6 7 8 1 2 3 6 25 50 8012 100 10 Ether 10/100 Load balancer Tomcat node Tomcat nodeTomcat node
  • 17.
    TM 1819/09/19 Problems for acluster to cloud...Problems for a cluster to cloud... Many ways to solve: Embed tomcat with SpringBoot Create a docker image Extend an existing docker image Fabric8 Tomcat session replication: No multicast in the cloud. Need a “ping” to find the other nodes (KubePing/DNSPing) Need to add “view nodes” permission to the system account of the project.
  • 18.
    TM 1919/09/19 Solutions: KUBEPingSolutions: KUBEPing Tomcatcluster built-in solution Peer discovery through multicast heartbeat messages Does not work in a cloud environment Session Data Session Data Session Data Session Data Session Data Session Data Multicast solution Peer discovery through Kubernetes Downward API Works in all kubernetes clouds Kubernetes API
  • 19.
    TM 2019/09/19 Kubernetes APIKubernetes API Toolsfor managing a Kubernetes cluster Accessible from the pods within the cluster GET /api/v1/namespaces/tomcat-in-the- cloud/pods ➔ Return a JSON representation of all the pods in the cluster ➔ Requires permissions
  • 20.
    TM 2119/09/19 Architecture KUBEPing caseArchitectureKUBEPing case DynamicMembershipService RefreshThread ● Call memberProvider.getMembers() ● Filter out already known Member ● Inform listeners of new/dead members KubernetesMemberProvider ● init(): ● Get URL, cert, ... from environment variables ● Set startTime ● getMembers(): ● Call api to get pods ● Filter active pods ● Compute aliveTime MemberProvider ● init(Properties) ● getMembers(): List<Member>
  • 21.
    TM 2219/09/19 Solutions: DNSPingSolutions: DNSPing Tomcatcluster built-in solution Peer discovery through multicast heartbeat messages Does not work in a cloud environment Session Data Session Data Session Data Session Data Session Data Session Data Multicast solution Peer discovery through DNS lookup Works in all kubernetes clouds InetAddress.getAllByName(namespace)
  • 22.
    TM 2319/09/19 DNS lookupDNS lookup nslookupname-space Accessible from the pods within the cluster InetAddress.getAllByName()
  • 23.
    TM 2419/09/19 Demos contents: We useKatacoda for the demos. Where is the code: In Tomcat tomcat-maven for the Docker Image In github for the S2I (there is PR 188) In github for the operator More documentation / tests are welcome What is doneWhat is done
  • 24.
    TM 2519/09/19 Katacoda demo usingKUBEPingKatacoda demo using KUBEPing https://katacoda.com/jfclere/courses/tomcat-in-the-cloud And the sources: https://github.com/jfclere/intro-katacoda/tree/master/tomcat-in-t he-cloud/deploy-titc-using-cli Requires permission to read pods configuration (use it in private cloud)
  • 25.
    TM 2619/09/19 Katacoda demo usingDNSPingKatacoda demo using DNSPing https://katacoda.com/jfclere/scenarios/dnsping-tomcat And the sources: https://github.com/jfclere/intro-katacoda/tree/master/DNSPing-t omcat Runs everywhere, but requires a service for DNS discovering.
  • 26.
    TM 2719/09/19 OperatorOperator What is aKubernetes operator kubernetes definition Basically it automates the services, routes and build (S2I) process. What do we have now We have one written in GO (prototype) S2I (source to image) just tooling (PR # 188) vetoed but doesn’t need to be in Tomcat.
  • 27.
    TM 2819/09/19 Katacoda demo usingoperatorKatacoda demo using operator Operator demo in Katacoda And the sources: https://github.com/jfclere/intro-katacoda/tree/master/war-kataco da Every thing is created by the operator: pods, services etc.
  • 28.
    TM 2919/09/19 Where we areWherewe are Main sites: https://github.com/web-servers/tomcat-in-the-cloud https://github.com/jfclere/tomcatPI https://docs.openshift.com https://github.com/apache/tomcat tomcat : res/tomcat-maven DNSMembershipProvider / KubernetesMembershipProvider Tomcat operator and S2I PR#188
  • 29.
  • 30.
    THANK YOUTHANK YOU JEAN-FREDERICCLERE @jclere jfclere@gmail.com JEAN-FREDERIC CLERE @jclere jfclere@gmail.com