under the dome (of failure driven pipeline)

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

Upload: maciej-lasyk

Post on 03-Aug-2015

942 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Under the Dome (of failure driven pipeline)

Under the dome(of failure driven pipeline)

Maciej Lasyk

4developers – Warsaw

2015-04-20

Page 2: Under the Dome (of failure driven pipeline)

Join Fedora Infrastructure!

- learn Ansible- learn Docker with Fedora Dockerfiles

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

Page 3: Under the Dome (of failure driven pipeline)

Agenda?

Don't run away ;)

Page 4: Under the Dome (of failure driven pipeline)

[…]

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: Under the Dome (of failure driven pipeline)
Page 6: Under the Dome (of failure driven pipeline)
Page 7: Under the Dome (of failure driven pipeline)
Page 8: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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

Page 11: Under the Dome (of failure driven pipeline)

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

This will be another devops indoctrination

Page 12: Under the Dome (of failure driven pipeline)

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

This will be another devops indoctrination

What did you expect? ;)

Page 13: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

DevOps Anti-Types & patterns

This is a copy/paste from

http://blog.matthewskelton.net/

w/my comments included

Great job Matthew! Thanks!

Page 16: Under the Dome (of failure driven pipeline)

DevOps Anti-Types

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

Page 17: Under the Dome (of failure driven pipeline)

DevOps Anti-Types

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

Page 18: Under the Dome (of failure driven pipeline)

DevOps Anti-Types

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

Page 19: Under the Dome (of failure driven pipeline)

DevOps Patterns

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

Page 20: Under the Dome (of failure driven pipeline)

DevOps Patterns

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

Page 21: Under the Dome (of failure driven pipeline)

DevOps Patterns

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

Page 22: Under the Dome (of failure driven pipeline)

DevOps Patterns

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

Page 23: Under the Dome (of failure driven pipeline)

DevOps Patterns

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

Page 24: Under the Dome (of failure driven pipeline)

Ok let's CAMS

Page 25: Under the Dome (of failure driven pipeline)

DevOPS ?== CAMS

(culture, automation, measurement, sharing)

Page 26: Under the Dome (of failure driven pipeline)

DevOPS !== CAMS

DevOPS === people!

Page 27: Under the Dome (of failure driven pipeline)

People

culture automation

measurement sharing

Page 28: Under the Dome (of failure driven pipeline)

C for Culture

A for Automation

M for Monitoring

S for Sharing

Page 29: Under the Dome (of failure driven pipeline)
Page 30: Under the Dome (of failure driven pipeline)
Page 31: Under the Dome (of failure driven pipeline)

Is there a need for change?

“agile” and “cloud”:

→ focus on delivery

→ close collaboration

→ lightweight environment and components

Page 32: Under the Dome (of failure driven pipeline)

cultural change

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

societies

Page 33: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

→ 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: Under the Dome (of failure driven pipeline)

GTD? (getting things done)

Page 36: Under the Dome (of failure driven pipeline)

GTD? (getting things done)

