2013 05-openstack-israel-heat

Post on 15-Jan-2015

1,043 views 0 download

Tags:

description

slides on Heat and influences presented at OpenStack Israel May 2013

transcript

What’s Up Next for Heat?

Alex Heneveld / @ahtweetinOpenStack Israel27 May 2013

CloudIt’s not just about VM’s

It’s about storage, networking, maas, ...

It’s not just about VM’s

Cloud

Ultimately it’s about applications

CloudIt’s not just about VM’s

It makes the clouds rise

Declarative — OpenStack Heat (Grizzly) and AWS CloudFormationProcedural — Apache Whirr, Gigaspaces Cloudify, Cloudsoft BrooklynOpenStack Summit — Red Hat, RAX, IBM, HP, Cloudsoft, OASIS TOSCA and CAMPDSLs in Progress — CAMP PDP and OpenStack Heat (Havana)

Approaches to Applications in the Cloud

AWS CloudFormation

{ "AWSTemplateFormatVersion" : "2010-09-09", "Description" : "WordPress is web software …", "Parameters" : { "KeyName" : { "Description" : "Name of an existing EC2 KeyPair for SSH access", "Type" : "String" }, ... }, "Mappings" : { "AWSInstanceType2Arch" : { "m1.small" : { "Arch" : "64" }, "m1.large" : { "Arch" : "64" }, ... }, "AWSRegionArch2AMI" : { "us-east-1" : { "32" : "ami-31814f58", "64" : "ami-1b814f72" }, ... } }, "Resources" : { "WebServer": { "Type": "AWS::EC2::Instance", "Metadata" : { "AWS::CloudFormation::Init" : { "config" : { "packages" : { "yum" : { "gcc-c++" : [], "make" : [],

...

{ "AWSTemplateFormatVersion" : "2010-09-09", "Description" : "WordPress is web software …", "Parameters" : { "KeyName" : { "Description" : "Name of an existing EC2 KeyPair for SSH access", "Type" : "String" }, ... }, "Mappings" : { "AWSInstanceType2Arch" : { "m1.small" : { "Arch" : "64" }, "m1.large" : { "Arch" : "64" }, ... }, "AWSRegionArch2AMI" : { "us-east-1" : { "32" : "ami-31814f58", "64" : "ami-1b814f72" }, ... } }, "Resources" : { "WebServer": { "Type": "AWS::EC2::Instance", "Metadata" : { "AWS::CloudFormation::Init" : { "config" : { "packages" : { "yum" : { "gcc-c++" : [], "make" : [],

...

"Resources" : { "WebServer": { "Type": "AWS::EC2::Instance"

AWS CloudFormation

"Resources" : { "WebServer": { "Type": "AWS::EC2::Instance"

Parameters

Mappings(config metadata)

WaitConditions &WaitHandles

(orchestration)

Outputs

Functions

AWS CloudFormation

"Resources" : { "WebServer": { "Type": "AWS::EC2::Instance"

AWS CloudFormation

"Resources" : { "WebServer": { "Type": "AWS::EC2::Instance"

AWS CloudFormation

"Type": "AWS::AutoScaling::AutoScalingGroup"

"Type": "AWS::EC2::EIP"

"Resources" : { "WebServer": { "Type": "AWS::EC2::Instance"

"Type": "AWS::SQS::Queue"

"Type": "AWS::CloudFormation::Stack"

"Type": "AWS::S3::Bucket"

AWS CloudFormation

"Type": "AWS::AutoScaling::AutoScalingGroup"

"Type": "AWS::EC2::EIP"

"Resources" : { "WebServer": { "Type": "AWS::EC2::Instance"

"Type": "AWS::SQS::Queue"

"Type": "AWS::CloudFormation::Stack"

"Type": "AWS::S3::Bucket"

AWS CloudFormation

Composition!

— Limited to AWS cloud

— Limited to AWS concepts

— Cumbersome to write

— Limited dependency injection

Nice, but:

AWS CloudFormation

— CloudFormation clone

— Targetting OpenStack resources and AWS compatibility

— Adds YAML support (comments and easier)

— Multi-cloud support using Apache Deltacloud

OpenStack Heat

(AWS CloudFormation){ "AWSTemplateFormatVersion" : "2010-09-09", "Description" : "WordPress is web software …", "Parameters" : { "KeyName" : { "Description" : "Name of an existing EC2 KeyPair for SSH access", "Type" : "String" }, ... }, "Mappings" : { "AWSInstanceType2Arch" : { "m1.small" : { "Arch" : "64" }, "m1.large" : { "Arch" : "64" }, ... }, "AWSRegionArch2AMI" : { "us-east-1" : { "32" : "ami-31814f58", "64" : "ami-1b814f72" }, ... } }, "Resources" : { "WebServer": { "Type": "AWS::EC2::Instance", "Metadata" : { "AWS::CloudFormation::Init" : { "config" : { "packages" : { "yum" : { "gcc-c++" : [], "make" : [],

...

OpenStack Heat

OpenStack Heat

HeatTemplateFormatVersion: 2012-12-12 Description: WordPress is web software ... Parameters:   KeyName: Description: Name of an existing EC2 KeyPair for SSH access Type: String ... Mappings:   AWSInstanceType2Arch:     m1.small: {Arch: '32'}     m1.large: {Arch: '64'} ...   DistroArch2AMI:     F18: {'32': F18-i386-cfntools, '64': F18-x86_64-cfntools}, ... Resources:   WebServer:     Type: AWS::EC2::Instance     Metadata:       AWS::CloudFormation::Init:         config:           packages:             yum:               gcc-c++: []               make: []

...

— CloudFormation clone

— Targetting OpenStack resources and AWS compatibility

— Adds YAML support (comments and easier)

— Multi-cloud support using Apache Deltacloud

OpenStack Heat

Available NOW in Grizzly!

OpenStack Heat

— Still limited to selected clouds

— Still limited in concepts

— Only slightly less cumbersome to write

— Very limited dependency injection

But...

Procedural Approach

10 INPUT "What app do you like? ", A$20 INPUT "What cloud do you like? ", C$30 GOSUB 10040 END

100 REM TODO deploy C$ to A$110 RETURN

Procedural Approach

— Millions of lines of bash, chef, python, ruby, java, ... or ...

— Apache Whirr

— Gigaspaces Cloudify

— Brooklyn and Cloudsoft AMP

Apache Whirr

— Apache top level project

— Deploy multi-node applications— Hadoop, Hama, Mahout, web,

Cassandra & many more

— Define topologies declaratively— Add new roles, configuration,

constraints and wiring procedurally

provision

install

configure

manage

Apache Whirr

— Apache top level project

— Deploy multi-node applications— Hadoop, Hama, Mahout, web,

Cassandra & many more

— Define topologies declaratively— Add new roles, configuration,

constraints and wiring procedurally

$ whirr launch-cluster \ --cluster-name=hbase \ --instance-templates='1 hbase-master,6 hbase-regionserver'

Apache Whirr

— Apache top level project

— Deploy multi-node applications— Hadoop, Hama, Mahout, web,

Cassandra & many more

— Define topologies declaratively— Add new roles, configuration,

constraints and wiring procedurally

spec = new ClusterSpec();spec.setProvider("cloudservers-uk");spec.setIdentity(apikey);spec.setCredential(secret);spec.setClusterName("hbase");spec.setInstanceTemplates(ImmutableList.of( new InstanceTemplate(1, "hbase-master"), new InstanceTemplate(6, "hbase-regionserver")));

cluster = new ClusterController().launchCluster(spec);

— Limited parameterisation

— Defining new roles requires coding

— Strict phases limit applicability

But...

— Composable to one dimension

— Portable locations support

— Pluggable with bash, Chef, Puppet, and more

Apache Whirr

Gigaspaces Cloudify

— Apache-licensed Open PaaS Stack— Deployment and Management

— Build applications declaratively— Define services procedurally— Configure auto-scaling declaratively

Gigaspaces Cloudify

— Apache-licensed Open PaaS Stack— Deployment and Management

— Build applications declaratively— Define services procedurally— Configure auto-scaling declaratively

application {  name="petclinic"  service {     name = "mysql"   }   service {     name = "tomcat"     dependsOn = ["mysql"]   } }

Gigaspaces Cloudify

— Apache-licensed Open PaaS Stack— Deployment and Management

— Build applications declaratively— Define services procedurally— Configure auto-scaling declaratively

service {  name "mysql"  icon "mysql.jpg"  type "DATABASE"

  lifecycle{     install "mysql_install.groovy"     start "mysql_start.groovy"     ...  }}

Gigaspaces Cloudify

— Apache-licensed Open PaaS Stack— Deployment and Management

— Build applications declaratively— Define services procedurally— Configure auto-scaling declaratively

def installLinuxMysql(config,context,builder,currVendor,installScript,myCnfObject) {" builder.sequential {" " chmod(dir:"${context.serviceDirectory}", perm:"+x", includes:"*.sh")" " exec(executable: "${context.serviceDirectory}/${installScript}",failonerror: "true")}...switch (currVendor) { case ["Ubuntu", "Debian", "Mint"]: context.attributes.thisInstance["binFolder"]="/usr/bin" installLinuxMysql(config,context,builder,currVendor,"installOnUbuntu.sh",myCnfObject) ...

Gigaspaces Cloudify

— Apache-licensed Open PaaS Stack— Deployment and Management

— Build applications declaratively— Define services procedurally— Configure auto-scaling declaratively

if sudo grep -q -E '[^!]requiretty' /etc/sudoers; then echo "Defaults:`whoami` !requiretty" | sudo tee /etc/sudoers.d/`whoami` >/dev/null    sudo chmod 0440 /etc/sudoers.d/`whoami`fisudo apt-get -y -q update || error_exit $? "Failed on: sudo apt-get -y update"killMySqlProcesssudo apt-get -y -q purge mysql-client* mysql-server* mysql-common*sudo rm -rf /etc/mysql || error_exit $? "Failed on: sudo rm -rf /etc/mysql"sudo DEBIAN_FRONTEND='noninteractive' apt-get -o Dpkg::Options::='--force-confnew' -q -y \ install mysql-server-core mysql-server mysql-client mysql-common || error_exit $? "Failed ... ”

Gigaspaces Cloudify

— Apache-licensed Open PaaS Stack— Deployment and Management

— Build applications declaratively— Define services procedurally— Configure auto-scaling declaratively

scalingRule {   serviceStatistics {     metric "Requests per second"     movingTimeRangeInSeconds 20   }

  highThreshold {     value 100     instancesIncrease 1   } }

— Defining new services requires coding

But...

— Composable to one dimension

— Parameterisable recipes

— Portable locations support

— Pluggable with bash, Chef, Puppet, and more

Gigaspaces Cloudify

Brooklyn & Cloudsoft AMP

— Brooklyn = Apache-licensed open-source

— AMP = Enterprise + Support

— Deployment and Management of Anything

— Hierarchical Autonomic Policies

— Define blueprints procedurally

Brooklyn

Contention ManagementCustom PaaSBig Data

public class MyWebCluster extends AbstractApplication implements MyWebClusterConstants { public void init() { MySqlNode mysql = addChild(EntitySpecs.spec(MySqlNode.class) .configure("creationScriptUrl", DB_SETUP_SQL_URL)); ControlledDynamicWebAppCluster web = addChild(EntitySpecs.spec( ControlledDynamicWebAppCluster.class) .configure(WebAppService.HTTP_PORT, PortRanges.fromString("8080+")) .configure(JavaWebAppService.ROOT_WAR, WAR_PATH) .configure(javaSysProp("brooklyn.example.db.url"), formatString("jdbc:%s%s?user=%s\\&password=%s", attributeWhenReady(mysql, MySqlNode.MYSQL_URL), DB_TABLE, DB_USERNAME, DB_PASSWORD)). .configure(JcloudsLocationConfig.MIN_RAM, 2048) .configure(JcloudsLocationConfig.TEMPLATE_SPEC, "osFamily=centos,os64Bit=true") ); }

}

Brooklyn: Nested Elastic Blueprints

public class MyWebCluster extends AbstractApplication implements MyWebClusterConstants { public void init() { MySqlNode mysql = ... ControlledDynamicWebAppCluster web = ... web.addEnricher(HttpLatencyDetector.builder(). url(ROOT_URL). rollup(10, SECONDS).build());

web.getCluster().addPolicy(AutoScalerPolicy.builder(). metric(REQUESTS_PER_SECOND_IN_WINDOW_PER_NODE). metricRange(10, 100).sizeRange(2, 5).build());

addEnricher(SensorPropagatingEnricher.newInstanceListeningTo(web, ROOT_URL, REQUESTS_PER_SECOND_IN_WINDOW, REQUEST_LATENCY_IN_SECONDS_IN_WINDOW)); }

}

Brooklyn: Policies, Enrichers and KPI’s

Brooklyn

— Defining blueprints requires coding

But...

— Composable and substitutable

— Parameterisable blueprints

— Portable and powerful locations support

— Pluggable with VM images, Heat, Chef, more

Applications

— Components (IaaS-resources)

— DeclarativeInfrastructure

— Procedural

— Extensible (new resources)

— Portable (hybrid, metal)

— Management

— Composable (stacks)

Heat in Grizzly

Man

agem

ent

Com

posa

ble

Decl

arat

ive

Com

pone

nts

Exte

nsib

le

Port

able

thanks largely to Red Hat

Portland Design Summit — Heat

Man

agem

ent

Com

posa

ble

Decl

arat

ive

Port

able

Com

pone

nts

Exte

nsib

le

Portland Design Summit — Heat

Man

agem

ent

Com

posa

ble

Decl

arat

ive

Port

able

Com

pone

nts

Exte

nsib

lelots of new interest and ideas

Portland Design Summit — Heat

Com

posa

ble

Decl

arat

ive

Com

pone

nts

Man

agem

ent

Port

able

Ease

-of-

Use

Exte

nsib

leingredients from Brooklyn, Whirr, OoO and others

Portland Design Summit — Heat

Com

posa

ble

Decl

arat

ive

Com

pone

nts

Man

agem

ent

Port

able

Exte

nsib

le

Auto

-wiri

nga special ingredient from Rackspace

Ease

-of-

Use

Portland Design Summit — Heat

Com

posa

ble

Decl

arat

ive

Com

pone

nts

Man

agem

ent

Exte

nsib

le

Auto

-wiri

ng

Rela

tions

hips

Ease

-of-

Use

Port

able

a special ingredient from IBM

Man

agem

ent

Com

posa

ble

Decl

arat

ive

Com

pone

nts

Auto

-wiri

ng

Rela

tions

hips

Exte

nsib

le

Ease

-of-

Use

Port

able

Portland Design Summit — Heat

Heat in Havana

Man

agem

ent

Com

posa

ble

Decl

arat

ive

Com

pone

nts

Auto

-wiri

ng

Rela

tions

hips

Exte

nsib

le

Ease

-of-

Use

Port

able

ConcurrentDistributedResilientFunctions / DI

Heat in Havana

Man

agem

ent

Com

posa

ble

Decl

arat

ive

Com

pone

nts

Auto

-wiri

ng

Rela

tions

hips

Exte

nsib

le

Ease

-of-

Use

Port

able

ConcurrentDistributedResilientFunctions / DIStandards ?

OasisTOSCA

http://www.oasis-open.org/committees/tosca/

Topology and Orchestration Specification for Cloud Applications

Modeling Topologies with TOSCA Service  Topologies  are  described  using  the  TOSCA  “Meta-model”:

Artifacts Describe Installables and Executables required to

instantiate and manage a service. Currently, they include:

Implementation Artifacts: – Executables or Plans that implement  a  Node’s  

or  Relationship’s  Operations (e.g. a Bash script) Deployment Artifacts:

– Installables of the components (e.g. a TAR file)

A  service’s  Topology Model is included in a TOSCA Service Template which is packaged and shared, along with all dependent artifacts, as a TOSCA Cloud Service Archive (CSAR)

Service Templates Group the nodes and relationships that make up

a  service’s  topology – Allowing modeling of sub-topologies

Service Templates “look  like  nodes” enabling: Composition of applications from one or more

service templates Substitution of abstract Node types with

available service templates of the same type

Nodes Represent Components of an application or service

and their Properties. Example nodes include: – Infrastructure: Compute, Network, Storage, etc. – Platform: OS, VM, DB, Web Server, etc. – Granular: functional Libraries, Modules, etc.

Include Operations which are the management functions for the node – e.g. deploy(), start(), stop(), connect(), etc.

Export their dependencies on other nodes as Requirement and Capabilities

Relationships Represent the logical Relationships between

nodes – e.g.  “hostedOn”,  “connectsTo”,  etc.

Describes the valid Source and Target nodes they are designed to couple – e.g. source  “web application”  node  is  designed  

to  “connectTo”  a  target  “database”  node Have their own Properties and Constraints

Slide origin: IBM

TOSCA: Modelling Topologies

<Definitions id="PayrollDefinitions" targetNamespace="http://www.example.com/ste" xmlns:pay="http://www.example.com/ste/Types"> <Import namespace="http://www.example.com/ste/Types" location="http://.../PayrollTypes.tosca" importType=" http://docs.oasis-open.org/tosca/ns/2011/12"/> <ServiceTemplate id="Payroll" name="Payroll Service Template"> <TopologyTemplate ID="PayrollTemplate"> <NodeTemplate id="Payroll Application" type="pay:ApplicationNodeType"> <DeploymentArtifacts> <DeploymentArtifact name="PayrollEAR" type="http://..../CSARref"> EARs/Payroll.ear </DeploymentArtifact> </DeploymentArtifacts> </NodeTemplate> <NodeTemplate id="Application Server" type="pay:ApplicationServerNodeType"> <DeploymentArtifacts> <DeploymentArtifact name="ApplicationServerImage" type="http://.../AMIref"> ami-edf2cf99 </DeploymentArtifact> </DeploymentArtifacts> </NodeTemplate> <RelationshipTemplate id="deployed_on" type="pay:deployed_on"> <SourceElement ref="Payroll Application"/> <TargetElement ref="Application Server"/> </RelationshipTemplate> </TopologyTemplate> </ServiceTemplate></Definitions>

TOSCA: Sample Definition

— Fails the “ease-of-use” test

— Does not standardise an API

But...

— Powerful and broad modelling coverage

— Workflow, locations, substitution

— Relatively mature

TOSCA

OasisCAMP

www.cloudspecs.org

Cloud Application Management Platform

http://www.oasis-open.org/committees/camp/

CAMP: Objectives and Non-Objectives

— Software

— an Orchestration Spec

— a Modelling System

But CAMP is NOT

— a REST API

— for Deployment and Management

— of Applications

It provides a flexible way to use many platforms.Interoperability.

CAMP: Key Concepts

Clients

REST

Platform

PlatformComponent

Template

RequirementType

PlatformComponent

TemplatePlatformComponent

Template

RequirementType

App ComponentType

App ComponentType

Clients Platform

PlatformComponent

Template

RequirementType

PlatformComponent

TemplatePlatformComponent

Template

RequirementType

App ComponentType

App ComponentType

PDP = Platform Deployment Plan

(blueprint)

— Deployment PlanCAMP: Key Concepts

DSL & REST

App ComponentType

PDP = Platform Deployment Plan

(blueprint)

CAMP: Key Concepts

Clients

REST

Platform

PlatformComponent

Template

RequirementType

PlatformComponent

TemplatePlatformComponent

Template

RequirementType

App ComponentType

— Creating Templates

POST

App ComponentTemplate

Clients

REST

Platform

PlatformComponent

Template

RequirementType

PlatformComponent

TemplatePlatformComponent

Template

RequirementType

App ComponentType

App ComponentType

— ResolutionCAMP: Key Concepts

AssemblyTemplate(blueprint)

PDP = Platform Deployment Plan

(blueprint)POST

CAMP: Key Concepts

Clients

REST

Platform

PlatformComponent

Template

RequirementType

PlatformComponent

TemplatePlatformComponent

Template

RequirementType

App ComponentType

App ComponentType

App ComponentTemplate

RequirementType

PlatformComponent

Template

RequirementType

App ComponentType

— Resolution

AssemblyTemplate(blueprint)

POST

AssemblyTemplate(blueprint)

CAMP: Key Concepts

Clients

REST

Platform

PlatformComponent

Template

RequirementType

PlatformComponent

TemplatePlatformComponent

Template

RequirementType

App ComponentType

App ComponentType

App ComponentTemplate

— Resolution

200

AssemblyTemplate

POST

AssemblyTemplate(blueprint)

CAMP: Key Concepts

Clients

REST

Platform

PlatformComponent

Template

RequirementType

PlatformComponent

TemplatePlatformComponent

Template

RequirementType

App ComponentType

App ComponentType

App ComponentTemplate

— Deployment

Assembly(blueprint) Platform

Component

PlatformComponent

App Component

AssemblyTemplate(blueprint)

CAMP: Key Concepts

Clients

REST

Platform

PlatformComponent

Template

RequirementType

RequirementType

App ComponentType

App ComponentType

App ComponentTemplate

— Deployment

POST

PlatformComponent

Template

PlatformComponent

Template

Assembly(blueprint) Platform

Component

PlatformComponent

App Component

CAMP: Key Concepts

Clients

REST

Platform

— Deployment

Assembly(blueprint) Platform

Component

PlatformComponent

App Component

AssemblyTemplate(blueprint)

PlatformComponent

Template

App ComponentTemplate

PlatformComponent

Template

POST

200

Assembly

CAMP

— depends on orchestrations supporting this

— wants standardised requirement and component types

— still needs a nice DSL

But...

— all very general

— designed to map on to a wide range of orchestrationsPaaS, TOSCA, Brooklyn, Heat

— OSS code in progressgithub.com/brooklyncentral/camp-server

CAMP: PDP/Blueprint DSL (work in progress)

Parameters

Components

Requirements

Functionsparameters & sensors

Outputs

*

*

CAMP: PDP/Blueprint DSL (work in progress)

Parameters

Functionsparameters & sensors

Outputs

*

*

components: my_app: type: WAR content: hello.war requirements: hosted_on: javaVersion: [1.7,)

Mappings(config metadata)

WaitConditions &WaitHandles

(orchestration)

Parameters

components: my_instance: type: server ram: 2048m requires: connects_to: target: my_database

Heat: New HOT DSL (also work in progress)

Functions

Outputs

HeatOrchestration

Template

Coming inHavana

Heat in Havana

Man

agem

ent

Com

posa

ble

Decl

arat

ive

Com

pone

nts

Auto

-wiri

ng

Rela

tions

hips

Exte

nsib

le

Ease

-of-

Use

Port

able

ConcurrentDistributedResilientFunctions / DI

Wrap-Up

It’s about the apps.Come get involved!

Declarative — OpenStack Heat (Grizzly) and AWS CloudFormationProcedural — Apache Whirr, Gigaspaces Cloudify, Cloudsoft BrooklynOpenStack Summit — Red Hat, RAX, IBM, HP, Cloudsoft, OASIS TOSCA and CAMPDSLs in Progress — CAMP PDP and OpenStack Heat (Havana)

Thank you.alex.heneveld@cloudsoftcorp.com

@ahtweetin