SlideShare une entreprise Scribd logo
1  sur  77
Orchestration Tool Roundup -
Docker Swarm vs. Kubernetes, TerraForm vs.
TOSCA/Cloudify vs. Heat
Speakers..
Agenda
• Orchestration 101..
• Different approaches for orchestration
• Method of comparison
• Comparison
• Synergies
• Summary - which tool to choose?
Orchestration 101
Orchestration is a mean to Automate Manual Process
Orchestration 101
• Common Characteristics
– Use DSL to define blueprint
– Execute a process based on
input from the blueprint
– Pass context information
between the deployed entities
• Different assumptions lead to
different approaches
– Application Architecture
– Infrastructure
– Scope of automation
Goals of this Exercise
Explore the
different
approaches to
orchestration
Infrastructure
Centric
Pure Play
Container
Centric
Method of Comparison
• Same Application Requirements
• Full Production Deployment
• Broken into three main groups
– Container Centric – Kubernetes,
Docker
– Pure Play –Cloudify/TOSCA,
Terraform,
–Infrastructure Centric - Heat
• Out of scope*
– PaaS, Configuration
Management (e.g Chef, Puppet,
Ansible,..)
– Covering all orchestrations
solutions
– Deep Dive into each
orchestration technology
The Test Application
VM
mongod
VM
NodeJS
mongos
VM
NodeJS
mongos
VM
Mongo-cfg
VM
Mongo-cfg
VM
Mongo-cfg
Load Balancer
VM
NodeJS
mongos
VM
mongod
VM
mongod VM
mongod
VM
mongod
VM
mongod VM
mongod
VM
mongod
VM
mongod
Orchestration Process - Setup
VM
VM VM
VM
VM
VM
Load Balancer
VM
VM
VM
VM
VM
VM
VM
VM
VM
Create network and
compute resources:
VMs, security group,
network, subnet,
routers, LB pool
1
Orchestration Process - Setup
VM
mongod
VM
NodeJS
mongos
VM
NodeJS
mongos
VM
Mongo-cfg
VM
Mongo-cfg
VM
Mongo-cfg
Load Balancer
VM
NodeJS
mongos
VM
mongod
VM
mongod VM
mongod
VM
mongod
VM
mongod VM
mongod
VM
mongod
VM
mongod
Install Mongo and
Node Binaries
2
Orchestration Process - Setup
VM
mongod
VM
NodeJS
mongos
VM
NodeJS
mongos
VM
Mongo-cfg
VM
Mongo-cfg
VM
Mongo-cfg
Load Balancer
VM
NodeJS
mongos
VM
mongod
VM
mongod VM
mongod
VM
mongod
VM
mongod VM
mongod
VM
mongod
VM
mongod
Start mongod
processes
Start mongod
processes
Start mongod
processes
3
Orchestration Process - Setup
VM
mongod
VM
NodeJS
mongos
VM
NodeJS
mongos
VM
Mongo-cfg
VM
Mongo-cfg
VM
Mongo-cfg
Load Balancer
VM
NodeJS
mongos
VM
mongod
VM
mongod VM
mongod
VM
mongod
VM
mongod VM
mongod
VM
mongod
VM
mongod
Start mongo-cfg
proecesses
Start mongo-cfg
proecesses
Start mongo-cfg
processes
4
Orchestration Process - Setup
VM
mongod
VM
NodeJS
mongos
VM
NodeJS
mongos
VM
Mongo-cfg
VM
Mongo-cfg
VM
Mongo-cfg
Load Balancer
VM
NodeJS
mongos
VM
mongod
VM
mongod VM
mongod
VM
mongod
VM
mongod VM
mongod
VM
mongod
VM
mongod
Start mongos
processes,
pointing to config
servers
Start mongos
processes,
pointing to config
servers
Start mongos
processes, pointing
to mongo-cfg
servers
5
Orchestration Process - Setup
VM
mongod
VM
NodeJS
mongos
VM
NodeJS
mongos
VM
Mongo-cfg
VM
Mongo-cfg
VM
Mongo-cfg
Load Balancer
VM
NodeJS
mongos
VM
mongod
VM
mongod VM
mongod
VM
mongod
VM
mongod VM
mongod
VM
mongod
VM
mongod
Pick one mongos and
initialize replica set
Pick one mongos and
initialize replica set
Pick one VM per shard
and initialize replica set
6
Orchestration Process - Setup
VM
mongod
VM
NodeJS
mongos
VM
NodeJS
mongos
VM
Mongo-cfg
VM
Mongo-cfg
VM
Mongo-cfg
Load Balancer
VM
NodeJS
mongos
VM
mongod
VM
mongod VM
mongod
VM
mongod
VM
mongod VM
mongod
VM
mongod
VM
mongod
Pick one mongos and add
shards, one at a time
7
Orchestration Process - Setup
VM
mongod
VM
NodeJS
mongos
VM
NodeJS
mongos
VM
Mongo-cfg
VM
Mongo-cfg
VM
Mongo-cfg
Load Balancer
VM
NodeJS
mongos
VM
mongod
VM
mongod VM
mongod
VM
mongod
VM
mongod VM
mongod
VM
mongod
VM
mongod
Pick one mongos and
initialize data in mongodb
8
Orchestration Process - Setup
VM
mongod
VM
NodeJS
mongos
VM
NodeJS
mongos
VM
Mongo-cfg
VM
Mongo-cfg
VM
Mongo-cfg
Load Balancer
VM
NodeJS
mongos
VM
mongod
VM
mongod VM
mongod
VM
mongod
VM
mongod VM
mongod
VM
mongod
VM
mongod
Start nodejs
processes
Start nodejs
processes
Start nodejs
processes
9
Orchestration Process - Setup
VM
mongod
VM
NodeJS
mongos
VM
NodeJS
mongos
VM
Mongo-cfg
VM
Mongo-cfg
VM
Mongo-cfg
Load Balancer
VM
NodeJS
mongos
VM
mongod
VM
mongod VM
mongod
VM
mongod
VM
mongod VM
mongod
VM
mongod
VM
mongod
Add nodejs VMs
to LB pool
10
Orchestrating in Production
• Monitoring and log collection
• Manual/Auto healing
• Manual/Auto scaling
• Maintenance:
– Backup and restore
– Continuous deployment
– Infrastructure upgrades and patches
Common Requirements
• Dependency management
•Reproducible
•Cloneable
• Recoverable
Series 1: Container Centric
Quick Overview of Docker Swarm
A Docker-native clustering system
• Use a pool of hosts through a single swarm
master endpoint
• Placement constraints, affinity/anti-affinity
docker run 
-name rs1 
-e affinity:container!=rs* 
...
Swarm Architecture
Solution Overview - Deploy - Create
Replica Sets
for i in 1..{number_of_replica_sets}
for j in 1..{number_of_nodes_for_replica_set}
docker run 
-name rs{i}_srv{j} 
-e affinity:container!=rs* 
-e affinity:container!=cfg* 
-e constraint:daemon==mongodb 
-d example/mongodb 
--replSet rs{i}
Then, SSH into one host per replica set to
configure it.
Solution Overview - Deploy - Start
Node.js application containers
Make sure you inject all mongos endpoints for
the application.
for i in 1..{number_of_nodejs_servers}
docker run 
-P -name nodejs{i}_v1 
-e constraint:daemon==nodejs 
-e affinity:container!=nodejs* 
-e MONGO_HOSTS=<LIST_OF_MONGOS_IPs> 
-d example/nodejs_v1 
nodejs server.js
Solution Overview - Deploy -
Reconfigure HAProxy
Extract Node.js container IPs using docker
inspect and then:
for i in 1..{number_of_nodejs_servers}
docker exec haproxy1 
reconfigure.sh 
--add=<IP_of_nodejs{i}:port>
Solution Overview - Mongodb scale
out
Identical to the process of deploying the initial
mongodb shards, mongodb will take care of
migrating data to the new shard
Docker Swarm - Pros and Cons
Pros
● Easy modeling
● Placement/Affinity
Cons
● Basic infrastructure
handling
● Manual handling
multiple instances
● “Manual” workflow
● Requires other tools
for production
aspects - monitoring,
healing, scaling
Kubernetes
Quick Overview to Kubernetes
Container cluster manager
• Pods: tightly coupled group of containers
• Replication controller: ensures that a
specified number of pod "replicas" are
running at any one time.
• Networking: Each pod gets its own IP address
• Service: Load balanced endpoint for a set of
pods
Kubernetes Architecture
Sample Replication Controller
apiVersion: v1beta3
kind: ReplicationController
spec:
replicas: 5
selector:
name: mongod-rs1
template:
metadata:
labels:
name: mongod-rs1
spec:
containers:
- command: [mongod, --port, 27017, --replSet, rs1]
image: example/mongod
name: mongod-rs1
- command: [mongod-rs-manager, --replSet, rs1]
image: example/mongod-rs-manager
name: mongod-rs1-manager
Sample Service Configuration
apiVersion: v1beta3
kind: Service
metadata:
labels:
type: nodejs
name: nodejs
spec:
ports:
- port: 80
targetPort: 8080
selector:
type: nodejs
createExternalLoadBalancer: true
Solution Overview - Deploy
• Create mongod config servers
for i in 1..3
kubectl create -f mongod-configsvr{i}-controller.yaml
kubectl create -f mongod-configsvr{i}-service.yaml
• Create mongos router
kubectl create -f mongos-controller.yaml
kubectl create -f mongos-service.yaml
Solution Overview - Deploy - Create
Data nodes
for i in 1..{number_of_replica_sets}
kubectl create -f 
mongod-rs{i}-controller.yaml
# Now configure each replicate set
# by picking pod to be the initial “master”
# of each replica set and extract all
# containers IPs using “kubectl get -l ...”
# dynamically update replica set
# members (this will kick of this process)
kubectl create -f mongod-rs{i}-service.yaml
Solution Overview - Node.js Heal
Failing pods are identified by kubernetes and
are automatically rescheduled
Solution Overview - Node.js
continuous deployment
# initially configured with 0 replicas
kubectl create -f nodejs-v{new_version}-controller.yaml
for i in 1..{number_of_nodejs_replicas}
kubectl resize rc nodejs_v{new_version} 
--current-replicas={i - 1} 
--replicas={i}
# smoke test and rollback everything if testing failed
kubectl resize rc nodejs_v{previous_version} 
--current-replicas={number_of_nodejs_replicas - i + 1} 
--replicas={number_of_nodejs_replicas - i}
Kubernetes - Pros and Cons
Pros
● (almost) zero configuration autoheal
● Out of the box load balancer
● Simple scaling
Cons
● No placement (yet)
● Not simple to manage stateful services
Series 2: Pure Play Orchestration
Introduction to Terraform
• By Hashicorp
• Simple (in a good way) command
line tool
– Resources
– Providers and provisioners
– Modules
– Variables and outputs
Sample Configuration
resource "openstack_compute_secgroup_v2" "nodejs_security_group" {
name = "nodejs_security_group"
description = "security group for mongodb"
rule {
from_port = 22
to_port = 22
ip_protocol = "tcp"
cidr = "0.0.0.0/0"
}
rule {
from_port = "${var.nodejs_port}"
to_port = "${var.nodejs_port}"
ip_protocol = "tcp"
cidr = "0.0.0.0/0"
}
}
Sample Configuration
#
# Create a Network
#
resource "openstack_networking_network_v2" "tf_network" {
region = ""
name = "tf_network"
admin_state_up = "true"
}
#
# Create a subnet in our new network
# Notice here we use a TF variable for the name of our network above.
#
resource "openstack_networking_subnet_v2" "tf_net_sub1" {
region = ""
network_id = "${openstack_networking_network_v2.tf_network.id}"
cidr = "192.168.1.0/24"
ip_version = 4
}
Sample Configuration
resource "openstack_compute_instance_v2" "mongod_host" {
count = "3"
region = ""
name = "mongod_host"
image_name = "${var.image_name}"
flavor_name = "${var.flavor_name}"
key_pair = "tf-keypair-1"
security_groups = ["mongo_security_group"]
network {
uuid = "${openstack_networking_network_v2.tf_network.id}"
}
...
provisioner "remote-exec" {
scripts = [
"scripts/install_mongo.sh"
"start_mongod.sh"
]
}
}
Solution Overview
• Single top level configuration file
• Creates: Network, subnet, router, floating IP,
security groups, VMs, LBaaS pool
• TF module to model a mongodb shard
– No easy way to specify "I want X occurrences of this
module"
– Just copy and paste...
Master Assignment & Registration of Shards
• Issue - no "cluster wide" way of invoking
provisioners
– Needed for configuring shard masters and adding
shards to the cluster
• Option 1: use Consul
– e.g. first instance acquires a lock and waits for other
to join
• Option 2: Static allocation in the
configuration
• Option 3: local-exec with locks
Terraform - Pros and Cons
Pros
● Infrastructure &
Framework neutrality
● Solid support for
OpenStack
● Simple and elegant
● Present plan before
applying
● Support for incremental
updates
Cons
● Configurations are not
portable across cloud
providers
● Hard to model non-
infrastructure
components
● Everything is done in the
context of a single
resource instance
TOSCA / Cloudify
What is TOSCA?
TOSCA defines the
interoperable
description of
applications; including
their components,
relationships,
dependencies,
requirements, and
capabilities….
Cloudify – Open Source
Implementation of TOSCA
Provision
ConfigureMonitor
Manage
Infrastructure
Can be used as a
command line tool or
as a managed service
Plugins
CM
Monitoring &
Alarming
Cloudify – Open Source
Implementation of TOSCA
Provision
ConfigureMonitor
Manage
Monitoring &
Alarming
Infrastructure
Can be used as a
command line tool or
as a managed service
Plugins
CM
Hosted
On
Software
ComponentContainer
(Docker Runtime
Capability)
Containee
(Docker Runtime
Requirement)
Requirements
Capabilities
# NOT YET IN TOSCA SPEC. TO BE INVENTED…
repositories:
docker_hub:
url: xxx
credentials: yyy
node_templates:
docker_webserver:
type: tosca.nodes.Container
requirements:
- host:
# omitted for brevity
artifacts:
- my_image: < URI of Docker Image in Repo. >
type: tosca.artifacts.impl.Docker.Image:
repository: docker_repo
Container
Container
Docker
Rocket
…
artifact_types:
tosca.artifacts.impl.Docker.Image:
derived_from: tosca.artifacts.Root
description: Docker Image TAR
mime_type: TBD
file_ext: [ tar ]
Docker Hub
(Repo.)
• URI of DockerImage
• Relative to Repo.
Artifacts
• Docker
Image
• .TAR)
Containers Portability in TOSCA
Source: Vmware Proposal
Solution Overview
Mongod-shard
Mongo replica-
set
Output:
Mogoconfig hosts
Shards endpoint
Subsitutable
*Scalable *Scalable
Input:
#config instances
#Shards
#Replica set per shard
Input:
#nodeJS instances
mongodb deployment id or
MongoConfig
Mogo Shards
Output:
App EndPoint = Load-Balancer
IP/path
Mongo
cfg
*Scalable
Initialization
Initialization
Load Balancer
NodeJS
MongoS
*Scalable
*Scalable
Infrastructure setup
node_templates:
nodecellar_security_group:
type: cloudify.openstack.nodes.SecurityGroup
properties:
security_group:
name: nodecellar_security_group
rules:
- remote_ip_prefix: 0.0.0.0/0
port: { get_property: [ nodecellar, port ] }
Create Mongo Shards
mongodb:
type: tosca.nodes.mongodb.Shard
directives: [substitutable]
properties:
count: { get_input: servers_count_in_replica_set }
requirements:
- host:
node: mongo_server
capabilities:
scalable:
properties:
min_instances: 1
max_instances: 10
default_instances: { get_input: mongodb_rs_count }
MongoDB ReplicaSet
MongoDB Server
*scalable
Create Compute Instances
mongo_server:
type: tosca.nodes.Compute
capabilities:
host:
properties: *host_capabilities
os:
properties: *os_capabilities
scalable:
properties:
min_instances: 1
max_instances: 10
default_instances: 5
Create MongoDB Replica Set
mongo_db_replica_set:
type: tosca.nodes.DBMS
requirements:
- host:
node: mongo_server
interfaces:
Standard:
create: Scripts/mongodb/create.sh
configure:
implementation: Scripts/mongodb/config.sh
inputs:
mongodb_ip: { get_attribute: [mongo_server, addr] }
start: Scripts/mongodb/start.sh
Creat NodeJS Containers
nodecellar_container:
type: tosca.nodes.NodeCellarAppContainer
properties:
port: { get_input: nodejs_app_port }
interfaces:
cloudify.interfaces.lifecycle:
create:
inputs:
....
command: nodejs server.js
environment:
NODECELLAR_PORT: { get_property: [SELF, port] }
MONGO_PORT: { get_property: [SELF, database_connection, port] }
MONGO_HOST: { get_attribute: [SELF, database_connection, private_address] }
…..
Create Load Balancer
haproxy:
type: tosca.nodes.Proxy
properties:
frontend_port: 80
statistics_port: 9000
backend_app_port: { get_property: [ nodecellar, port ] }
requirements:
- host:
node: haproxy_frontend_host
- member:
node: nodecellar_container
Get the web containers
through relationship and
update the load balancer
accordingly
Handling Post Deployment through
Workflow & Policies
● Cloudify Workflows
● Built in workflows
o Install
o Uninstall
o Heal
o Scale
● Discovery through graph navigation
● Remote/Local execution
Script execution in python with context to
the deployment graph
cfy executions start -w install ...
Summary TOSCA/Cloudify
Pros
● Infrastructure &
Framework neutrality
● Complete Life Cycle
Management
● Handles Infrastructure &
Software
● Production Orchestration*
o Monitoring
o Workflow
o Policies
o Logging
*Implementation specific
Cons
● The spec is still evolving
● Cloudify isn’t 100%
complaint yet
● Limited set of tooling
Series 3: Infrastructure Centric
• Overview of Heat
• Orchestrating NodeJS/MongoDB with Heat
• Summary – Benefits/ Limitations
What is Heat?
Heat provides a
mechanism for
orchestrating
OpenStack resources
through the use of
modular templates.
Heat Architecture
Solution Overview
Mogo replica-
set
Output:
Replica set node hosts
ssh-key, private ip to the
init node
Input:
#Replica set per shardInput:
#nodeJS instances
MongoConfig hosts
Mogo Shards hosts
Output:
mongos node hosts
App EndPoint = Load-Balancer
IP/path
mogocfg
Output:
mogocfg node hosts
Input:
#config instances
Initialize
replica-
set-script
Initialize
MongoS-
Script
Load Balancer
NodeJS
MongoS
Infrastructure setup
resources:
secgroup:
type: OS::Neutron::SecurityGroup
properties:
name:
str_replace:
template: mongodb-$stackstr-secgroup
params:
$stackstr:
get_attr:
- stack-string
- value
rules:
- protocol: icmp
- protocol: tcp
port_range_min: 22
port_range_max: 22
- protocol: tcp
port_range_min: 27017
port_range_max: 27019
Create Compute Instances
mongo_host:
type: OS::Nova::Server
properties:
name:
str_replace:
template: $stackprefix-$stackstr
params:
$stackprefix:
get_param: stack-prefix
$stackstr:
get_attr:
- stack-string
- value
image:
get_param: image
flavor:
get_param: flavor
security_groups:
- get_param: security_group
Create MongoDB Replica Servers
mongodb_peer_servers:
type: "OS::Heat::ResourceGroup"
properties:
count: { get_param: peer_server_count }
resource_def:
type: { get_param: child_template }
properties:
server_hostname:
str_replace:
template: '%name%-0%index%'
params:
'%name%': { get_param: server_hostname }
image: { get_param: image }
flavor: { get_param: flavor }
ssh_key: { get_resource: ssh_key }
ssh_private_key: { get_attr: [ssh_key, private_key] }
kitchen: { get_param: kitchen }
chef_version: { get_param: chef_version }
Configure the Replica Servers
server_setup:
type: "OS::Heat::ChefSolo"
depends_on:
- mongodb_peer_servers
properties:
username: root
private_key: { get_attr: [ssh_key, private_key] }
host: { get_attr: [mongodb_peer_servers, accessIPv4, 0] }
kitchen: { get_param: kitchen }
chef_version: { get_param: chef_version }
node:
mongodb:
ruby_gems:
mongo: '1.12.0'
bson_ext: '1.12.0'
bind_ip: { get_attr: [mongodb_peer_servers, privateIPv4, 0] }
use_fqdn: false
replicaset_members: { get_attr: [mongodb_peer_servers, privateIPv4] }
config:
replset: myreplset
run_list: [ "recipe[config_replset]" ]
Create NodeJS Container
nodestack_chef_run:
type: 'OS::Heat::ChefSolo'
depends_on: nodestack_node
properties:
...
node:
nodejs_app:
...
deployment:
id: { get_param: stack_id }
app_id: nodejs
run_list: ["recipe[apt]",
"recipe[nodejs]",
"recipe[ssh_known_hosts]",
"recipe[nodejs_app]"]
data_bags:
nodejs:
id: { get_param: stack_id }
nodejs_app:
password: { get_attr: [nodejs_user_password, value] }
deploy_key: { get_param: deploy_key }
database_url:
str_replace:
template: 'mongodb://%dbuser%:%dbpasswd%@%dbhostname%'
params:
'%dbuser%': { get_param: database_username }
'%dbpasswd%': { get_param: database_user_password }
'%dbhostname%': { get_param: db_server_ip }
Summary
Pros
● Native To OpenStack
● Built-in mapping of all
the OpenStack
infrastructure resource
types
Cons
● Limited to OpenStack
● Software configuration is
limited
● Lack of built-in workflow
● Production orchestration
is limited
o Requires integration
with other tools/
projects
Potential Synergies
• Magnum -
Kubernetes + Docker,
Heat
• Cloudify/TOSCA +
Docker
• Cloudify/TOSCA +
Heat
Which orchestration tool should I
choose?
Final Words..
The Only Constant Is Change!
More Change Ahead..
Further Reading..
OpenStack Vancouver Session