JFDI? (just fuckin' do it)

Page 37: Under the Dome (of failure driven pipeline)

GTD? (getting things done)

JFDI? (just fuckin' do it)

MFBT? (move fast, break things)

Page 38: Under the Dome (of failure driven pipeline)

GTD + JFDI + MFBT = FCH

Page 39: Under the Dome (of failure driven pipeline)

GTD + JFDI + MFBT = FCH

(Fuckin' Customer Happy)

Page 40: Under the Dome (of failure driven pipeline)
Page 41: Under the Dome (of failure driven pipeline)

C for Culture

A for Automation

M for Monitoring

S for Sharing

Page 42: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

→ it has to be simple

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

→ automate from very beginning

Page 44: Under the Dome (of failure driven pipeline)

→ repeatable tasks leads to automation

Page 45: Under the Dome (of failure driven pipeline)

→ repeatable tasks leads to automation

→ automation leads to consistency

Page 46: Under the Dome (of failure driven pipeline)

→ repeatable tasks leads to automation

→ automation leads to consistency

→ consistency reduces errors

Page 47: Under the Dome (of failure driven pipeline)

→ repeatable tasks leads to automation

→ automation leads to consistency

→ consistency reduces errors

→ reducing errors leads to stable environment

Page 48: Under the Dome (of failure driven pipeline)

→ 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: Under the Dome (of failure driven pipeline)

→ 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: Under the Dome (of failure driven pipeline)

Remember?

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

Page 51: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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

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

Page 54: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

Imperativeness vs declarativeness

Page 69: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)
Page 72: Under the Dome (of failure driven pipeline)

→ flat learning curve

Page 73: Under the Dome (of failure driven pipeline)

→ flat learning curve

→ doesn't required additional resources

Page 74: Under the Dome (of failure driven pipeline)

→ flat learning curve

→ doesn't required additional resources

→ fit for maintenance jobs / procedures

Page 75: Under the Dome (of failure driven pipeline)

→ flat learning curve

→ doesn't required additional resources

→ fit for maintenance jobs / procedures

→ great for any containers as non-daemon

Page 76: Under the Dome (of failure driven pipeline)

→ 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: Under the Dome (of failure driven pipeline)

→ 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: Under the Dome (of failure driven pipeline)
Page 79: Under the Dome (of failure driven pipeline)
Page 80: Under the Dome (of failure driven pipeline)

→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: Under the Dome (of failure driven pipeline)
Page 82: Under the Dome (of failure driven pipeline)
Page 83: Under the Dome (of failure driven pipeline)
Page 84: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

C for Culture

A for Automation

M for Monitoring

S for Sharing

Page 86: Under the Dome (of failure driven pipeline)
Page 87: Under the Dome (of failure driven pipeline)

→ 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: Under the Dome (of failure driven pipeline)

→ 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: Under the Dome (of failure driven pipeline)

→ 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: Under the Dome (of failure driven pipeline)

→ 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: Under the Dome (of failure driven pipeline)

C for Culture

A for Automation

M for Monitoring

S for Sharing

Page 92: Under the Dome (of failure driven pipeline)

→ 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: Under the Dome (of failure driven pipeline)

→ 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: Under the Dome (of failure driven pipeline)

→ 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: Under the Dome (of failure driven pipeline)

→ 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: Under the Dome (of failure driven pipeline)

Let's arch the infrastructure

Page 97: Under the Dome (of failure driven pipeline)

Addressing the space

→ VLSM

→ DHCP & DDNS

→ KISS: flat networks!

→ stop /24!

Page 98: Under the Dome (of failure driven pipeline)

Addressing the space

→ VLSM

→ DHCP & DDNS

→ KISS: flat networks!

→ stop /24!

Page 99: Under the Dome (of failure driven pipeline)

Addressing the space

→ VLSM

→ DHCP & DDNS

→ KISS: flat networks!

→ stop /24!

Page 100: Under the Dome (of failure driven pipeline)

Addressing the space

→ VLSM

→ DHCP & DDNS

→ KISS: flat networks!

→ stop /24!

Page 101: Under the Dome (of failure driven pipeline)
Page 102: Under the Dome (of failure driven pipeline)

What about DNS?

→ BIND roxx (views etc)

→ KISS: maybe decentralized w/Ansible?

Page 103: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)
Page 106: Under the Dome (of failure driven pipeline)

Linux Containers = namespaces + cgroups + storage

Linux containers equation

Page 107: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

→grouping processes

→allocating resources to particular groups

→memory

→network

→CPU

→storage bandwidth (I/O throttling)

→device whitelisting

control groups (cgroups)

Page 109: Under the Dome (of failure driven pipeline)

→grouping processes

→allocating resources to particular groups

→memory

→network

→CPU

→storage bandwidth (I/O throttling)

→device whitelisting

control groups (cgroups)

Page 110: Under the Dome (of failure driven pipeline)

→grouping processes

→allocating resources to particular groups

→memory

→network

→CPU

→storage bandwidth (I/O throttling)

→device whitelisting

control groups (cgroups)

Page 111: Under the Dome (of failure driven pipeline)

→grouping processes

→allocating resources to particular groups

→memory

→network

→CPU

→storage bandwidth (I/O throttling)

→device whitelisting

control groups (cgroups)

Page 112: Under the Dome (of failure driven pipeline)

→grouping processes

→allocating resources to particular groups

→memory

→network

→CPU

→storage bandwidth (I/O throttling)

→device whitelisting

control groups (cgroups)

Page 113: Under the Dome (of failure driven pipeline)

→grouping processes

→allocating resources to particular groups

→memory

→network

→CPU

→storage bandwidth (I/O throttling)

→device whitelisting

control groups (cgroups)

Page 114: Under the Dome (of failure driven pipeline)

→grouping processes

→allocating resources to particular groups

→memory

→network

→CPU

→storage bandwidth (I/O throttling)

→device whitelisting

control groups (cgroups)

Page 115: Under the Dome (of failure driven pipeline)

little demo?

control groups (cgroups)

Page 116: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

little demo?

Kernel Namespaces

Page 124: Under the Dome (of failure driven pipeline)

→ 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: Under the Dome (of failure driven pipeline)

→ 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: Under the Dome (of failure driven pipeline)

→ 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: Under the Dome (of failure driven pipeline)

→ 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: Under the Dome (of failure driven pipeline)

→ 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: Under the Dome (of failure driven pipeline)

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

OverlayFS

Page 130: Under the Dome (of failure driven pipeline)

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

OverlayFS

Page 131: Under the Dome (of failure driven pipeline)

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

OverlayFS

Page 132: Under the Dome (of failure driven pipeline)

Developers' envs?

→ use containers!

→ configure cgroups

→ use LXC / LXC Web Panel

→ use Ansible for spinning up anything!

Page 133: Under the Dome (of failure driven pipeline)

Developers' envs?

→ use containers!

→ configure cgroups

→ use LXC / LXC Web Panel

→ use Ansible for spinning up anything!

Page 134: Under the Dome (of failure driven pipeline)

Developers' envs?

→ use containers!

→ configure cgroups

→ use LXC / LXC Web Panel

→ use Ansible for spinning up anything!

Page 135: Under the Dome (of failure driven pipeline)

Developers' envs?

→ use containers!

→ configure cgroups

→ use LXC / LXC Web Panel

→ use Ansible for spinning up anything!

Page 136: Under the Dome (of failure driven pipeline)
Page 137: Under the Dome (of failure driven pipeline)

Containers embraces granularity → microservices!

Page 138: Under the Dome (of failure driven pipeline)

Containers embraces granularity → microservices!

Watch out for microservices architecture, or...

Page 139: Under the Dome (of failure driven pipeline)

Containers embraces granularity → microservices!

Watch out for microservices architecture, or...

Page 140: Under the Dome (of failure driven pipeline)
Page 141: Under the Dome (of failure driven pipeline)

Who knows FHS?

Page 142: Under the Dome (of failure driven pipeline)

Who knows FHS?

→ 'temp' – what it consist?

Page 143: Under the Dome (of failure driven pipeline)

Who knows FHS?

→ 'temp' – what it consist?

→ actually: “This Entity Must Persist” ;)

