DevOps Jungle of Tools, Ran Tavory

Preview:

DESCRIPTION

Between Chef, Puppet, Capistrano, Fabric, Pallet, Deployinator, ControlTier, how do you choose? What tool's good for what? In this session, Ran will present a taxonomy of deployment automation and infrastructure automation tools. Ran will further analyze their capabilities and help you make an informed decision about choosing the right tool for the right DevOps job. Presented at DevOps Con Israel 2013

Citation preview

devops jungle of toolsInfrastructure v/s Deployment automation

@rantav

CTO @ Social Studios TV

Monday, January 28, 13

What is Social Studios?

Monday, January 28, 13

What is Social Studios?

Monday, January 28, 13

What is Social Studios?

Monday, January 28, 13

What is Social Studios?

Monday, January 28, 13

Monday, January 28, 13

devops jungle of tools

Monday, January 28, 13

As learnt by - Myselfat

Monday, January 28, 13

Start with a personal storyMy goal was to:

Deploy appsMaintain infra

Monday, January 28, 13

Start with a personal storyThat’s me 3 years ago.

Monday, January 28, 13

Start with a personal storyThat’s me 3 years ago.

C o n f u s e dWhat should I do?

What should I choose?

I have to maintain infrastructure

But I also have to deploy my apps

Are these the same?

ChefPuppet

ControlTier

CFEngine

...???

Monday, January 28, 13

Monday, January 28, 13

A h a ! ! !

Monday, January 28, 13

I need a tool that:

A h a ! ! !

Monday, January 28, 13

I need a tool that:Maintains Infrastructure

A h a ! ! !

Monday, January 28, 13

I need a tool that:Maintains Infrastructure

A h a ! ! !

ANDDeploy my apps!

Monday, January 28, 13

Maintain InfrastructureANDDeploy my apps ???

Monday, January 28, 13

Maintain InfrastructureANDDeploy my apps ???

I d i d n ’ t f i n d i t

Monday, January 28, 13

???Maintain InfrastructureANDDeploy my apps ???

Monday, January 28, 13

???Maintain InfrastructureANDDeploy my apps ???

B u t W h y ? ? ?

Monday, January 28, 13

They are not the same!Infrastructure

≠App Deployment

Monday, January 28, 13

They are not the same!Infrastructure

≠App Deployment

O h . . .

Monday, January 28, 13

Why are they different?And what do they have in common?

Monday, January 28, 13

And what did I end up using?

Monday, January 28, 13

What did I use?Case 1:

Chef

glu

Monday, January 28, 13

What does chef do?Installs infrastructure

java

databases

etc...

Installs Glu

server and agents

Monday, January 28, 13

What does glu do?Deploy our apps

Tomcat based apps

Monday, January 28, 13

What did I use?Case 2:

Chef

Fabric

Monday, January 28, 13

What does chef do?Provision servers

Install Java, Tomcat

Install DBs

Set up users, keys

logstash

nagios, etc...

Monday, January 28, 13

What does Fabric do?Deploys apps

Tomcat based

or jetty

Notifications

tests

Monday, January 28, 13

Isn’t it easier to use just one tool?

Yes!

Monday, January 28, 13

So why am I using two tools?

Because they are different

Monday, January 28, 13

Let’s take a look at the tools nowInfrastructure

≠App Deployment !!!

Monday, January 28, 13

ChefRecipes, Resources,Convergence.

Monday, January 28, 13

PuppetDefine Desired StateEnforceMonitor

Monday, January 28, 13

CFEngineDesired StateSelf HealingMonitor

Monday, January 28, 13

ControlTierCommand Dispatcher

Monday, January 28, 13

gluDeployment Automation and Monitoring

Monday, January 28, 13

fabricDeploymentand administration

Monday, January 28, 13

CapistranoRemote server automation

Monday, January 28, 13

Hybrid?

So - Chef, Puppet, CFEngine maintain infra

But - can they also deploy applications?

They could...

But - it’s awkward ☹

Example:

Use shef for ad-hoc tasks.

Monday, January 28, 13

Hybrid?

So - glu, fab, cap, CTier can deploy

But - can they also maintain infra?

They could...

But - it’s awkward ☹

Example: Use fabric to deploy mysql.

Monday, January 28, 13

Why awkward?

Because Infrastructure ≠ Deployment automation

Monday, January 28, 13

How is it different?

Let’s see...

Monday, January 28, 13

How is it different?

Infrastructure and application are different in a few ways

Monday, January 28, 13

Confidence

Monday, January 28, 13

ConfidenceDifferent level of Confidence

conf(linux || mysql) > conf(in-house apps)

Monday, January 28, 13

ConfidenceDifferent level of Confidence

conf(linux || mysql) > conf(in-house apps)

Widely used systems (linux, mysql)

Monday, January 28, 13

ConfidenceDifferent level of Confidence

conf(linux || mysql) > conf(in-house apps)

Widely used systems (linux, mysql)