Contenu connexe

Tendances

OpenStack Neutron Liberty Updates
OpenStack Neutron Liberty UpdatesOpenStack Neutron Liberty Updates
OpenStack Neutron Liberty Updates
mestery
 
Open stack networking vlan, gre
Open stack networking   vlan, greOpen stack networking   vlan, gre
Open stack networking vlan, gre
Sim Janghoon
 
Openstack Neutron and SDN
Openstack Neutron and SDNOpenstack Neutron and SDN
Openstack Neutron and SDN
inakipascual
 

Tendances (20)

High performace network of Cloud Native Taiwan User Group
High performace network of Cloud Native Taiwan User GroupHigh performace network of Cloud Native Taiwan User Group
High performace network of Cloud Native Taiwan User Group
 
OpenStack Neutron Tutorial
OpenStack Neutron TutorialOpenStack Neutron Tutorial
OpenStack Neutron Tutorial
 
OpenStack: Virtual Routers On Compute Nodes
OpenStack: Virtual Routers On Compute NodesOpenStack: Virtual Routers On Compute Nodes
OpenStack: Virtual Routers On Compute Nodes
 
OpenStack Neutron's Distributed Virtual Router
OpenStack Neutron's Distributed Virtual RouterOpenStack Neutron's Distributed Virtual Router
OpenStack Neutron's Distributed Virtual Router
 
