Transcript
Page 1: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Mentoring Devs Into DevOpsJustin Carmony Director of Development Deseret Digital Media

Page 2: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
Page 3: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Lets Measure The Audience

• Who here is a…

• System Administrator?

• Developer?

• Manager / Management?

• “DevOp?”

Page 4: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Confession:I’m a Developer

Page 5: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
Page 6: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Self-Taught OpsBecause There Was No One Else To Do It

Page 7: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

About Me• Director of Development

for Deseret Digital Media

• Utah PHP UsergroupPresident

• I Make (and Break) Web Stuff (10 years)

• Salt User in Production since 0.8

(I <3 Salt)

Page 8: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

This Presentation• Lessons learned at DDM & previous jobs

• Insight into our process of increasing “DevOps”

• We’re still learning, but this what we’ve found.

• Slides will be posted online, so don’t worry about copying slide content.

• Feel free to ask on-topic questions during, and we’ll have questions at the end.

Page 9: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

About DDM

• Deseret Digital Media runs local website like KSL.com, DeseretNews.com

• Running National and International Websites like OK.com, familia.com.br, etc.

• ~10 million pageviews a day across sites.

• ~150 internal VMs, a few dozen physical machines, some AWS sprinkled around.

Page 10: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Lets Start With a Story!

Page 11: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

You Work for an Awesome Tech Company

Page 12: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Team Is Working Hard to Build New Things!

Page 13: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

You launch your awesome product!

Page 14: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

A Few More Features…

Page 15: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

… and next thing you know…

Page 16: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
Page 17: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Awesome Job Team, We Rock!

Page 18: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
Page 19: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

We Need !Real-Time XYZ Feature!

ASAP!

Page 20: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

We Need !Real-Time XYZ Feature!

ASAP!

Page 21: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

We Need !Real-Time XYZ Feature!

ASAP!

&#$%!

Page 22: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
Page 23: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
Page 24: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

“Huh, it works if you ! just turn off caching…”!

- Dev @ 80th Hour This Week

Page 25: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
Page 26: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

“I’m sure this ! will work…”

Page 27: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
Page 28: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
Page 29: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
Page 30: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

“Our servers are melting!”

Page 31: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
Page 32: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
Page 33: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
Page 34: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
Page 35: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
Page 36: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
Page 37: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

“We Need a Better Solution!”

Page 38: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

So…

Page 39: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Where Do We Start?

Page 40: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
Page 41: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
Page 42: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
Page 43: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
Page 44: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

We Have This Problem

Page 45: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Challenges We Faced

• Giant mesh-up of technologies

• Tightly-coupled & fragile infrastructure

• Debugging production only bugs was difficult

• Bugs that were part code, part environment were a nightmare to track down.

Page 46: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
Page 47: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
Page 48: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

So One Day… We Had A Genius Idea!

Page 49: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Lets Hire a DevOp!

Page 50: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

I’m Not JokingWe Actually Said This

Page 51: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Two Problems with this “Idea”

Page 52: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Problem #1 - We Didn’t Understand What We Really Wanted

Page 53: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Step 1: Hire a DevOp!

Step 2: ????????????!

Step 3: Profit!

Page 54: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Step 1: Hire a DevOp!

Step 2: ????????????!

Step 3: Profit! Everything Works !Perfectly!

Page 55: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Problem #2 - People Who Are Great At Dev & Ops Are Hard To Find

Page 56: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Expectation:

Page 57: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Reality:

Page 58: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Honest Team Discussion: What is it we’re really looking for?

Page 59: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

We Discovered a Few Things

Page 60: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

What does DevOps Mean To Us?

• DevOps: Dev & Ops, a Culture of Collaboration

• Our Goal: “10 deploys a day without issues”

• Everyone shares the goal of quick development of features AND a stable system that stays up.

Page 61: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Team StructureDevs: 30 Ops: 2

Page 62: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Team StructureDevs: 30 Ops: 2

DevOps: 1

Page 63: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Team StructureDevs: 30 Ops: 2

DevOps: 1

Page 64: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Team StructureDevs: 30 Ops: 2

