4developers 2015: under the dome (of failure driven pipeline) - maciej lasyk

173
Under the dome (of failure driven pipeline) Maciej Lasyk 4developers – Warsaw 2015-04-20

Upload: proidea

Post on 28-Jul-2015

66 views

Category:

Software


1 download

TRANSCRIPT

Page 1: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Under the dome(of failure driven pipeline)

Maciej Lasyk

4developers – Warsaw

2015-04-20

Page 2: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Join Fedora Infrastructure!

- learn Ansible- learn Docker with Fedora Dockerfiles

http://fedoraproject.org/en/join-fedora

Page 3: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Agenda?

Don't run away ;)

Page 4: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

[…]

Situations like this only reinforce my deep suspicion of

developers: They're often carelessly breaking things and

then disappearing, leaving Operations to clean up the

Mess.

[…]

“The Phoenix Project”

by Gene Kim, Kevin Behr and George Spafford

Page 5: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
Page 6: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
Page 7: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
Page 8: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Conway's law (1968)

organizations which design systems ... are constrained to produce designs which are copies

of the communication structures of these organizations

http://en.wikipedia.org/wiki/Conway%27s_law

Page 9: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Ruth Malan (2008)

if the architecture of the system and the architecture of the organization are at odds, the

architecture of the organization wins.

The organizational divides are going to drive the true seams in the system.

http://traceinthesand.com/blog/2008/02/13/conways-law/

Page 10: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Yup, you're gut is telling truth...

Page 11: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Yup, you're gut is telling truth...

This will be another devops indoctrination

Page 12: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Yup, you're gut is telling truth...

This will be another devops indoctrination

What did you expect? ;)

Page 13: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Yup, you're gut is telling truth...

This will be another devops indoctrination

What did you expect? ;)

This presentation includes gentle product placement

Page 14: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Yup, you're gut is telling truth...

This will be another devops indoctrination

What did you expect? ;)

This presentation includes gentle product placement

Page 15: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

DevOps Anti-Types & patterns

This is a copy/paste from

http://blog.matthewskelton.net/

w/my comments included

Great job Matthew! Thanks!

Page 16: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

DevOps Anti-Types

http://blog.matthewskelton.net/2013/10/22/what-team-structure-is-right-for-devops-to-flourish/

Page 17: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

DevOps Anti-Types

http://blog.matthewskelton.net/2013/10/22/what-team-structure-is-right-for-devops-to-flourish/

Page 18: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

DevOps Anti-Types

http://blog.matthewskelton.net/2013/10/22/what-team-structure-is-right-for-devops-to-flourish/

Page 19: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

DevOps Patterns

http://blog.matthewskelton.net/2013/10/22/what-team-structure-is-right-for-devops-to-flourish/

Page 20: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

DevOps Patterns

http://blog.matthewskelton.net/2013/10/22/what-team-structure-is-right-for-devops-to-flourish/

Page 21: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

DevOps Patterns

http://blog.matthewskelton.net/2013/10/22/what-team-structure-is-right-for-devops-to-flourish/

Page 22: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

DevOps Patterns

http://blog.matthewskelton.net/2013/10/22/what-team-structure-is-right-for-devops-to-flourish/

Page 23: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

DevOps Patterns

http://blog.matthewskelton.net/2013/10/22/what-team-structure-is-right-for-devops-to-flourish/

Page 24: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Ok let's CAMS

Page 25: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

DevOPS ?== CAMS

(culture, automation, measurement, sharing)

Page 26: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

DevOPS !== CAMS

DevOPS === people!

Page 27: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

People

culture automation

measurement sharing

Page 28: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

C for Culture

A for Automation

M for Monitoring

S for Sharing

Page 29: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
Page 30: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
Page 31: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Is there a need for change?

“agile” and “cloud”:

→ focus on delivery

→ close collaboration

→ lightweight environment and components

Page 32: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

cultural change

modification of a society through innovation, invention, discovery, or contact with other

societies

Page 33: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Dead sea effect

→ most talented evaporates

→ the residue

→ maintenance experts & bus factor == 1

http://brucefwebster.com/2008/04/11/the-wetware-crisis-the-dead-sea-effect/

Page 34: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ talk. often. and get along

→ take responsibility - from beginning to the end