MidoNet deep dive
MidoNet deep diveMidoNet deep dive
MidoNet deep dive
 
Open stack networking_101_update_2014
Open stack networking_101_update_2014Open stack networking_101_update_2014
Open stack networking_101_update_2014
 
Overview of Distributed Virtual Router (DVR) in Openstack/Neutron
Overview of Distributed Virtual Router (DVR) in Openstack/NeutronOverview of Distributed Virtual Router (DVR) in Openstack/Neutron
Overview of Distributed Virtual Router (DVR) in Openstack/Neutron
 
L2 and L3 agent restructure
L2 and L3 agent restructureL2 and L3 agent restructure
L2 and L3 agent restructure
 
Orchestration Tool Roundup - Arthur Berezin & Trammell Scruggs
Orchestration Tool Roundup - Arthur Berezin & Trammell ScruggsOrchestration Tool Roundup - Arthur Berezin & Trammell Scruggs
Orchestration Tool Roundup - Arthur Berezin & Trammell Scruggs
 
Neutron DVR
Neutron DVRNeutron DVR
Neutron DVR
 
OpenStack HA
OpenStack HAOpenStack HA
OpenStack HA
 
OpenStack Neutron Liberty Updates
OpenStack Neutron Liberty UpdatesOpenStack Neutron Liberty Updates
OpenStack Neutron Liberty Updates
 