DevOps: 1

Hiring one person won’t just solve all our problems!

Page 65: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Team Realizations

• Hardest problem already solved: awesome team

• No foreseeable rapid expansion, must operate at our current scale

• Each Project’s Director of Development was acting as the bridge between Dev and Ops, but would become a bottleneck.

Page 66: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Teams Already Had Some Ad-Hoc DevOps Tools

- Real-time Logging - Capistrano Deploys

- Nagios Alerts - Server Metrics - Puppet for File Mgmt

- App Stats w/ Graphite - Graphite Dashboards - Salt for Cfg Management

- Homebrewed Metrics Sys. - Homebrewed Alert System

Page 67: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Teams Already Had Some Ad-Hoc DevOps Tools

- Real-time Logging - Capistrano Deploys

- Nagios Alerts - Server Metrics - Puppet for File Mgmt

- App Stats w/ Graphite - Graphite Dashboards - Salt for Cfg Management

- Homebrewed Metrics Sys. - Homebrewed Alert System

Page 68: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Step 1: Hire a DevOp!

Step 2: ????????????!

Step 3: Profit! Everything Works !Perfectly!

Page 69: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Step 1: Hire a DevOp!

Step 2: ????????????!

Step 3: Profit! Everything Works !Perfectly!

Page 70: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

We Formed A Strategy

Page 71: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Step #1: Promote Dev to DevOp Role

Page 72: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

WAIT!Isn’t that the advice you just

said was a bad idea?!

Page 73: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

DevOp Engineer

• Well Defined Role:

• Ownership over the TOOLS to improve DevOps efforts.

• Resource for other teams to help use DevOps Tools.

• Easy to work with, aptitude for systems & ops, likes to try new things.

Page 74: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Promoting From Within

• A seasoned dev for your team already knows:

• Your Pain Points

• Your System’s Quirks

• How the “Chaos Works”

• Knows the people & personalities on your team

Page 75: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Step #2: Change Team Structure

Page 76: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Team StructureDevs: 30 Ops: 2

Page 77: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Team StructureDevs: 30 Ops: 2

Page 78: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Team StructureGoal: Spread Out Expertise By Increasing

Ops Experience & Skills Among Devs

Dev Ops

Page 79: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Team StructureGoal: Spread Out Expertise By Increasing

Ops Experience & Skills Among Devs

Dev Ops

Page 80: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Team Structure

Dev Ops

Page 81: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Team Structure

Dev Ops

Page 82: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Increasing Ops Among Devs

• Identify Devs who liked “Ops” & wanted to Learn

• Pair Dev with Op / Director

• Learning Dev works on things, not Op /Director.

• Pair program if needed.

Page 83: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Step #3: Increase Everyone’s Insight

Page 84: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Step #3: Increase Everyone’s Insight

Page 85: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
Page 86: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Metrics• Everyone has access to Network, Server, and

Application Metrics.

• Consolidate & reduce places to look. We try to pipe everything to StatsD / Graphite

• Each developer trained to add & track metrics in production.

• We’re okay with 98% uptime of stats to avoid complexity.

Page 87: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
Page 88: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Real-Time Logging

Page 89: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Real-Time Logging• Harder & more complicated at scale

• Still trying to solve well, we have lots of logs.

• Start with small window of data (i.e. 48 hours) and start to expand window.

• We’re trying Logstash, ElasticSearch, and Kibana right now.

• Generate Statistics off our Logs

Page 90: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Tracking Changes

• Everything, everything, everything in git (we use GitHub)

• Everyone has access to all repos • Everyone does work through Pull Requests • Everyone has their work code reviewed *

* - Your can merge w/o a review, but must be willing to defend your choice

Page 91: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Deploys

Page 92: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Everyone Can Deploy

• Automated our deployment process to a single step.

• Everyone can deploy, deployments are logged

• Easy rollback is a requirement!

• Implementing feature flags to turn off single parts of our application.

Page 93: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

TestsUnit

Functional Integration

Acceptance etc

Page 94: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Automated Tests