→ continuous improvement. seriously

→ be brave. don't be silent

→ it's better to be unpolite l/German than polite l/Englishman

Page 35: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

GTD? (getting things done)

Page 36: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

GTD? (getting things done)

JFDI? (just fuckin' do it)

Page 37: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

GTD? (getting things done)

JFDI? (just fuckin' do it)

MFBT? (move fast, break things)

Page 38: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

GTD + JFDI + MFBT = FCH

Page 39: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

GTD + JFDI + MFBT = FCH

(Fuckin' Customer Happy)

Page 40: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
Page 41: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

C for Culture

A for Automation

M for Monitoring

S for Sharing

Page 42: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Automation is big for most sysadmins. We’re

inherently lazy, so the idea of pushing a button

and making programs work for us? Appealing.

Standalone Sysadmin

http://www.standalone-sysadmin.com/blog/2011/04/view-from-the-other-side/

Page 43: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ it has to be simple

→ don't reinvent the wheel. don't fabric

→ automate from very beginning

Page 44: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ repeatable tasks leads to automation

Page 45: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ repeatable tasks leads to automation

→ automation leads to consistency

Page 46: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ repeatable tasks leads to automation

→ automation leads to consistency

→ consistency reduces errors

Page 47: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ repeatable tasks leads to automation

→ automation leads to consistency

→ consistency reduces errors

→ reducing errors leads to stable environment

Page 48: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ repeatable tasks leads to automation

→ automation leads to consistency

→ consistency reduces errors

→ reducing errors leads to stable environment

→ stable environment leads to less unplanned work

Page 49: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ repeatable tasks leads to automation

→ automation leads to consistency

→ consistency reduces errors

→ reducing errors leads to stable environment

→ stable environment leads to less unplanned work

→ less unplanned work leads to focus on delivery

Page 50: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Remember?

http://blog.matthewskelton.net/2013/10/22/what-team-structure-is-right-for-devops-to-flourish/

Page 51: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Short story of Anti-Type C“we don't need ops”

# it's madness with paths for different users and such option as:# sudo su# sudo -i# su -# su# that is why we add variables to two places

ENVIRONMENT_FILE = '/etc/environment'PROFILE_FILE = '/etc/profile'INITIAL_PATH = '/usr/local/bin:/usr/bin:/bin'

# due to sudo issues (resetting PATH by /etc/sudoers)# we have to add PATH to /root/.profile as well

Page 52: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Short story of Anti-Type C“we don't need ops”

# it's madness with paths for different users and such option as:# sudo su# sudo -i# su -# su# that is why we add variables to two places

ENVIRONMENT_FILE = '/etc/environment'PROFILE_FILE = '/etc/profile'INITIAL_PATH = '/usr/local/bin:/usr/bin:/bin'

# due to sudo issues (resetting PATH by /etc/sudoers)# we have to add PATH to /root/.profile as well

Page 53: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Short story of Anti-Type C“we don't need ops”

Shells:→ login→ non-login→ interactive→ non – interactive

Page 54: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Short story of Anti-Type C“we don't need ops”

Shells:→ login→ non-login→ interactive→ non – interactive

→ su→ sudo su: interactive, non-login, .bashrc→ sudo su -: interactive, login, /etc/profile;/root/.profile;/root/.bashrc→ sudo -i: interactive, login, /root/.profile;/root/.bashrc;/root/.login→ sudo /bin/bash: interactive, non-login, ~/.bashrc→ sudo -s: reads $SHELL and executes it

Page 55: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Short story of Anti-Type C“we don't need ops”

Shells:→ login→ non-login→ interactive→ non – interactive

→ su→ sudo su: interactive, non-login, .bashrc→ sudo su -: interactive, login, /etc/profile;/root/.profile;/root/.bashrc→ sudo -i: interactive, login, /root/.profile;/root/.bashrc;/root/.login→ sudo /bin/bash: interactive, non-login, ~/.bashrc→ sudo -s: reads $SHELL and executes it

Page 56: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Short story of Anti-Type C“we don't need ops”

Shells:→ login→ non-login→ interactive→ non – interactive

→ su→ sudo su: interactive, non-login, .bashrc→ sudo su -: interactive, login, /etc/profile;/root/.profile;/root/.bashrc→ sudo -i: interactive, login, /root/.profile;/root/.bashrc;/root/.login→ sudo /bin/bash: interactive, non-login, ~/.bashrc→ sudo -s: reads $SHELL and executes it

Page 57: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Short story of Anti-Type C“we don't need ops”

Shells:→ login→ non-login→ interactive→ non – interactive

→ su→ sudo su: interactive, non-login, .bashrc→ sudo su -: interactive, login, /etc/profile;/root/.profile;/root/.bashrc→ sudo -i: interactive, login, /root/.profile;/root/.bashrc;/root/.login→ sudo /bin/bash: interactive, non-login, ~/.bashrc→ sudo -s: reads $SHELL and executes it

Page 58: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Short story of Anti-Type C“we don't need ops”

Shells:→ login→ non-login→ interactive→ non – interactive

→ su→ sudo su: interactive, non-login, .bashrc→ sudo su -: interactive, login, /etc/profile;/root/.profile;/root/.bashrc→ sudo -i: interactive, login, /root/.profile;/root/.bashrc;/root/.login→ sudo /bin/bash: interactive, non-login, ~/.bashrc→ sudo -s: reads $SHELL and executes it

Page 59: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Short story of Anti-Type C“we don't need ops”

Shells:→ login→ non-login→ interactive→ non – interactive

→ su→ sudo su: interactive, non-login, .bashrc→ sudo su -: interactive, login, /etc/profile;/root/.profile;/root/.bashrc→ sudo -i: interactive, login, /root/.profile;/root/.bashrc;/root/.login→ sudo /bin/bash: interactive, non-login, ~/.bashrc→ sudo -s: reads $SHELL and executes it

Page 60: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

def is_ubuntu(): return run("uname -a | grep Ubuntu | wc -l") == "1"def install_apache_fix():

if is_ubuntu():if exists("/lib/x86_64-linux-gnu/libssl.so.0.9.8"):

print "libssl.so.0.9.8 already installed - SKIPPING"else:

sudo("apt-get -y install libssl0.9.8")else:

#Debianif exists("/usr/lib/libssl.so.0.9.8"):

print "libssl.so.0.9.8 already installed - SKIPPING"else:

#download if necessary url = "http://.../libssl0.9.8_0.9.8o-squeeze14_amd64.deb"

if download.sync_opt_download(_download_libssl_lock, url, store_file_path):sudo('chmod ug+x %s' % store_file_path)sudo("dpkg -i %s" % store_file_path)

Page 61: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

def is_ubuntu(): return run("uname -a | grep Ubuntu | wc -l") == "1" /etc/issue maybe?def install_apache_fix():

if is_ubuntu():if exists("/lib/x86_64-linux-gnu/libssl.so.0.9.8"):

print "libssl.so.0.9.8 already installed - SKIPPING"else:

sudo("apt-get -y install libssl0.9.8")else:

#Debianif exists("/usr/lib/libssl.so.0.9.8"):

print "libssl.so.0.9.8 already installed - SKIPPING"else:

#download if necessary url = "http://.../libssl0.9.8_0.9.8o-squeeze14_amd64.deb"

if download.sync_opt_download(_download_libssl_lock, url, store_file_path):sudo('chmod ug+x %s' % store_file_path)sudo("dpkg -i %s" % store_file_path)

Page 62: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

def is_ubuntu(): return run("uname -a | grep Ubuntu | wc -l") == "1"def install_apache_fix():

if is_ubuntu():if exists("/lib/x86_64-linux-gnu/libssl.so.0.9.8"):

print "libssl.so.0.9.8 already installed - SKIPPING"else:

sudo("apt-get -y install libssl0.9.8")else:

#Debianif exists("/usr/lib/libssl.so.0.9.8"):

print "libssl.so.0.9.8 already installed - SKIPPING"else:

#download if necessary url = "http://.../libssl0.9.8_0.9.8o-squeeze14_amd64.deb"

if download.sync_opt_download(_download_libssl_lock, url, store_file_path):sudo('chmod ug+x %s' % store_file_path)sudo("dpkg -i %s" % store_file_path)

Page 63: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

def is_ubuntu(): return run("uname -a | grep Ubuntu | wc -l") == "1"def install_apache_fix():

if is_ubuntu():if exists("/lib/x86_64-linux-gnu/libssl.so.0.9.8"): ldconfig maybe?

print "libssl.so.0.9.8 already installed - SKIPPING"else:

sudo("apt-get -y install libssl0.9.8")else:

#Debianif exists("/usr/lib/libssl.so.0.9.8"):

print "libssl.so.0.9.8 already installed - SKIPPING"else:

#download if necessary url = "http://.../libssl0.9.8_0.9.8o-squeeze14_amd64.deb"

if download.sync_opt_download(_download_libssl_lock, url, store_file_path):sudo('chmod ug+x %s' % store_file_path)sudo("dpkg -i %s" % store_file_path)

Page 64: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

def is_ubuntu(): return run("uname -a | grep Ubuntu | wc -l") == "1"def install_apache_fix():

if is_ubuntu():if exists("/lib/x86_64-linux-gnu/libssl.so.0.9.8"):

print "libssl.so.0.9.8 already installed - SKIPPING"else:

sudo("apt-get -y install libssl0.9.8")else:

#Debianif exists("/usr/lib/libssl.so.0.9.8"):

print "libssl.so.0.9.8 already installed - SKIPPING"else:

#download if necessary url = "http://.../libssl0.9.8_0.9.8o-squeeze14_amd64.deb"

if download.sync_opt_download(_download_libssl_lock, url, store_file_path):sudo('chmod ug+x %s' % store_file_path)sudo("dpkg -i %s" % store_file_path)

Page 65: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

def is_ubuntu(): return run("uname -a | grep Ubuntu | wc -l") == "1"def install_apache_fix():

if is_ubuntu():if exists("/lib/x86_64-linux-gnu/libssl.so.0.9.8"):

print "libssl.so.0.9.8 already installed - SKIPPING"else:

sudo("apt-get -y install libssl0.9.8")else:

#Debian What about RHEL, Fedora, Slackware, Gentoo?if exists("/usr/lib/libssl.so.0.9.8"):

print "libssl.so.0.9.8 already installed - SKIPPING"else:

#downl. if necessary So whole this is for particular distro version? url = "http://.../libssl0.9.8_0.9.8o-squeeze14_amd64.deb"

if download.sync_opt_download(_download_libssl_lock, url, store_file_path):sudo('chmod ug+x %s' % store_file_path)sudo("dpkg -i %s" % store_file_path)

Page 66: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

def is_ubuntu(): return run("uname -a | grep Ubuntu | wc -l") == "1"def install_apache_fix():

if is_ubuntu():if exists("/lib/x86_64-linux-gnu/libssl.so.0.9.8"):

print "libssl.so.0.9.8 already installed - SKIPPING"else:

sudo("apt-get -y install libssl0.9.8")else:

#Debianif exists("/usr/lib/libssl.so.0.9.8"):

print "libssl.so.0.9.8 already installed - SKIPPING"else:

#downl. if necessary url = "http://libssl0.9.8_0.9.8o-squeeze14_amd64.deb"

if download.sync_opt_download(_download_libssl_lock, url, store_file_path):sudo('chmod ug+x %s' % store_file_path)sudo("dpkg -i %s" % store_file_path)

Page 67: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

def is_ubuntu(): return run("uname -a | grep Ubuntu | wc -l") == "1"def install_apache_fix():

if is_ubuntu():if exists("/lib/x86_64-linux-gnu/libssl.so.0.9.8"):

print "libssl.so.0.9.8 already installed - SKIPPING"else:

sudo("apt-get -y install libssl0.9.8")else:

#Debianif exists("/usr/lib/libssl.so.0.9.8"):

print "libssl.so.0.9.8 already installed - SKIPPING"else:

#downl. if necessary url = "http://libssl0.9.8_0.9.8o-squeeze14_amd64.deb"

if download.sync_opt_download(_download_libssl_lock, url, store_file_path):sudo('chmod ug+x %s' % store_file_path) # declarative madnesssudo("dpkg -i %s" % store_file_path)

Page 68: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Imperativeness vs declarativeness

Page 69: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Imperativeness vs declarativeness

def configure(dst_dir, config_properties, installer_file):_copy_conf_file(dst_dir, properties)

def _copy_conf_file(dst_dir, properties): sudo("cp %s %s" % (srcConfigPath, targetConfigPath)) change_directory_owner(targetConfigPath) sudo('chmod ug+x %s' % store_file_path)

- name: configure this hosts: all tasks:

- name: copy conf file file: >

src={{ some_source }}dest={{ some_destination }}perms=0750

Page 70: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Imperativeness vs declarativeness

def configure(dst_dir, config_properties, installer_file):_copy_conf_file(dst_dir, properties)

def _copy_conf_file(dst_dir, properties): sudo("cp %s %s" % (srcConfigPath, targetConfigPath)) change_directory_owner(targetConfigPath) sudo('chmod ug+x %s' % store_file_path)

- name: configure this hosts: all tasks:

- name: copy conf file file: >

src={{ some_source }}dest={{ some_destination }}perms=0750

Page 71: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
Page 72: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ flat learning curve

Page 73: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ flat learning curve

→ doesn't required additional resources

Page 74: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ flat learning curve

→ doesn't required additional resources

→ fit for maintenance jobs / procedures

Page 75: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ flat learning curve

→ doesn't required additional resources

→ fit for maintenance jobs / procedures

→ great for any containers as non-daemon

Page 76: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ flat learning curve

→ doesn't required additional resources

→ fit for maintenance jobs / procedures

→ great for any containers as non-daemon

→ deals with “deployment specs”

Page 77: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ flat learning curve

→ doesn't required additional resources

→ fit for maintenance jobs / procedures

→ great for any containers as non-daemon

→ deals with “deployment specs”

→ might be easily adopted as universal language

Page 78: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
Page 79: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
Page 80: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→selinux enforcing i -rw-r--r--. stash stash unconfined_u:object_r:mysqld_db_t:s0 authorized_keys

→/etc/ssh/sshd_config && /etc/network/interfaces

→ iptables-save nope?

→ broken _netfs ?

Page 81: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
Page 82: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
Page 83: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
Page 84: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

What if...

→ ./configure && make && make install → .zip

→ Dev & Ops have 2 different build & installation methods?

Plz..

→ pkg repos (or Nexus)

→ use fpm for creating pkgs if needed (demo)

Page 85: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

C for Culture

A for Automation

M for Monitoring

S for Sharing

Page 86: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
Page 87: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ make developers create monitoring

→ find yourself between RRD and InfluxDB

→ will product team be able to query your monitoring DB?

→ Etsy case (Ganglia / Graphite)

Page 88: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ make developers create monitoring

→ find yourself between RRD and InfluxDB

→ will product team be able to query your monitoring DB?

→ Etsy case (Ganglia / Graphite)

Page 89: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ make developers create monitoring

→ find yourself between RRD and InfluxDB

→ will product team be able to query your monitoring DB?

→ Etsy case (Ganglia / Graphite)

Page 90: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ make developers create monitoring

→ find yourself between RRD and InfluxDB

→ will product team be able to query your monitoring DB?

→ Etsy case (Ganglia / Graphite)

Page 91: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

C for Culture

A for Automation

M for Monitoring

S for Sharing

Page 92: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ learn on OPS mistakes

→ Major Incident Reports – source of improvement

→ Learn developers about change management

→ Make CM an easy process. Use simple tools.

Page 93: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ learn on OPS mistakes

→ Major Incident Reports – source of improvement

→ Learn developers about change management

→ Make CM an easy process. Use simple tools.

Page 94: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ learn on OPS mistakes

→ Major Incident Reports – source of improvement

→ Learn developers about change management

→ Make CM an easy process. Use simple tools.

Page 95: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ learn on OPS mistakes

→ Major Incident Reports – source of improvement

→ Learn developers about change management

→ Make CM an easy process. Use simple tools.

Page 96: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Let's arch the infrastructure

Page 97: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Addressing the space

→ VLSM

→ DHCP & DDNS

→ KISS: flat networks!

→ stop /24!

Page 98: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Addressing the space

→ VLSM

→ DHCP & DDNS

→ KISS: flat networks!

→ stop /24!

Page 99: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Addressing the space

→ VLSM

→ DHCP & DDNS

→ KISS: flat networks!

→ stop /24!

Page 100: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Addressing the space

→ VLSM

→ DHCP & DDNS

→ KISS: flat networks!

→ stop /24!

Page 101: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
Page 102: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

What about DNS?

→ BIND roxx (views etc)

→ KISS: maybe decentralized w/Ansible?

Page 103: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

view "internal-view" { match-clients { internal; }; recursion yes;

zone "lasyk.info" IN { type master; file "internal.lasyk.info.conf"; allow-transfer { any; } };

view "external-view" { match-clients { any; }; recursion no;

zone "lasyk.info" IN { type master; file "external.lasyk.info.conf"; allow-transfer { none; }; };

Page 104: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

view "internal-view" { match-clients { internal; }; recursion yes;

zone "lasyk.info" IN { type master; file "internal.lasyk.info.conf"; allow-transfer { any; } };

view "external-view" { match-clients { any; }; recursion no;

zone "lasyk.info" IN { type master; file "external.lasyk.info.conf"; allow-transfer { none; }; };

Page 105: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
Page 106: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Linux Containers = namespaces + cgroups + storage

Linux containers equation

Page 107: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Control Groups provide a mechanism for

aggregating/partitioning sets of tasks, and

all their future children, into hierarchical groups

with specialized behavior

control groups (cgroups)

Page 108: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→grouping processes

→allocating resources to particular groups

→memory

→network

→CPU

→storage bandwidth (I/O throttling)

→device whitelisting

control groups (cgroups)

Page 109: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→grouping processes

→allocating resources to particular groups

→memory

→network

→CPU

→storage bandwidth (I/O throttling)

→device whitelisting

control groups (cgroups)

Page 110: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→grouping processes

→allocating resources to particular groups

→memory

→network

→CPU

→storage bandwidth (I/O throttling)

→device whitelisting

control groups (cgroups)

Page 111: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→grouping processes

→allocating resources to particular groups

→memory

→network

→CPU

→storage bandwidth (I/O throttling)

→device whitelisting

control groups (cgroups)

Page 112: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→grouping processes

→allocating resources to particular groups

→memory

→network

→CPU

→storage bandwidth (I/O throttling)

→device whitelisting

control groups (cgroups)

Page 113: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→grouping processes

→allocating resources to particular groups

→memory

→network

→CPU

→storage bandwidth (I/O throttling)

→device whitelisting

control groups (cgroups)

Page 114: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→grouping processes

→allocating resources to particular groups

→memory

→network

→CPU

→storage bandwidth (I/O throttling)

→device whitelisting

control groups (cgroups)

Page 115: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

little demo?

control groups (cgroups)

Page 116: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Providing a unique views of the system for processes.

→ PID – PIDs isolation

→ NET – network isolation (via virt-ifaces; demo)

→ IPC – won't use this

→ MNT – chroot like; deals w/mountpoints

→ UTS – deals w/hostname

Kernel Namespaces

Page 117: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Providing a unique views of the system for processes.

→ PID – PIDs isolation

→ NET – network isolation (via virt-ifaces; demo)

→ IPC – won't use this

→ MNT – chroot like; deals w/mountpoints

→ UTS – deals w/hostname

Kernel Namespaces

Page 118: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Providing a unique views of the system for processes.

→ PID – PIDs isolation

→ NET – network isolation (via virt-ifaces; demo)

→ IPC – won't use this

→ MNT – chroot like; deals w/mountpoints

→ UTS – deals w/hostname

Kernel Namespaces

Page 119: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Providing a unique views of the system for processes.

→ PID – PIDs isolation

→ NET – network isolation (via virt-ifaces; demo)

→ IPC – won't use this

→ MNT – chroot like; deals w/mountpoints

→ UTS – deals w/hostname

Kernel Namespaces

Page 120: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Providing a unique views of the system for processes.

→ PID – PIDs isolation

→ NET – network isolation (via virt-ifaces; demo)

→ IPC – won't use this

→ MNT – chroot like; deals w/mountpoints

→ UTS – deals w/hostname

Kernel Namespaces

Page 121: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Providing a unique views of the system for processes.

→ PID – PIDs isolation

→ NET – network isolation (via virt-ifaces; demo)

→ IPC – won't use this

→ MNT – chroot like; deals w/mountpoints

→ UTS – deals w/hostname

Kernel Namespaces

Page 122: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Providing a unique views of the system for processes.

→ PID – PIDs isolation

→ NET – network isolation (via virt-ifaces; demo)

→ IPC – won't use this

→ MNT – chroot like; deals w/mountpoints

→ UTS – deals w/hostname

Kernel Namespaces

Page 123: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

little demo?

Kernel Namespaces

Page 124: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ hell fast (you'll see)

→ page cache sharing

→ finally in upstream kernel (in rhel from 7.2)

→ finally supported by docker (-s overlay)

→ SELinux not there yet (but will be)

OverlayFS

Page 125: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ hell fast (you'll see)

→ page cache sharing

→ finally in upstream kernel (in rhel from 7.2)

→ finally supported by docker (-s overlay)

→ SELinux not there yet (but will be)

OverlayFS

Page 126: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ hell fast (you'll see)

→ page cache sharing

→ finally in upstream kernel (in rhel from 7.2)

→ finally supported by docker (-s overlay)

→ SELinux not there yet (but will be)

OverlayFS

Page 127: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ hell fast (you'll see)

→ page cache sharing

→ finally in upstream kernel (in rhel from 7.2)

→ finally supported by docker (-s overlay)

→ SELinux not there yet (but will be)

OverlayFS

Page 128: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ hell fast (you'll see)

→ page cache sharing

→ finally in upstream kernel (in rhel from 7.2)

→ finally supported by docker (-s overlay)

→ SELinux not there yet (but will be)

OverlayFS

Page 129: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

http://developerblog.redhat.com/2014/09/30/overview-storage-scalability-docker/

OverlayFS

Page 130: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

http://developerblog.redhat.com/2014/09/30/overview-storage-scalability-docker/

OverlayFS

Page 131: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

http://developerblog.redhat.com/2014/09/30/overview-storage-scalability-docker/

OverlayFS

Page 132: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Developers' envs?

→ use containers!

→ configure cgroups

→ use LXC / LXC Web Panel

→ use Ansible for spinning up anything!

Page 133: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Developers' envs?

→ use containers!

→ configure cgroups

→ use LXC / LXC Web Panel

→ use Ansible for spinning up anything!

Page 134: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Developers' envs?

→ use containers!

→ configure cgroups

→ use LXC / LXC Web Panel

→ use Ansible for spinning up anything!

Page 135: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Developers' envs?

→ use containers!

→ configure cgroups

→ use LXC / LXC Web Panel

→ use Ansible for spinning up anything!

Page 136: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
Page 137: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Containers embraces granularity → microservices!

Page 138: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Containers embraces granularity → microservices!

Watch out for microservices architecture, or...

Page 139: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Containers embraces granularity → microservices!

Watch out for microservices architecture, or...

Page 140: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
Page 141: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Who knows FHS?

Page 142: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Who knows FHS?

→ 'temp' – what it consist?

Page 143: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Who knows FHS?

→ 'temp' – what it consist?

→ actually: “This Entity Must Persist” ;)

Page 144: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Who knows FHS?

→ 'temp' – what it consist?

→ actually: “This Entity Must Persist” ;)

→ Define your FHS!

Page 145: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Mikado Method for the win!

→ set a goal

→ experiment

→ visualize

→ rollback

Page 146: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Mikado Method for the win!

→ set a goal

→ experiment

→ visualize

→ rollback

Page 147: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Mikado Method for the win!

→ set a goal

→ experiment

→ visualize

→ rollback

Page 148: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Mikado Method for the win!

→ set a goal

→ experiment

→ visualize

→ rollback

Page 149: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Mikado Method for the win!

→ before any work and rollbacks..

→ remember: monitoring & tests are your friends!

→ think about testing strategy – think heatmaps!

Page 150: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Ansible & infra layers

Layer 1: bare metal,

Layer 2: VM

Layer 3: container

Networking

Hypervisor + VM provisioning

Storage

Networking

Container's engine & provisioning

Application build

Application env

Network interfaces

Storage mounts

Resources allocation

repo1

repo2

repo3

Much simpler w/one, flat network (for small envs)!

Page 151: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Ansible & infra layers

Layer 1: bare metal,

Layer 2: VM

Layer 3: container

Networking

Hypervisor + VM provisioning

Storage

Networking

Container's engine & provisioning

Application build

Application env

Network interfaces

Storage mounts

Resources allocation

repo1

repo2

repo3

Much simpler w/one, flat network (for small envs)!

repo2

Layer 2: VMNetworking

Container's engine & provisioning

repo2

Page 152: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Ansible & infra layers

Layer 1: bare metal,

Layer 2: VM

Layer 3: container

Networking

Hypervisor + VM provisioning

Storage

Networking

Container's engine & provisioning

Application build

Application env

Network interfaces

Storage mounts

Resources allocation

repo1

repo2

repo3

Much simpler w/one, flat network (for small envs)!

repo2

Layer 2: VMNetworking

Container's engine & provisioning

repo2

Network interfaces

Storage mountsrepo2

Page 153: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Ansible & infra layers

Layer 1: bare metal,

Layer 2: VM

Layer 3: container

Networking

Hypervisor + VM provisioning

Storage

Networking

Container's engine & provisioning

Application build

Application env

Network interfaces

Storage mounts

Resources allocation

repo1

repo2

repo3

Much simpler w/one, flat network (for small envs)!

repo2

Layer 2: VMNetworking

Container's engine & provisioning

repo2

Network interfaces

Storage mountsrepo2

Layer 3: containerApplication build

Application env

repo3

Page 154: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Ansible & infra layers

Layer 1: bare metal,

Layer 2: VM

Layer 3: container

Networking

Hypervisor + VM provisioning

Storage

Networking

Container's engine & provisioning

Application build

Application env

Network interfaces

Storage mounts

Resources allocation

repo1

repo2

repo3

Much simpler w/one, flat network (for small envs)!

repo2

Layer 2: VMNetworking

Container's engine & provisioning

repo2

Network interfaces

Storage mountsrepo2

Layer 3: containerApplication build

Application env

repo3Resources allocation

repo3

Page 155: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Ansible & infra layers

Layer 1: bare metal,

Layer 2: VM

Layer 3: container

Networking

Hypervisor + VM provisioning

Storage

Networking

Container's engine & provisioning

Application build

Application env

Network interfaces

Storage mounts

Resources allocation

repo1

repo2

repo3

Much simpler w/one, flat network (for small envs)!

Page 156: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ automated service discovery and registration framework

→ ideal for SOA architectures

→ ideal for continuous integration & delivery

→ solves “works on my machine” problem

SmartStack

Page 157: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

→ automated service discovery and registration framework

→ ideal for SOA architectures

→ ideal for continuous integration & delivery

→ solves “works on my machine” problem

SmartStack

haproxy + nerve + synapse + zookeper = smartstack

Page 158: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Synapse→ discovery service (via zookeeper or etcd)→ installed on every node→ writes haproxy configuration→ application doesn't have to be aware of this→ works same on bare / VM / docker→ https://github.com/airbnb/nerve

SmartStack

Page 159: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

SmartStack

Page 160: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Nerve

→ health checks (pluggable)

→ register service info to zookeper (or etcd)

→ https://github.com/airbnb/synapse

SmartStack

Page 161: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

SmartStack

Page 162: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

SmartStack

Page 163: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Smartstack + Docker = <3

Page 164: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Smartstack + Docker = <3

but also remember about Consul(come to #dockerkrk 2 meetup!)

Page 165: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

questions?

Page 166: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Archaeological workshop

Page 167: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Archaeological workshop

→ nmap, tcpdump, lsof, strace, sysdig, sar

→ cgroups throttling on-the-fly

Do we have time for demo?

Page 168: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Hardware: disks?

→ RAID5 vs RAID10

→ Howto RAID over 1 disk ;)

→ Cheap SSD drives?

Page 169: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Hardware: disks?

→ RAID5 vs RAID10

→ Howto RAID over 1 disk ;)

→ Cheap SSD drives?

Page 170: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Hardware: disks?

→ RAID5 vs RAID10

→ Howto RAID over 1 disk ;)

→ Cheap SSD drives?

Page 171: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

http://techreport.com/review/27909/the-ssd-endurance-experiment-theyre-all-dead

Page 172: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Why use LVM?

→ indexation (capacity, inodes check)

→ capacity planning / iops per mount

Page 173: 4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk

Under the dome(of failure driven pipeline)

Maciej Lasyk

4developers – Warsaw

2015-04-20