Linux Tag 2014 OpenStack Networking
Linux Tag 2014 OpenStack NetworkingLinux Tag 2014 OpenStack Networking
Linux Tag 2014 OpenStack Networking
 
[OpenStack Days Korea 2016] Track1 - Mellanox CloudX - Acceleration for Cloud...
[OpenStack Days Korea 2016] Track1 - Mellanox CloudX - Acceleration for Cloud...[OpenStack Days Korea 2016] Track1 - Mellanox CloudX - Acceleration for Cloud...
[OpenStack Days Korea 2016] Track1 - Mellanox CloudX - Acceleration for Cloud...
 
Can the Open vSwitch (OVS) bottleneck be resolved? - Erez Cohen - OpenStack D...
Can the Open vSwitch (OVS) bottleneck be resolved? - Erez Cohen - OpenStack D...Can the Open vSwitch (OVS) bottleneck be resolved? - Erez Cohen - OpenStack D...
Can the Open vSwitch (OVS) bottleneck be resolved? - Erez Cohen - OpenStack D...
 
Open Source Backends for OpenStack Neutron
Open Source Backends for OpenStack NeutronOpen Source Backends for OpenStack Neutron
Open Source Backends for OpenStack Neutron
 
Osdc2014 openstack networking yves_fauser
Osdc2014 openstack networking yves_fauserOsdc2014 openstack networking yves_fauser
Osdc2014 openstack networking yves_fauser
 
2014 OpenStack Summit - Neutron OVS to LinuxBridge Migration
2014 OpenStack Summit - Neutron OVS to LinuxBridge Migration2014 OpenStack Summit - Neutron OVS to LinuxBridge Migration
2014 OpenStack Summit - Neutron OVS to LinuxBridge Migration
 
Open stack networking vlan, gre
Open stack networking   vlan, greOpen stack networking   vlan, gre
Open stack networking vlan, gre
 
Openstack Neutron and SDN
Openstack Neutron and SDNOpenstack Neutron and SDN
Openstack Neutron and SDN
 

Similaire à Uri Cohen & Dan Kilman, GigaSpaces - Orchestration Tool Roundup - OpenStack lsrael 2015

Operator Lifecycle Management
Operator Lifecycle ManagementOperator Lifecycle Management
Operator Lifecycle Management
DoKC
 

Similaire à Uri Cohen & Dan Kilman, GigaSpaces - Orchestration Tool Roundup - OpenStack lsrael 2015 (20)

Orchestration tool roundup - OpenStack Israel summit - kubernetes vs. docker...
Orchestration tool roundup  - OpenStack Israel summit - kubernetes vs. docker...Orchestration tool roundup  - OpenStack Israel summit - kubernetes vs. docker...
Orchestration tool roundup - OpenStack Israel summit - kubernetes vs. docker...
 
MongoDB Ops Manager and Kubernetes - James Broadhead
MongoDB Ops Manager and Kubernetes - James BroadheadMongoDB Ops Manager and Kubernetes - James Broadhead
MongoDB Ops Manager and Kubernetes - James Broadhead
 
OSDC 2018 | Three years running containers with Kubernetes in Production by T...
OSDC 2018 | Three years running containers with Kubernetes in Production by T...OSDC 2018 | Three years running containers with Kubernetes in Production by T...
OSDC 2018 | Three years running containers with Kubernetes in Production by T...
 
Kubernetes - training micro-dragons without getting burnt
Kubernetes -  training micro-dragons without getting burntKubernetes -  training micro-dragons without getting burnt
Kubernetes - training micro-dragons without getting burnt
 
Testing kubernetes and_open_shift_at_scale_20170209
Testing kubernetes and_open_shift_at_scale_20170209Testing kubernetes and_open_shift_at_scale_20170209
Testing kubernetes and_open_shift_at_scale_20170209
 
Using ansible to core os &amp; kubernetes clusters
Using ansible to core os &amp; kubernetes clustersUsing ansible to core os &amp; kubernetes clusters
Using ansible to core os &amp; kubernetes clusters
 
K8s in 3h - Kubernetes Fundamentals Training
K8s in 3h - Kubernetes Fundamentals TrainingK8s in 3h - Kubernetes Fundamentals Training
K8s in 3h - Kubernetes Fundamentals Training
 