• If you want to trust your Devs, you need tests

• Legacy apps we wrote Integration Tests

• New Apps & Refactored Legacy Parts have Unit Tests

• Continuous Integration to make sure tests run

Page 95: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps
Page 96: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

So, where’s the salt?

Page 97: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Step #4: Devs Use The Ops Tools

Page 98: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Devs can grok salt

Page 99: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Safe Environment For Devs to Learn

Page 100: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Safe Environment For Devs to Learn

salt \* cmd.run "rm -rf /tmp /*"

Page 101: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Safe Environment For Devs to Learn

salt \* cmd.run "rm -rf /tmp /*"

Salt is awesome, but it can’t !recover from that

Page 102: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Dev Salt MasterDevs Can Look Into Every Server

Page 103: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Dev Salt Master• Every server has two minions:

• Admin Salt (aka root)

• Dev Salt (aka bob)

• Each connect to different master server:

• All Devs have access to Dev Salt Master

• Trusted Devs get access to Admin Salt Master

Page 104: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Everything Salty in GitReminder:

Page 105: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Dev Environment

• Developers own the Dev Environment

• Dev Teams manage the Salt States for their Env

• Vagrant + Salt for their Env

• Who makes changes? Developers

• DevOp helps advise & offer support

Page 106: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Team Structure

Dev Ops

Page 107: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Stage Environment• Stage & Production use same salt repos, different

branches

• Developers make all the changes for Application Servers

• All Changes through Pull Requests

• We’ll worry about env changes before code

• Small changes we quickly release, large or long running branches are scary & dangerous

Page 108: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Production Environment

• Merge change to Production Branch

• salt \* state.highstate

• Reminder: Small quick changes over time, never a large change at once.

Page 109: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Environment Caveats• Ops & DevOps Manage VM Hosts, Physical Load

Balancers, FireWalls, etc

• Ops & DevOps manage servers that deal with data:

• MySQL

• MongoDB

• etc

Page 110: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Mentoring Devs

Page 111: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Mentoring Devs

• Not every Dev will become an amazing DevOp

• Thats okay!

Page 112: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Level of “DevOps” Skills

• Thinks about their impact on Ops: Everyone

• Able to debug issues with production: Most

• Able to make changes to environments: Many

• “Awesome DevOp”: Some

Page 113: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Team’s “DevOps” Skills

0

25

50

75

100

Think Debug Change DevOp

Current Goal

Page 114: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

So Everything Is Awesome for us, right?

Page 115: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Honesty Slide: We Have Skeletons In Our Closets

Page 116: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Where We Are At

• All Dev Environments using Vagrant + Salt

• All New Stage & Prod Environments are Salty

• Some Legacy Stage & Production Envs are Salty

• Continuously working on getting out stuff salty.

Page 117: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Making This Work For Your Team

Page 118: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Honest Introspection• Determine for your

team what are your… • Strengths • Weaknesses • Problems • Goals

Page 119: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Increase Team’s Insight • Make sure devs can see

& understand how their code performs

• Increase responsibility of team for those metrics.

• If they break it, they fix it. Do not always bail them out.

• Everyone can see everything.

Page 120: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Increase Team’s Insight • Make sure devs can see

& understand how their code performs

• Increase responsibility of team for those metrics.

• If they break it, they fix it. Do not always bail them out.

• Everyone can see everything.

Page 121: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Mentor Those With Desire / Aptitude

• Give Developers Safe Environment to Learn

• Let them submit code-reviewed changes for Stage & Production

• When teaching / mentoring, let the learner drive, kindly offer advice and help.

• It takes time, but worth the investment.

Page 122: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

A Few Final Thoughts

Page 123: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Team Culture Matters

Page 124: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Positive Influence

Page 125: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Questions?

Page 126: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

Thank YouJustin Carmony

Email: [email protected]: @JustinCarmony

IRC: carmony #salt #uphpuWebsite: [email protected]

Page 127: SaltConf14 - Justin Carmony, Deseret Digital Media - Teaching Devs About DevOps

p.s. we’re hiring, email / pm / tweet me


Top Related