BOSH: WHAT,
HOW, WHEN
Dr Nic Williams
@drnic | drnicwilliams.com
VP Dev Evangelism, Engine Yard
Slide 2
Slide 2 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
THE PROBLEM
What it tried to solve
Slide 3
Slide 3 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
THEY
built
THIS
Slide 4
Slide 4 text
ENGINE YARD | @DRNIC | WHAT IS BOSH?
hosted
open source
Slide 5
Slide 5 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
• An app that runs apps
• github: cloudfoundry/vcap
• 40 different jobs
• DIY installation (chef)
open source
Slide 6
Slide 6 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
• cloudfoundry.com
• 40 different jobs
• Lots of code, lots of
deployments
• 1000 CF.com deploys in 1.5 years
hosted
Slide 7
Slide 7 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
complex system
Slide 8
Slide 8 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
getting
more
complex
Slide 9
Slide 9 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
SOLUTION
Cloud Foundry is not self-hosting
BOSH hosts Cloud Foundry
Cloud Foundry hosts your apps
Slide 10
Slide 10 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
Your app
App App App
Slide 11
Slide 11 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
Your app
managed by
cloudfoundry
App App App
CF (40 jobs)
Slide 12
Slide 12 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
BOSH
deploys
cloudfoundry
App App App
CF (40 jobs)
BOSH
Slide 13
Slide 13 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
BOSH
provisions
iaas
App App App
CF (40 jobs)
BOSH
vSphere, AWS
Slide 14
Slide 14 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
BOSH
deploys
cloudfoundry
App App App
CF (40 jobs)
BOSH
vSphere, AWS
https://github.com/cloudfoundry/cf-release
Slide 15
Slide 15 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
BOSH
deploys
openshift
App App App
OpenShift
BOSH
vSphere, AWS
Slide 16
Slide 16 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
MySQL
BOSH
deploys
wordpress BOSH
vSphere, AWS
wp wp wp
nginx
https://github.com/cloudfoundry/bosh-sample-release
Slide 17
Slide 17 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
BOSH
deploys
jenkins
Slv Slv Slv
Gerrit Jenkins
BOSH
vSphere, AWS
https://github.com/cloudfoundry/oss-release
Slide 18
Slide 18 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
BOSH
(9 jobs)
BOSH
deploys
BOSH
BOSH
vSphere, AWS
https://github.com/cloudfoundry/bosh-release
Slide 19
Slide 19 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
Your jobs and
data
BOSH
deploys
your system
BOSH
vSphere, AWS
Slide 20
Slide 20 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
“deploy”
• Boot VMs
• Boot & attach disks
• Attach networking
• Install packages
• Run jobs
Slide 21
Slide 21 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
CORE IDEAS
Deploy and change systems
Slide 22
Slide 22 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
Packages
• Your code and package code
equal citizens
• Deployed together
Slide 23
Slide 23 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
compiled
packages
• Source code pre-compiled
• Instant installation on new
instances
Slide 24
Slide 24 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
orchestration
• Add/remove instances
• Change instance sizes/types
• Upgrade packages
• New instances; not dirty instances
Slide 25
Slide 25 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
ORCHESTRATION
Demo
Slide 26
Slide 26 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
this box 1.0
stemcell
1 vm
0 or 1 attached disk
Assigned IP
packages installed
jobs running
Slide 27
Slide 27 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
orchestrated
changes
1.0 1.0
From...
Slide 28
Slide 28 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
infrastructure
1.0 1.0
From...
to...
1.0 1.0
1.0 1.0
Slide 29
Slide 29 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
1.0 1.0
1.0 1.0
deployments
Slide 30
Slide 30 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
2.0
2.0
2.0
2.0
deployments
Slide 31
Slide 31 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
2.0
2.0
2.0
2.0
add more
Slide 32
Slide 32 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
2.0
2.0
2.0
2.0
2.0
2.0
add more 2.0
2.0
2.0
Slide 33
Slide 33 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
2.0
2.0
2.0
2.0
2.0
2.0
deploy again 2.0
2.0
2.0
Slide 34
Slide 34 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
3.0
deploy again
3.0 3.0
3.0 3.0
3.0 3.0
3.0
3.0
Slide 35
Slide 35 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
3.0 3.0
3.0
3.0 3.0
3.0 3.0
3.0
3.0
canary
Slide 36
Slide 36 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
4.0 3.0
3.0
3.0 3.0
3.0 3.0
3.0
3.0
canary
Slide 37
Slide 37 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
3.0 3.0
3.0
3.0 3.0
3.0 3.0
3.0
3.0
canary
Slide 38
Slide 38 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
replace
instances
1.0
2.0
2.0
3.0
1.0
Slide 39
Slide 39 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
reattach disk
1.0
2.0
2.0
3.0
1.0
Slide 40
Slide 40 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
protected
from errors
1.0
2.0
2.0
3.0
1.0
4.0
Slide 41
Slide 41 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
GET A BOSH
Tutorial for getting started
https://github.com/drnic/bosh-getting-started/
Slide 42
Slide 42 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
https://github.com/drnic/bosh-getting-started/
Slide 43
Slide 43 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
follow this...
https://github.com/drnic/bosh-getting-started/
Slide 44
Slide 44 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
OVERVIEW
Stemcells, Releases and
Deployments
Slide 45
Slide 45 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
3 tiers
• Stemcell
• Release
• Deployment manifest
1.0
1.0
Slide 46
Slide 46 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
stemcells
• The image for booting instances
• AWS has AMIs
• Each instance runs one job
Slide 47
Slide 47 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
1.0
releases
• Packages to install from source
• Jobs to run using monit
• Job Templates rendered by
deployment manifests
Slide 48
Slide 48 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
package
• External source, e.g. mysql
• Internal code, e.g. your app
• They are equal citizens of BOSH
1.0
Slide 49
Slide 49 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
deployment
manifest
• Release version
• Properties for job templates
• Instance types/sizes, disk, regions
(cloud properties)
• Pools of instances
• Network/IPs allocated
Slide 50
Slide 50 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
example • 1 VM running Redis
Slide 51
Slide 51 text
YOUR COMPANY NAME | LONG AND INTERESTING PRESENTATION TITLE | VERSION NO. XX | 06 /02/2012
example
Slide 52
Slide 52 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
redis
• Stemcell
• Package: redis
• Job: redis
‣ uses redis package
‣ runs redis-server via monit
• Deployment manifest
Slide 53
Slide 53 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
package:
redis
Slide 54
Slide 54 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
install
from
source
Slide 55
Slide 55 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
job: redis
Slide 56
Slide 56 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
job
template
properties
Slide 57
Slide 57 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
release
• Packages - source code
• Jobs - processes to run
Slide 58
Slide 58 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
deploy
• Deployment manifest (yaml)
• Specific release & stemcells
• Brings to life: instances, disks,
and processes!
Slide 59
Slide 59 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
deployment
manifest
1 VM to run job
template values
Slide 60
Slide 60 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
deploy it!
• “bosh deploy”
• ... well, there’s more commands
than that...
• Let’s go deeper!
Slide 61
Slide 61 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
STEMCELLS
Base images
Slide 62
Slide 62 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
get a
stemcell
bosh
public
stemcells
bosh
download
public
stemcell
bosh
upload
stemcell
Slide 63
Slide 63 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
uploaded
stemcell
Slide 64
Slide 64 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
the right
stemcell
$
bosh
public
stemcells
+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐+
|
Name
|
Url
|
+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐+
|
micro-‐bosh-‐stemcell-‐0.1.0.tgz
|
...
|
|
bosh-‐stemcell-‐aws-‐0.5.1.tgz
|
...
|
|
bosh-‐stemcell-‐0.5.2.tgz
|
...
|
+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐+
ami format
Slide 65
Slide 65 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
RELEASES
Jobs and
the dependent Packages
Slide 66
Slide 66 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
sample
wordpress
system
MySQL
BOSH
AWS
wp wp wp
nginx
Slide 67
Slide 67 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
sample
wordpress
release
MySQL
wp wp wp
nginx
jobs
Slide 68
Slide 68 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
sample
wordpress
deployment
MySQL
wp wp wp
nginx
jobs
deployed instances
Slide 69
Slide 69 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
create bosh
release
git
clone
https://github.com/cloudfoundry/
bosh-‐sample-‐release.git
cd
bosh-‐sample-‐release
bosh
create
release
bosh
upload
release
bosh
status
Jobs
+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+
|
Name
|
Dev
|
Final
|
+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+
|
mysql
|
0.1
|
n/a
|
|
nginx
|
0.1
|
n/a
|
|
wordpress
|
0.1
|
n/a
|
+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+
Slide 70
Slide 70 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
versioned
releases
$
cat
dev_releases/wordpress-‐1.yml
-‐-‐-‐
packages:
-‐
name:
apache2
version:
0.1-‐dev
sha1:
0659d0ca2d038feae43119ea46b704...
dependencies:
[]
-‐
name:
mysql
version:
0.1-‐dev
...
Slide 71
Slide 71 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
specific
packages
$
cat
dev_releases/wordpress-‐1.yml
-‐-‐-‐
packages:
-‐
name:
apache2
version:
0.1-‐dev
sha1:
0659d0ca2d038feae43119ea46b704...
dependencies:
[]
-‐
name:
mysql
version:
0.1-‐dev
...
Slide 72
Slide 72 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
specific
jobs
$
cat
dev_releases/wordpress-‐1.yml
...
jobs:
-‐
name:
mysql
version:
0.1-‐dev
sha1:
08faee9e9ba544e7d664846b0eb4c758d
-‐
name:
nginx
version:
0.1-‐dev
sha1:
3ccc2f956a4253721b0707ed357f3f2a8
-‐
name:
wordpress
version:
0.1-‐dev
sha1:
e5a671095ad6ed539700591b3bdd3e098
...
Slide 73
Slide 73 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
DEPLOY!
Let’s boot some instances!
Slide 74
Slide 74 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
deploy
manifest
-‐-‐-‐
name:
wordpress
director_uuid:
576cd86b-‐cdda-‐4b93-‐8f72-‐a43
release:
name:
wordpress
version:
1
...
specific release
Slide 75
Slide 75 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
job
properties
properties:
nginx:
workers:
1
wordpress:
admin:
[email protected]
port:
8008
servers:
-‐
23.21.64.192
servername:
myblog.com
db:
name:
wp
user:
wordpress
pass:
w0rdpr3ss
mysql:
address:
23.21.64.193
port:
3306
password:
rootpass
template
data
Slide 76
Slide 76 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
deploy bosh
deploy
Slide 77
Slide 77 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
UPGRADE!
Unleash the
orchestration power
of BOSH
Slide 78
Slide 78 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
1.0 1.0
1.0 1.0
remember this!
Slide 79
Slide 79 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
2.0
2.0
2.0
2.0
remember this!
Slide 80
Slide 80 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
package
changed
$
cat
dev_releases/wordpress-‐2.yml
-‐-‐-‐
packages:
-‐
name:
nginx
version:
0.2-‐dev
sha1:
32452345ca2d038feae43119ea46b704...
dependencies:
[]
-‐
name:
mysql
version:
0.1-‐dev
...
Slide 81
Slide 81 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
change
manifest
-‐-‐-‐
name:
wordpress
director_uuid:
576cd86b-‐cdda-‐4b93-‐8f72-‐a43
release:
name:
wordpress
version:
2
...
specific release
Slide 82
Slide 82 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
deploy bosh
deploy
Slide 83
Slide 83 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
TOOLS
Make releases faster
Slide 84
Slide 84 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
handcrafted
releases
• Find source tgz
• Write installers
• Write monit scripts
• Write config files
Slide 85
Slide 85 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
basics
gem
install
bosh-‐gen
bosh-‐gen
new
simple-‐redis
cd
simple-‐redis
bosh-‐gen
package
redis
bosh-‐gen
job
redis
-‐d
redis
Slide 86
Slide 86 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
alternately
• Opscode-like collection of
packages and jobs
Slide 87
Slide 87 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
WHEN
When to use BOSH?
Slide 88
Slide 88 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
complete
control
• Describe everything explicitly
• Orchestration between
deployments
Slide 89
Slide 89 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
multicloud
• Cloud Provider Interface (CPI)
• vSphere
• AWS
• OpenStack (via PistonCloud)
• 12 methods to implement
Slide 90
Slide 90 text
ENGINE YARD | DR NIC WILLIAMS | BOSH
downsides
• Prepared to throw VMs at it
• Cannot use OS packaging
• Currently for Ubuntu
• No RAID (0 or 1 disk)