Serve Meals, Not Ingredients (ChefConf 2015)
Serve Meals, Not Ingredients (ChefConf 2015)Serve Meals, Not Ingredients (ChefConf 2015)
Serve Meals, Not Ingredients (ChefConf 2015)
 
Serve Meals, Not Ingredients - ChefConf 2015
Serve Meals, Not Ingredients - ChefConf 2015Serve Meals, Not Ingredients - ChefConf 2015
Serve Meals, Not Ingredients - ChefConf 2015
 
Making kubernetes simple for developers
Making kubernetes simple for developersMaking kubernetes simple for developers
Making kubernetes simple for developers
 
Operator Lifecycle Management
Operator Lifecycle ManagementOperator Lifecycle Management
Operator Lifecycle Management
 
Operator Lifecycle Management
Operator Lifecycle ManagementOperator Lifecycle Management
Operator Lifecycle Management
 
KVM and docker LXC Benchmarking with OpenStack
KVM and docker LXC Benchmarking with OpenStackKVM and docker LXC Benchmarking with OpenStack
KVM and docker LXC Benchmarking with OpenStack
 
Kubernetes: training micro-dragons for a serious battle
Kubernetes: training micro-dragons for a serious battleKubernetes: training micro-dragons for a serious battle
Kubernetes: training micro-dragons for a serious battle
 
Apache Cassandra Lunch #41: Cassandra on Kubernetes - Docker/Kubernetes/Helm ...
Apache Cassandra Lunch #41: Cassandra on Kubernetes - Docker/Kubernetes/Helm ...Apache Cassandra Lunch #41: Cassandra on Kubernetes - Docker/Kubernetes/Helm ...
Apache Cassandra Lunch #41: Cassandra on Kubernetes - Docker/Kubernetes/Helm ...
 
DevEx | there’s no place like k3s
DevEx | there’s no place like k3sDevEx | there’s no place like k3s
DevEx | there’s no place like k3s
 
Nagios Conference 2011 - William Leibzon - Nagios In Cloud Computing Environm...
Nagios Conference 2011 - William Leibzon - Nagios In Cloud Computing Environm...Nagios Conference 2011 - William Leibzon - Nagios In Cloud Computing Environm...
Nagios Conference 2011 - William Leibzon - Nagios In Cloud Computing Environm...
 
Kubernetes #1 intro
Kubernetes #1   introKubernetes #1   intro
Kubernetes #1 intro
 
Running MongoDB Enterprise on Kubernetes
Running MongoDB Enterprise on KubernetesRunning MongoDB Enterprise on Kubernetes
Running MongoDB Enterprise on Kubernetes
 
Jacopo Nardiello - Monitoring Cloud-Native applications with Prometheus - Cod...
Jacopo Nardiello - Monitoring Cloud-Native applications with Prometheus - Cod...Jacopo Nardiello - Monitoring Cloud-Native applications with Prometheus - Cod...
Jacopo Nardiello - Monitoring Cloud-Native applications with Prometheus - Cod...
 

Plus de Cloud Native Day Tel Aviv

Plus de Cloud Native Day Tel Aviv (20)

Cloud Native is a Cultural Decision. By Reshef Mann
Cloud Native is a Cultural Decision. By Reshef MannCloud Native is a Cultural Decision. By Reshef Mann
Cloud Native is a Cultural Decision. By Reshef Mann
 
Container Runtime Security with Falco, by Néstor Salceda
Container Runtime Security with Falco, by Néstor SalcedaContainer Runtime Security with Falco, by Néstor Salceda
Container Runtime Security with Falco, by Néstor Salceda
 
Kafka Mirror Tester: Go and Kubernetes Powered Test Suite for Kafka Replicati...
Kafka Mirror Tester: Go and Kubernetes Powered Test Suite for Kafka Replicati...Kafka Mirror Tester: Go and Kubernetes Powered Test Suite for Kafka Replicati...
Kafka Mirror Tester: Go and Kubernetes Powered Test Suite for Kafka Replicati...
 
Running I/O intensive workloads on Kubernetes, by Nati Shalom
Running I/O intensive workloads on Kubernetes, by Nati ShalomRunning I/O intensive workloads on Kubernetes, by Nati Shalom
Running I/O intensive workloads on Kubernetes, by Nati Shalom
 
WTF Do We Need a Service Mesh? By Anton Weiss.
WTF Do We Need a Service Mesh? By Anton Weiss.WTF Do We Need a Service Mesh? By Anton Weiss.
WTF Do We Need a Service Mesh? By Anton Weiss.
 
Update Strategies for the Edge, by Kat Cosgrove
Update Strategies for the Edge, by Kat CosgroveUpdate Strategies for the Edge, by Kat Cosgrove
Update Strategies for the Edge, by Kat Cosgrove
 
Building a Cloud-Native SaaS Product The Hard Way. By Arthur Berezin
Building a Cloud-Native SaaS Product The Hard Way. By Arthur BerezinBuilding a Cloud-Native SaaS Product The Hard Way. By Arthur Berezin
Building a Cloud-Native SaaS Product The Hard Way. By Arthur Berezin
 
The Four Questions (Every Monitoring Engineer gets asked), by Leon Adato
The Four Questions (Every Monitoring Engineer gets asked), by Leon AdatoThe Four Questions (Every Monitoring Engineer gets asked), by Leon Adato
The Four Questions (Every Monitoring Engineer gets asked), by Leon Adato
 
K8s Pod Scheduling - Deep Dive. By Tsahi Duek.
K8s Pod Scheduling - Deep Dive. By Tsahi Duek.K8s Pod Scheduling - Deep Dive. By Tsahi Duek.
K8s Pod Scheduling - Deep Dive. By Tsahi Duek.
 
Cloud Native: The Cattle, the Pets, and the Germs, by Avishai Ish-Shalom
Cloud Native: The Cattle, the Pets, and the Germs, by Avishai Ish-ShalomCloud Native: The Cattle, the Pets, and the Germs, by Avishai Ish-Shalom
Cloud Native: The Cattle, the Pets, and the Germs, by Avishai Ish-Shalom
 
MySQL Shell: the daily tool for devs and admins. By Vittorio Cioe.
MySQL Shell: the daily tool for devs and admins. By Vittorio Cioe.MySQL Shell: the daily tool for devs and admins. By Vittorio Cioe.
MySQL Shell: the daily tool for devs and admins. By Vittorio Cioe.
 
Cloud native transformation patterns, by Pini Reznik
Cloud native transformation patterns, by Pini ReznikCloud native transformation patterns, by Pini Reznik
Cloud native transformation patterns, by Pini Reznik
 
Cloud and Edge: price, performance and privacy considerations in IOT, by Tsvi...
Cloud and Edge: price, performance and privacy considerations in IOT, by Tsvi...Cloud and Edge: price, performance and privacy considerations in IOT, by Tsvi...
Cloud and Edge: price, performance and privacy considerations in IOT, by Tsvi...
 
Two Years, Zero servers: Lessons learned from running a startup 100% on Serve...
Two Years, Zero servers: Lessons learned from running a startup 100% on Serve...Two Years, Zero servers: Lessons learned from running a startup 100% on Serve...
Two Years, Zero servers: Lessons learned from running a startup 100% on Serve...
 