Page 144: Under the Dome (of failure driven pipeline)

Who knows FHS?

→ 'temp' – what it consist?

→ actually: “This Entity Must Persist” ;)

→ Define your FHS!

Page 145: Under the Dome (of failure driven pipeline)

Mikado Method for the win!

→ set a goal

→ experiment

→ visualize

→ rollback

Page 146: Under the Dome (of failure driven pipeline)

Mikado Method for the win!

→ set a goal

→ experiment

→ visualize

→ rollback

Page 147: Under the Dome (of failure driven pipeline)

Mikado Method for the win!

→ set a goal

→ experiment

→ visualize

→ rollback

Page 148: Under the Dome (of failure driven pipeline)

Mikado Method for the win!

→ set a goal

→ experiment

→ visualize

→ rollback

Page 149: Under the Dome (of failure driven pipeline)

Mikado Method for the win!

→ before any work and rollbacks..

→ remember: monitoring & tests are your friends!

→ think about testing strategy – think heatmaps!

Page 150: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

→ automated service discovery and registration framework

→ ideal for SOA architectures

→ ideal for continuous integration & delivery

→ solves “works on my machine” problem

SmartStack

Page 157: Under the Dome (of failure driven pipeline)

→ 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: Under the Dome (of failure driven pipeline)

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: Under the Dome (of failure driven pipeline)

SmartStack

Page 160: Under the Dome (of failure driven pipeline)

Nerve

→ health checks (pluggable)

→ register service info to zookeper (or etcd)

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

SmartStack

Page 161: Under the Dome (of failure driven pipeline)

SmartStack

Page 162: Under the Dome (of failure driven pipeline)

SmartStack

Page 163: Under the Dome (of failure driven pipeline)

Smartstack + Docker = <3

Page 164: Under the Dome (of failure driven pipeline)

Smartstack + Docker = <3

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

Page 165: Under the Dome (of failure driven pipeline)

questions?

Page 166: Under the Dome (of failure driven pipeline)

Archaeological workshop

Page 167: Under the Dome (of failure driven pipeline)

Archaeological workshop

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

→ cgroups throttling on-the-fly

Do we have time for demo?

Page 168: Under the Dome (of failure driven pipeline)

Hardware: disks?

→ RAID5 vs RAID10

→ Howto RAID over 1 disk ;)

→ Cheap SSD drives?

Page 169: Under the Dome (of failure driven pipeline)

Hardware: disks?

→ RAID5 vs RAID10

→ Howto RAID over 1 disk ;)

→ Cheap SSD drives?

Page 170: Under the Dome (of failure driven pipeline)

Hardware: disks?

→ RAID5 vs RAID10

→ Howto RAID over 1 disk ;)

→ Cheap SSD drives?

Page 171: Under the Dome (of failure driven pipeline)

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

Page 172: Under the Dome (of failure driven pipeline)

Why use LVM?

→ indexation (capacity, inodes check)

→ capacity planning / iops per mount

Page 173: Under the Dome (of failure driven pipeline)

Under the dome(of failure driven pipeline)

Maciej Lasyk

4developers – Warsaw

2015-04-20