2. Agenda
• An Introduction to Linux Containers
• An Introduction to Docker
• An Introduction to Kubernetes
• Deploying WSO2 products on Kubernetes
• Carbon cluster discovery on Kubernetes
• Monitoring server health
• Artifact distribution
• Propagating software updates
• Load balancing with Nginx
• Demo
3. Agenda
• App Factory and WSO2 App Cloud
• Creating applications and uploading existing apps
• Hosting web applications and API backends
• Using databases in the Cloud
• Coding and debugging applications with Cloud IDE or
desktop tools
• Application lifecycle management
• Custom URLs
• Teamwork and social development
• Issue and task tracking
12. Introduction to Docker
● Started as an internal project
within dotCloud
● Initial release in March 2013
● Initially used libvirt, LXC &
systemd-nspawn
● Introduced libcontainer: A
standard interface for Linux
containers
https://en.wikipedia.org/wiki/Docker_(software)
17. Why Container Clusters?
• Avoid single point of failure
• Make horizontally scalable
• Have more granular
management for distributed
applications (microservices)
• Self healing systems
http://googlecloudplatform.blogspot.com/2015/01/what-makes-a-container-cluster.html
[image ref] https://www.docker.com/what-docker
20. Kubernetes Pods
● A group of containers which can share
resources and context
● Shared namespaces:
○ PID namespace (processes visible
globally)
○ network namespace (same IP and port
space)
○ IPC namespace (SystemV IPC or POSIX)
○ UTS namespace (share a hostname)
Pod
C1 C2 C3
http://kubernetes.io/v1.0/docs/user-guide/pods.html
21. Kubernetes Labels & Selectors
● Labels are key/value pairs
attached to objects
● Selectors use the label key to
find a collection of objects
matched with the same value
○ L1 -> ClusterID = C1
○ L2 -> ClusterID = C2
Pod 1
http://kubernetes.io/v1.0/docs/user-guide/labels.html
L1
Pod 2
L1
Pod 3
L1
Pod 3
L2
Pod 4
L2
22. Pod
Template
Replicas = n
Kubernetes Replication Controllers
● Provides features for replicating
pods:
○ Auto-healing
○ Scaling
○ Rolling updates
○ Multiple release tracks Pod 1
http://kubernetes.io/v1.0/docs/user-guide/replication-controller.html
Pod 2 Pod n
Replication
Controller
23. Node IP: 172.17.8.102
Port: 9443
Domain Name: service1
IP: 10.2.10.20
Port: 9443
NodePort: 32001
Protocol: TCP
Kubernetes Services
● Nginx based load balancing rules
● Service types:
○ ClusterIP (default)
○ NodePort
○ LoadBalancer
● Service discovery:
○ DNS
○ Environment variables
● Session Affinity
Pod 1
http://kubernetes.io/v1.0/docs/user-guide/services.html
Pod 2 Pod n
Service
L1
L1 L1 L1
Node
24. ● A distributed key value store
● Read and write values with curl
and other HTTP libraries
● Store data in directories, similar
to a file system
● Watch a key or directory for
changes and react to the new
values
https://coreos.com/etcd/
etcd
25. ● A software defined network
● Runs an agent, flanneld, on each
host
● Uses etcd to store the network
configuration, allocated subnets,
and auxiliary data (host ips)
https://github.com/coreos/flannel
flannel
27. Carbon Cluster Discovery on
Kubernetes
Pod 1 Pod 2 Pod n
Service
Server 1 Server 2 Server n
Pod 1
Service
Server 1
Pod 1 Pod 2
Service
Server 1 Server 2
Hazelcast member
initialization
Hazelcast member
initialization
Hazelcast member
initialization
1 2 n
28. WSO2 Carbon Reference Architecture
for Kubernetes
Pod 1 Pod 2
Manager Cluster
Services
Pod 3 Pod 4 Pod n
Worker Cluster
Services
Manager
Replication
Controller
Worker Replication
Controller
Client
Gov
Reg
Conf
Reg
User
Store
29. WSO2 Configurator
A python module written using
Jinja2 template engine for
configuring a product using a set of
key/value pairs.
40. Demo Time!
• App Factory and WSO2 App Cloud
• Creating applications and uploading existing apps
• Hosting web applications and API backends
• Using databases in the Cloud
• Coding and debugging applications with Cloud IDE or
desktop tools
• Application lifecycle management
• Custom URLs
• Teamwork and social development
• Issue and task tracking