12 Factor Serverless Applications - Mike Morain, AWS - Cloud Native Day Tel A...
12 Factor Serverless Applications - Mike Morain, AWS - Cloud Native Day Tel A...12 Factor Serverless Applications - Mike Morain, AWS - Cloud Native Day Tel A...
12 Factor Serverless Applications - Mike Morain, AWS - Cloud Native Day Tel A...
 
Not my problem! Delegating responsibilities to the infrastructure - Yshay Yaa...
Not my problem! Delegating responsibilities to the infrastructure - Yshay Yaa...Not my problem! Delegating responsibilities to the infrastructure - Yshay Yaa...
Not my problem! Delegating responsibilities to the infrastructure - Yshay Yaa...
 
Brain in the Cloud: Machine Learning on OpenStack & Kubernetes Done Right - E...
Brain in the Cloud: Machine Learning on OpenStack & Kubernetes Done Right - E...Brain in the Cloud: Machine Learning on OpenStack & Kubernetes Done Right - E...
Brain in the Cloud: Machine Learning on OpenStack & Kubernetes Done Right - E...
 
A stateful application walks into a Kubernetes bar - Arthur Berezin, JovianX ...
A stateful application walks into a Kubernetes bar - Arthur Berezin, JovianX ...A stateful application walks into a Kubernetes bar - Arthur Berezin, JovianX ...
A stateful application walks into a Kubernetes bar - Arthur Berezin, JovianX ...
 
The story of how KubeMQ was born - Oz Golan, KubeMQ - Cloud Native Day Tel Av...
The story of how KubeMQ was born - Oz Golan, KubeMQ - Cloud Native Day Tel Av...The story of how KubeMQ was born - Oz Golan, KubeMQ - Cloud Native Day Tel Av...
The story of how KubeMQ was born - Oz Golan, KubeMQ - Cloud Native Day Tel Av...
 
I want it all: go hybrid - Orit Yaron, Outbrain - Cloud Native Day Tel Aviv 2018
I want it all: go hybrid - Orit Yaron, Outbrain - Cloud Native Day Tel Aviv 2018I want it all: go hybrid - Orit Yaron, Outbrain - Cloud Native Day Tel Aviv 2018
I want it all: go hybrid - Orit Yaron, Outbrain - Cloud Native Day Tel Aviv 2018
 

Dernier

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Dernier (20)

ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 

