Heat up your Stack
Rico Lin
Chief OpenStack Technologist, inwinSTACK
IRC: ricolin #heat
rico.l@inwinstack.com
@ricolintw
Your HA OpenStack Architecture
Deploy Compute
Storage
Controller
HA
OpenStack
image
flavor
user
role
Port instance
Trove
Sahara
Murano
Magnum
keypairsubnet
network
security
group
Project
load
balance
container volumeFloating IP
volume
alarm
image
flavor
user
role
Port instance
Trove
Sahara
Murano
Magnum
keypairsubnet
network
security
group
Project
load
balance
container volumeFloating IP
volume
alarm
A Mess
But You Didn’t Know, It’s Happening...
Making It Right and Making It Fast!
image
flavor
user
role
Port instance
Trove
Sahara
Murano
Magnum
keypairsubnet
network
security
group
Project
load
balance
container volumeFloating IP
volume
alarm
User Image Flavor Role Alarm Vloume
Port
Network
Container
Floating
IP
Subnet
Load
balance
Keypair
Security
group
Instance
Vloume
Magnum
Trove
Sahara
Murano
Project
Use Heat Resource to
Redefine Old Resource
Create Stack for Default Resource Set
heat_template_version: 2015-04-30
resources:
image_for_cloudos:
type: OS::Glance::Image
properties: …
image_for_ubuntu:
type: OS::Glance::Image properties: …
image_for_win7:
type: OS::Glance::Image properties: …
Stack: images
Image Image
Image
Create Stack for Authorization Topology
Stack: Authorization
Project
Project Role
Role User User
User
Stack: Network_Topology
Router
Create Stack for Network Topology
Network Network
Subnet Subnet
Port Port
Create Stack for Instance Topology
Stack: Instance
Server
Volume
Keypair
Murano Magnum Trove
Sceurity Group
Floating IP
LBaas
image
flavor
user
role
Port instance
Trove
Sahara
Murano
Magnum
keypairsubnet
network
security
group
Project
load
balance
container volumeFloating IP
volume
alarm
User Image Flavor Role Alarm Vloume
Port
Network
Container
Floating
IP
Subnet
Load
balance
Keypair
Security
group
Instance
Vloume
Magnum
Trove
Sahara
Murano
Project
Stack:
Network
Topology
Stack: Instance
Container
Authenticat
ion
Image
security
group
volume
Flavor Alarm volume
Authorization
Everything Transform
to
Stack
Example: Create Instance
1 Operation8 Operations VS
Stack
port
Instance
security
group
Volume
keypair
image
floating IP
LBaas
Operations You Give,
Mistake You’ll Make.
The More
image
flavor
user
role
Port instance
Trove
Sahara
Murano
Magnum
keypairsubnet
network
security
group
Project
load
balance
container volumeFloating IP
volume
alarm
How many operations
to draw this structure?!
Migration
do
Happens...
Withdraw entire resources set by dependency
Stack
Stack
Stack
Stack
No Zombie Resources
Stack
Stack
Stack
Same Resources Structure
Stack
Stack
Stack
Stack
New
Resources Structure on Horizon
Stack
Stack is Updatable
Stack
Get file from others, make control flow clean
type: OS::Heat::SoftwareConfig
config:
get_file: script.sh
Stack
Script.sh
type: OS::Neutron::FloatingIP
depends_on: port_A
Set Dependency cross Resourcess
Stack
Stack
Get Resource Info Direct From Another Resource
type: OS::Nova::Server
properties:
flavor: {
get_resource: flavor}
user_data: {
get_attr: [boot_config, config]}
type: Database_node.yaml
properties:
role: ...
network: ...
flavor: ...
image: ...
Nested Stack Make Management Easy
Stack
Stack
Where
are
Applications?
config:
type: OS::Heat::SoftwareConfig
group: ansible
config: get_file: applicaton_deploy_flow.ansible
deployment:
...
server:
...
Application in Heat
Stack for Application
Image Server SoftwareConfig
SoftwareDeployment
ControlS
cript
Script
server:
type: OS::Nova::Server
user_data_format: SOFTWARE_CONFIG
config:
...
deployment:
...
Application in Heat
Stack for Application
Image Server SoftwareConfig
SoftwareDeployment
ControlS
cript
Script
deployment:
type: OS::Heat::SoftwareDeployment
config: get_resource: config
server: get_resource: server
config:
…
server:
...
Application in Heat
Stack for Application
Image Server SoftwareConfig
Script SoftwareDeployment
Control
Script
Use cases - Ceph
Stack: Ceph
Image Server SoftwareConfig
SoftwareDeployment
Ceph
ansible
control
script
Me Too!
Ceph
Ansible
script
Hi, I pull from Ceph-ansible repo
Use cases - Ceph
Stack: Ceph
Image Server SoftwareConfig
SoftwareDeployment
Ceph
ansible
control
script
Hi, Server!
Here is SoftwareConfig for you,
and with parameter
(role= ceph-monitor)
Go knock yourself out!!!
Ceph
Ansible
script
Use cases - ?
Stack
Image Server SoftwareConfig
?
Ansible
script SoftwareDeployment
?
Ansible
control
script Ansible
Puppet
Script
Salt
Kubelet
Cfn-init
Docker-compose
Example: Application Deployment
1 Operation11 + ? Operations VS
Stack
Write
config
Run
Ansible port
Instance
security
group
Volume
keypair
image
floating IP
LBaas
Collect
information for
other instance
SoftwareConfig Flow
Image
script
Heat-engine
Nova
Server
os-collect-config
os-refresh-config
heat-config
ansible-hook
ansible-playbook
Ansible files
os-apply
-config
Clouds are noisy - servers fail to come up, or die when the
underlying hypervisor crashes or suffers a power failure.
Heat should be resilient and allow concurrent operations
on any sized stack.
convergence_engine = True
Template Heat-API AMQP
Heat-engine
DB
Original Design
Ideal Design
Template Heat-API AMQP
Heat-engineAMQP
DB
Hey worker this
is resource, go
create it!!
Worker
Observer
Current Convergency Design
Current Convergency Design
Template Heat-API AMQP
Heat-engine
AMQP
(engine_
worker)
Worker
DB
Where is
Observer?
How it Interact
between
Convergence Workers?
Traversal Graph
SyncPoint
A
SyncPoint
C
(C,A) => (requirer, required)
SyncPoint
B
(C,B)
SyncPoint
D
(D,C)
leaves
Stack
SyncPoint
*traversal_id
*stack_id
*entity_id
*is_update
input_data
atomic_key
Shall We Trace?
1. create_stack():
Parse template, Create Stack, Validate Stack, and Check Convergence status
Template Heat-API
Heat-engine
Heat-engine
AMQP
Heat-engine
AMQP
(engine_
worker)
Heat-engine
Worker
Worker
Worker
Worker
DB
Stack
2. converge_stack():
Clear previous traversal sync_point on stack (if any)
Heat-engine
Heat-engine
Heat-engine
AMQP
(engine_
worker)
Heat-engine
SyncPoint
Stack
DB
Worker
Worker
Worker
Worker
AMQPTemplate Heat-API
leaves
3. _converge_create_or_update():
Create dependency and sync_point for traversal
Heat-engine
AMQP
(engine_
worker)
Worker
Worker
Worker
Worker
C
D
B
A
SyncPoint
Stack
DB
4. check_resoruce():
Load resource, check current_traversal is equal to stack’s current_traversal.
Also check timeout or finish
leaves
AMQP
(engine_
worker)
Worker
Worker
Worker
Worker
A
C
D
B
A
SyncPoint
Stack
DB
5. _do_check_resoruce():
Try to update or create resource, replace if upadate failed,
clearup from convergence if can’t get the lock
Worker
A
C
D
B
A
SyncPoint
Stack
DB
leaves
6. check_resoruce_update():
Create or update convergence base on action is initial or not
Worker
A
C
D
B
A
SyncPoint
Stack
DB
leaves
7. create_convergence():
Create resource by invoking scheduler: TaskRunner
Worker
A
C
D
B
A
SyncPoint
Stack
DB
leaves
8. create():
Handle resource create failure
Worker
A
C
D
B
A
SyncPoint
Stack
DB
leaves
9. handle_create():
Create resource
Worker
C
D
B
A
SyncPoint
Stack
A
DB
leaves
5-9, 4. check_resoruce():
Load next resource, check current_traversal is equal to stack’s current_traversal.
Go execute and check timeout or finish.
AMQP
(engine_
worker)
Worker
Worker
Worker
Worker
B
C
D
B
SyncPoint
Stack
A
DB
leaves
5-9, 4. check_resoruce():
Load next resource, check current_traversal is equal to stack’s current_traversal.
Go execute and check timeout or finish.
AMQP
(engine_
worker)
Worker
Worker
Worker
Worker
C
D
SyncPoint
Stack
A
C
B
DB
leaves
5-9, 4. check_resoruce():
Load next resource, check current_traversal is equal to stack’s current_traversal.
Go execute and check timeout or finish.
AMQP
(engine_
worker)
Worker
Worker
Worker
Worker
D
SyncPoint
Stack
A
D
DB
B
C
leaves
3. _converge_create_or_update():
Mark completed and purge Database
Heat-engine
AMQP
(engine_
worker)
WorkerSyncPoint
Stack
A
DB
B
C
D
Worker
Worker
Worker
So What Happens If Conflict?
Another Stcak Update Request Join?
Stack SyncPoint will show which Stack traversal is current.
AMQP
(engine_
worker)
Worker
Worker
C
D
SyncPoint
Stack_a
A
C
B
DB
Stack_a
A
Hey, wrong traversal ID here!!
Me!?
leaves
Example: Mass Application Deployment
1 Operation
<20 Min.
> 50 Operations
>100 Min.
VS
Stack
Heat Fleet’s sessions
● inwinSTACK- Heat Up Your Stack - Deep Dive to Heat, Learn How to
Orchestrate Your Cloud - Wednesday, 11:15am
● User/ops session for summit - Wednesday, 3:40pm
● Extending OpenStack Heat to Orchestrate Security Policies and Network
Function Service Chains - Thursday, 9:50am
● Why Reinvent the Wheel? - Using Murano, Heat, Container Clustering and
Ceilometer to Provide Auto--scaling and Enforce Self-Healing Best Practices in
Applications - Thursday, 11:00am
● Heat, Cloud-init & Cloud-config: OpenStack Orchestration Deep Dive, Hands-
On Lab - Thursday, 4:30pm
Q&A

Heat up your stack