vs in-house apps, limited testing

Monday, January 28, 13

Frequency

Monday, January 28, 13

Frequency

Frequency of change

Monday, January 28, 13

Frequency

Frequency of change

freq(deploy database) ≪ freq(deploy new version)

Monday, January 28, 13

Frequency

Frequency of change

freq(deploy database) ≪ freq(deploy new version)

How often do you deploy a new DB?

every couple of months / years

Monday, January 28, 13

Frequency

Frequency of change

freq(deploy database) ≪ freq(deploy new version)

How often do you deploy a new DB?

every couple of months / years

How often do you deploy new apps?

Dozens a day

Monday, January 28, 13

Control

Monday, January 28, 13

ControlControl over the actual process

Monday, January 28, 13

ControlControl over the actual process

Deployments:

Monday, January 28, 13

ControlControl over the actual process

Deployments:

Control exactly when they happen

Monday, January 28, 13

ControlControl over the actual process

Deployments:

Control exactly when they happen

Notify ppl, monitoring systems, with progress

Monday, January 28, 13

ControlControl over the actual process

Deployments:

Control exactly when they happen

Notify ppl, monitoring systems, with progress

Gradual, controlled and cautious deployments

Monday, January 28, 13

ControlControl over the actual process

Deployments:

Control exactly when they happen

Notify ppl, monitoring systems, with progress

Gradual, controlled and cautious deployments

Test as you go

Monday, January 28, 13

ControlControl over the actual process

Deployments:

Control exactly when they happen

Notify ppl, monitoring systems, with progress

Gradual, controlled and cautious deployments

Test as you go

Maybe rollback

Monday, January 28, 13

HeterogenousHomogenous

Monday, January 28, 13

HeterogenousHomogenous

Heterogeneous v/s Homogenous

Monday, January 28, 13

HeterogenousHomogenous

Heterogeneous v/s Homogenous

Infrastructure lives in Heterogeneous environments

Example: install mysql on ubuntu, centos, osx, win

Monday, January 28, 13

HeterogenousHomogenous

Heterogeneous v/s Homogenous

Infrastructure lives in Heterogeneous environments

Example: install mysql on ubuntu, centos, osx, win

Apps live in Homogenous environments.

Example: Rails apps only need a Rack server

Example: Java apps need only a JVM

Monday, January 28, 13

Who’s code is it?

Monday, January 28, 13

Who’s code is it?

When it’s your code you can:

Instrument it (healthcheck, deployment hooks)

Monday, January 28, 13

Who’s code is it?

When it’s your code you can:

Instrument it (healthcheck, deployment hooks)

If it’s not your code, you have less control

hope to get lucky

or hack around it...

Monday, January 28, 13

Take Chef and Glu

So, for example...

Monday, January 28, 13

Where does Chef stand out?Recipes for almost anything

Databases, App Servers, Languages...

Monday, January 28, 13

Where does Chef stand out?Recipes for almost anything

Databases, App Servers, Languages...Your code ⇒ no recipes

Monday, January 28, 13

Where does Chef stand out?

Heterogeneous environments

Any linux, windows, osx (resource providers)

Monday, January 28, 13

Where does Chef stand out?

Heterogeneous environments

Any linux, windows, osx (resource providers)Deployment environments are Homogenous

Monday, January 28, 13

Where does Chef stand out?

Runs unattended

to assure state

Monday, January 28, 13

Where does Chef stand out?

Runs unattended

to assure stateYour want to monitor it

Monday, January 28, 13

Where does Glu stand out?

Fine control over the deployment process

Monday, January 28, 13

Where does Glu stand out?

Fine control over the deployment processPackaged code ⇒ Not needed

Monday, January 28, 13

Where does Chef stand out?

Status update and monitoring during deployment

Monday, January 28, 13

Where does Chef stand out?

Status update and monitoring during deploymentInfrastracture update - usually taken offline

Monday, January 28, 13

Where does Chef stand out?

High frequency model change

Monday, January 28, 13

Where does Chef stand out?

High frequency model changeLow Frequency

Monday, January 28, 13

Compare

Infrastructure Deployment

Chef ✓ ⍻(shef)

Puppet ✓ ?

Glu ╳ ✓

Fabric ⍻ ✓

Monday, January 28, 13

To sum up

Chef ⇒ Infrastructure

Glu / Fabric / Capistrano ⇒ Applications

Yes - it’s more tools

But - Use the right tool for the job...

Monday, January 28, 13

To sum up

Chef ⇒ Infrastructure

Glu / Fabric / Capistrano ⇒ Applications

Yes - it’s more tools

But - Use the right tool for the job...

Monday, January 28, 13

What does the future hold?

Immutable Servers?

aka Phoenix Servers

vs Snowflake Servers

Pallet?

Monday, January 28, 13

This presentation

Is here:

https://speakerdeck.com/rantav/devops-jungle-of-tools

Monday, January 28, 13

Recommended