Uri Cohen & Dan Kilman, GigaSpaces - Orchestration Tool Roundup - OpenStack lsrael 2015

  • 1. Orchestration Tool Roundup - Docker Swarm vs. Kubernetes, TerraForm vs. TOSCA/Cloudify vs. Heat
  • 3. Agenda • Orchestration 101.. • Different approaches for orchestration • Method of comparison • Comparison • Synergies • Summary - which tool to choose?
  • 4. Orchestration 101 Orchestration is a mean to Automate Manual Process
  • 5. Orchestration 101 • Common Characteristics – Use DSL to define blueprint – Execute a process based on input from the blueprint – Pass context information between the deployed entities • Different assumptions lead to different approaches – Application Architecture – Infrastructure – Scope of automation
  • 6. Goals of this Exercise Explore the different approaches to orchestration Infrastructure Centric Pure Play Container Centric
  • 7. Method of Comparison • Same Application Requirements • Full Production Deployment • Broken into three main groups – Container Centric – Kubernetes, Docker – Pure Play –Cloudify/TOSCA, Terraform, –Infrastructure Centric - Heat • Out of scope* – PaaS, Configuration Management (e.g Chef, Puppet, Ansible,..) – Covering all orchestrations solutions – Deep Dive into each orchestration technology
  • 8. The Test Application VM mongod VM NodeJS mongos VM NodeJS mongos VM Mongo-cfg VM Mongo-cfg VM Mongo-cfg Load Balancer VM NodeJS mongos VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod
  • 9. Orchestration Process - Setup VM VM VM VM VM VM Load Balancer VM VM VM VM VM VM VM VM VM Create network and compute resources: VMs, security group, network, subnet, routers, LB pool 1
  • 10. Orchestration Process - Setup VM mongod VM NodeJS mongos VM NodeJS mongos VM Mongo-cfg VM Mongo-cfg VM Mongo-cfg Load Balancer VM NodeJS mongos VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod Install Mongo and Node Binaries 2
  • 11. Orchestration Process - Setup VM mongod VM NodeJS mongos VM NodeJS mongos VM Mongo-cfg VM Mongo-cfg VM Mongo-cfg Load Balancer VM NodeJS mongos VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod Start mongod processes Start mongod processes Start mongod processes 3
  • 12. Orchestration Process - Setup VM mongod VM NodeJS mongos VM NodeJS mongos VM Mongo-cfg VM Mongo-cfg VM Mongo-cfg Load Balancer VM NodeJS mongos VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod Start mongo-cfg proecesses Start mongo-cfg proecesses Start mongo-cfg processes 4
  • 13. Orchestration Process - Setup VM mongod VM NodeJS mongos VM NodeJS mongos VM Mongo-cfg VM Mongo-cfg VM Mongo-cfg Load Balancer VM NodeJS mongos VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod Start mongos processes, pointing to config servers Start mongos processes, pointing to config servers Start mongos processes, pointing to mongo-cfg servers 5
  • 14. Orchestration Process - Setup VM mongod VM NodeJS mongos VM NodeJS mongos VM Mongo-cfg VM Mongo-cfg VM Mongo-cfg Load Balancer VM NodeJS mongos VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod Pick one mongos and initialize replica set Pick one mongos and initialize replica set Pick one VM per shard and initialize replica set 6
  • 15. Orchestration Process - Setup VM mongod VM NodeJS mongos VM NodeJS mongos VM Mongo-cfg VM Mongo-cfg VM Mongo-cfg Load Balancer VM NodeJS mongos VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod Pick one mongos and add shards, one at a time 7
  • 16. Orchestration Process - Setup VM mongod VM NodeJS mongos VM NodeJS mongos VM Mongo-cfg VM Mongo-cfg VM Mongo-cfg Load Balancer VM NodeJS mongos VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod Pick one mongos and initialize data in mongodb 8
  • 17. Orchestration Process - Setup VM mongod VM NodeJS mongos VM NodeJS mongos VM Mongo-cfg VM Mongo-cfg VM Mongo-cfg Load Balancer VM NodeJS mongos VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod Start nodejs processes Start nodejs processes Start nodejs processes 9
  • 18. Orchestration Process - Setup VM mongod VM NodeJS mongos VM NodeJS mongos VM Mongo-cfg VM Mongo-cfg VM Mongo-cfg Load Balancer VM NodeJS mongos VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod VM mongod Add nodejs VMs to LB pool 10
  • 19. Orchestrating in Production • Monitoring and log collection • Manual/Auto healing • Manual/Auto scaling • Maintenance: – Backup and restore – Continuous deployment – Infrastructure upgrades and patches
  • 20. Common Requirements • Dependency management •Reproducible •Cloneable • Recoverable
  • 22. Quick Overview of Docker Swarm A Docker-native clustering system • Use a pool of hosts through a single swarm master endpoint • Placement constraints, affinity/anti-affinity docker run -name rs1 -e affinity:container!=rs* ...
  • 24. Solution Overview - Deploy - Create Replica Sets for i in 1..{number_of_replica_sets} for j in 1..{number_of_nodes_for_replica_set} docker run -name rs{i}_srv{j} -e affinity:container!=rs* -e affinity:container!=cfg* -e constraint:daemon==mongodb -d example/mongodb --replSet rs{i} Then, SSH into one host per replica set to configure it.
  • 25. Solution Overview - Deploy - Start Node.js application containers Make sure you inject all mongos endpoints for the application. for i in 1..{number_of_nodejs_servers} docker run -P -name nodejs{i}_v1 -e constraint:daemon==nodejs -e affinity:container!=nodejs* -e MONGO_HOSTS=<LIST_OF_MONGOS_IPs> -d example/nodejs_v1 nodejs server.js
  • 26. Solution Overview - Deploy - Reconfigure HAProxy Extract Node.js container IPs using docker inspect and then: for i in 1..{number_of_nodejs_servers} docker exec haproxy1 reconfigure.sh --add=<IP_of_nodejs{i}:port>
  • 27. Solution Overview - Mongodb scale out Identical to the process of deploying the initial mongodb shards, mongodb will take care of migrating data to the new shard
  • 28. Docker Swarm - Pros and Cons Pros ● Easy modeling ● Placement/Affinity Cons ● Basic infrastructure handling ● Manual handling multiple instances ● “Manual” workflow ● Requires other tools for production aspects - monitoring, healing, scaling
  • 30. Quick Overview to Kubernetes Container cluster manager • Pods: tightly coupled group of containers • Replication controller: ensures that a specified number of pod "replicas" are running at any one time. • Networking: Each pod gets its own IP address • Service: Load balanced endpoint for a set of pods
  • 32. Sample Replication Controller apiVersion: v1beta3 kind: ReplicationController spec: replicas: 5 selector: name: mongod-rs1 template: metadata: labels: name: mongod-rs1 spec: containers: - command: [mongod, --port, 27017, --replSet, rs1] image: example/mongod name: mongod-rs1 - command: [mongod-rs-manager, --replSet, rs1] image: example/mongod-rs-manager name: mongod-rs1-manager
  • 33. Sample Service Configuration apiVersion: v1beta3 kind: Service metadata: labels: type: nodejs name: nodejs spec: ports: - port: 80 targetPort: 8080 selector: type: nodejs createExternalLoadBalancer: true
  • 34. Solution Overview - Deploy • Create mongod config servers for i in 1..3 kubectl create -f mongod-configsvr{i}-controller.yaml kubectl create -f mongod-configsvr{i}-service.yaml • Create mongos router kubectl create -f mongos-controller.yaml kubectl create -f mongos-service.yaml
  • 35. Solution Overview - Deploy - Create Data nodes for i in 1..{number_of_replica_sets} kubectl create -f mongod-rs{i}-controller.yaml # Now configure each replicate set # by picking pod to be the initial “master” # of each replica set and extract all # containers IPs using “kubectl get -l ...” # dynamically update replica set # members (this will kick of this process) kubectl create -f mongod-rs{i}-service.yaml
  • 36. Solution Overview - Node.js Heal Failing pods are identified by kubernetes and are automatically rescheduled
  • 37. Solution Overview - Node.js continuous deployment # initially configured with 0 replicas kubectl create -f nodejs-v{new_version}-controller.yaml for i in 1..{number_of_nodejs_replicas} kubectl resize rc nodejs_v{new_version} --current-replicas={i - 1} --replicas={i} # smoke test and rollback everything if testing failed kubectl resize rc nodejs_v{previous_version} --current-replicas={number_of_nodejs_replicas - i + 1} --replicas={number_of_nodejs_replicas - i}
  • 38. Kubernetes - Pros and Cons Pros ● (almost) zero configuration autoheal ● Out of the box load balancer ● Simple scaling Cons ● No placement (yet) ● Not simple to manage stateful services
  • 39. Series 2: Pure Play Orchestration
  • 40. Introduction to Terraform • By Hashicorp • Simple (in a good way) command line tool – Resources – Providers and provisioners – Modules – Variables and outputs
  • 41. Sample Configuration resource "openstack_compute_secgroup_v2" "nodejs_security_group" { name = "nodejs_security_group" description = "security group for mongodb" rule { from_port = 22 to_port = 22 ip_protocol = "tcp" cidr = "0.0.0.0/0" } rule { from_port = "${var.nodejs_port}" to_port = "${var.nodejs_port}" ip_protocol = "tcp" cidr = "0.0.0.0/0" } }
  • 42. Sample Configuration # # Create a Network # resource "openstack_networking_network_v2" "tf_network" { region = "" name = "tf_network" admin_state_up = "true" } # # Create a subnet in our new network # Notice here we use a TF variable for the name of our network above. # resource "openstack_networking_subnet_v2" "tf_net_sub1" { region = "" network_id = "${openstack_networking_network_v2.tf_network.id}" cidr = "192.168.1.0/24" ip_version = 4 }
  • 43. Sample Configuration resource "openstack_compute_instance_v2" "mongod_host" { count = "3" region = "" name = "mongod_host" image_name = "${var.image_name}" flavor_name = "${var.flavor_name}" key_pair = "tf-keypair-1" security_groups = ["mongo_security_group"] network { uuid = "${openstack_networking_network_v2.tf_network.id}" } ... provisioner "remote-exec" { scripts = [ "scripts/install_mongo.sh" "start_mongod.sh" ] } }
  • 44. Solution Overview • Single top level configuration file • Creates: Network, subnet, router, floating IP, security groups, VMs, LBaaS pool • TF module to model a mongodb shard – No easy way to specify "I want X occurrences of this module" – Just copy and paste...
  • 45. Master Assignment & Registration of Shards • Issue - no "cluster wide" way of invoking provisioners – Needed for configuring shard masters and adding shards to the cluster • Option 1: use Consul – e.g. first instance acquires a lock and waits for other to join • Option 2: Static allocation in the configuration • Option 3: local-exec with locks
  • 46. Terraform - Pros and Cons Pros ● Infrastructure & Framework neutrality ● Solid support for OpenStack ● Simple and elegant ● Present plan before applying ● Support for incremental updates Cons ● Configurations are not portable across cloud providers ● Hard to model non- infrastructure components ● Everything is done in the context of a single resource instance
  • 48. What is TOSCA? TOSCA defines the interoperable description of applications; including their components, relationships, dependencies, requirements, and capabilities….
  • 49. Cloudify – Open Source Implementation of TOSCA Provision ConfigureMonitor Manage Infrastructure Can be used as a command line tool or as a managed service Plugins CM Monitoring & Alarming
  • 50. Cloudify – Open Source Implementation of TOSCA Provision ConfigureMonitor Manage Monitoring & Alarming Infrastructure Can be used as a command line tool or as a managed service Plugins CM
  • 51. Hosted On Software ComponentContainer (Docker Runtime Capability) Containee (Docker Runtime Requirement) Requirements Capabilities # NOT YET IN TOSCA SPEC. TO BE INVENTED… repositories: docker_hub: url: xxx credentials: yyy node_templates: docker_webserver: type: tosca.nodes.Container requirements: - host: # omitted for brevity artifacts: - my_image: < URI of Docker Image in Repo. > type: tosca.artifacts.impl.Docker.Image: repository: docker_repo Container Container Docker Rocket … artifact_types: tosca.artifacts.impl.Docker.Image: derived_from: tosca.artifacts.Root description: Docker Image TAR mime_type: TBD file_ext: [ tar ] Docker Hub (Repo.) • URI of DockerImage • Relative to Repo. Artifacts • Docker Image • .TAR) Containers Portability in TOSCA Source: Vmware Proposal
  • 52. Solution Overview Mongod-shard Mongo replica- set Output: Mogoconfig hosts Shards endpoint Subsitutable *Scalable *Scalable Input: #config instances #Shards #Replica set per shard Input: #nodeJS instances mongodb deployment id or MongoConfig Mogo Shards Output: App EndPoint = Load-Balancer IP/path Mongo cfg *Scalable Initialization Initialization Load Balancer NodeJS MongoS *Scalable *Scalable
  • 53. Infrastructure setup node_templates: nodecellar_security_group: type: cloudify.openstack.nodes.SecurityGroup properties: security_group: name: nodecellar_security_group rules: - remote_ip_prefix: 0.0.0.0/0 port: { get_property: [ nodecellar, port ] }
  • 54. Create Mongo Shards mongodb: type: tosca.nodes.mongodb.Shard directives: [substitutable] properties: count: { get_input: servers_count_in_replica_set } requirements: - host: node: mongo_server capabilities: scalable: properties: min_instances: 1 max_instances: 10 default_instances: { get_input: mongodb_rs_count } MongoDB ReplicaSet MongoDB Server *scalable
  • 55. Create Compute Instances mongo_server: type: tosca.nodes.Compute capabilities: host: properties: *host_capabilities os: properties: *os_capabilities scalable: properties: min_instances: 1 max_instances: 10 default_instances: 5
  • 56. Create MongoDB Replica Set mongo_db_replica_set: type: tosca.nodes.DBMS requirements: - host: node: mongo_server interfaces: Standard: create: Scripts/mongodb/create.sh configure: implementation: Scripts/mongodb/config.sh inputs: mongodb_ip: { get_attribute: [mongo_server, addr] } start: Scripts/mongodb/start.sh
  • 57. Creat NodeJS Containers nodecellar_container: type: tosca.nodes.NodeCellarAppContainer properties: port: { get_input: nodejs_app_port } interfaces: cloudify.interfaces.lifecycle: create: inputs: .... command: nodejs server.js environment: NODECELLAR_PORT: { get_property: [SELF, port] } MONGO_PORT: { get_property: [SELF, database_connection, port] } MONGO_HOST: { get_attribute: [SELF, database_connection, private_address] } …..
  • 58. Create Load Balancer haproxy: type: tosca.nodes.Proxy properties: frontend_port: 80 statistics_port: 9000 backend_app_port: { get_property: [ nodecellar, port ] } requirements: - host: node: haproxy_frontend_host - member: node: nodecellar_container Get the web containers through relationship and update the load balancer accordingly
  • 59. Handling Post Deployment through Workflow & Policies ● Cloudify Workflows ● Built in workflows o Install o Uninstall o Heal o Scale ● Discovery through graph navigation ● Remote/Local execution Script execution in python with context to the deployment graph cfy executions start -w install ...
  • 60. Summary TOSCA/Cloudify Pros ● Infrastructure & Framework neutrality ● Complete Life Cycle Management ● Handles Infrastructure & Software ● Production Orchestration* o Monitoring o Workflow o Policies o Logging *Implementation specific Cons ● The spec is still evolving ● Cloudify isn’t 100% complaint yet ● Limited set of tooling
  • 61. Series 3: Infrastructure Centric • Overview of Heat • Orchestrating NodeJS/MongoDB with Heat • Summary – Benefits/ Limitations
  • 62. What is Heat? Heat provides a mechanism for orchestrating OpenStack resources through the use of modular templates.
  • 64. Solution Overview Mogo replica- set Output: Replica set node hosts ssh-key, private ip to the init node Input: #Replica set per shardInput: #nodeJS instances MongoConfig hosts Mogo Shards hosts Output: mongos node hosts App EndPoint = Load-Balancer IP/path mogocfg Output: mogocfg node hosts Input: #config instances Initialize replica- set-script Initialize MongoS- Script Load Balancer NodeJS MongoS
  • 65. Infrastructure setup resources: secgroup: type: OS::Neutron::SecurityGroup properties: name: str_replace: template: mongodb-$stackstr-secgroup params: $stackstr: get_attr: - stack-string - value rules: - protocol: icmp - protocol: tcp port_range_min: 22 port_range_max: 22 - protocol: tcp port_range_min: 27017 port_range_max: 27019
  • 66. Create Compute Instances mongo_host: type: OS::Nova::Server properties: name: str_replace: template: $stackprefix-$stackstr params: $stackprefix: get_param: stack-prefix $stackstr: get_attr: - stack-string - value image: get_param: image flavor: get_param: flavor security_groups: - get_param: security_group
  • 67. Create MongoDB Replica Servers mongodb_peer_servers: type: "OS::Heat::ResourceGroup" properties: count: { get_param: peer_server_count } resource_def: type: { get_param: child_template } properties: server_hostname: str_replace: template: '%name%-0%index%' params: '%name%': { get_param: server_hostname } image: { get_param: image } flavor: { get_param: flavor } ssh_key: { get_resource: ssh_key } ssh_private_key: { get_attr: [ssh_key, private_key] } kitchen: { get_param: kitchen } chef_version: { get_param: chef_version }
  • 68. Configure the Replica Servers server_setup: type: "OS::Heat::ChefSolo" depends_on: - mongodb_peer_servers properties: username: root private_key: { get_attr: [ssh_key, private_key] } host: { get_attr: [mongodb_peer_servers, accessIPv4, 0] } kitchen: { get_param: kitchen } chef_version: { get_param: chef_version } node: mongodb: ruby_gems: mongo: '1.12.0' bson_ext: '1.12.0' bind_ip: { get_attr: [mongodb_peer_servers, privateIPv4, 0] } use_fqdn: false replicaset_members: { get_attr: [mongodb_peer_servers, privateIPv4] } config: replset: myreplset run_list: [ "recipe[config_replset]" ]
  • 69. Create NodeJS Container nodestack_chef_run: type: 'OS::Heat::ChefSolo' depends_on: nodestack_node properties: ... node: nodejs_app: ... deployment: id: { get_param: stack_id } app_id: nodejs run_list: ["recipe[apt]", "recipe[nodejs]", "recipe[ssh_known_hosts]", "recipe[nodejs_app]"] data_bags: nodejs: id: { get_param: stack_id } nodejs_app: password: { get_attr: [nodejs_user_password, value] } deploy_key: { get_param: deploy_key } database_url: str_replace: template: 'mongodb://%dbuser%:%dbpasswd%@%dbhostname%' params: '%dbuser%': { get_param: database_username } '%dbpasswd%': { get_param: database_user_password } '%dbhostname%': { get_param: db_server_ip }
  • 70. Summary Pros ● Native To OpenStack ● Built-in mapping of all the OpenStack infrastructure resource types Cons ● Limited to OpenStack ● Software configuration is limited ● Lack of built-in workflow ● Production orchestration is limited o Requires integration with other tools/ projects
  • 71. Potential Synergies • Magnum - Kubernetes + Docker, Heat • Cloudify/TOSCA + Docker • Cloudify/TOSCA + Heat
  • 72. Which orchestration tool should I choose?
  • 74. The Only Constant Is Change!