SlideShare a Scribd company logo
Under the dome
(of failure driven pipeline)
Maciej Lasyk
4developers – Warsaw
2015-04-20
Join Fedora Infrastructure!
- learn Ansible
- learn Docker with Fedora Dockerfiles
http://fedoraproject.org/en/join-fedora
Agenda?
Don't run away ;)
[…]
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
4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
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
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/
Yup, you're gut is telling truth...
Yup, you're gut is telling truth...
This will be another devops indoctrination
Yup, you're gut is telling truth...
This will be another devops indoctrination
What did you expect? ;)
Yup, you're gut is telling truth...
This will be another devops indoctrination
What did you expect? ;)
This presentation includes gentle product placement
Yup, you're gut is telling truth...
This will be another devops indoctrination
What did you expect? ;)
This presentation includes gentle product placement
DevOps Anti-Types & patterns
This is a copy/paste from
http://blog.matthewskelton.net/
w/my comments included
Great job Matthew! Thanks!
DevOps Anti-Types
http://blog.matthewskelton.net/2013/10/22/what-team-structure-is-right-for-devops-to-flourish/
DevOps Anti-Types
http://blog.matthewskelton.net/2013/10/22/what-team-structure-is-right-for-devops-to-flourish/
DevOps Anti-Types
http://blog.matthewskelton.net/2013/10/22/what-team-structure-is-right-for-devops-to-flourish/
DevOps Patterns
http://blog.matthewskelton.net/2013/10/22/what-team-structure-is-right-for-devops-to-flourish/
DevOps Patterns
http://blog.matthewskelton.net/2013/10/22/what-team-structure-is-right-for-devops-to-flourish/
DevOps Patterns
http://blog.matthewskelton.net/2013/10/22/what-team-structure-is-right-for-devops-to-flourish/
DevOps Patterns
http://blog.matthewskelton.net/2013/10/22/what-team-structure-is-right-for-devops-to-flourish/
DevOps Patterns
http://blog.matthewskelton.net/2013/10/22/what-team-structure-is-right-for-devops-to-flourish/
Ok let's CAMS
DevOPS ?== CAMS
(culture, automation, measurement, sharing)
DevOPS !== CAMS
DevOPS === people!
People
culture automation
measurement sharing
C for Culture
A for Automation
M for Monitoring
S for Sharing
4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
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
cultural change
modification of a society through innovation,
invention, discovery, or contact with other
societies
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/
→ 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
GTD? (getting things done)
GTD? (getting things done)
JFDI? (just fuckin' do it)
GTD? (getting things done)
JFDI? (just fuckin' do it)
MFBT? (move fast, break things)
GTD + JFDI + MFBT = FCH
GTD + JFDI + MFBT = FCH
(Fuckin' Customer Happy)
4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
C for Culture
A for Automation
M for Monitoring
S for Sharing
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/
→ it has to be simple
→ don't reinvent the wheel. don't fabric
→ automate from very beginning
→ repeatable tasks leads to automation
→ repeatable tasks leads to automation
→ automation leads to consistency
→ repeatable tasks leads to automation
→ automation leads to consistency
→ consistency reduces errors
→ repeatable tasks leads to automation
→ automation leads to consistency
→ consistency reduces errors
→ reducing errors leads to stable environment
→ 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
→ 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
Remember?
http://blog.matthewskelton.net/2013/10/22/what-team-structure-is-right-for-devops-to-flourish/
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
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
Short story of Anti-Type C
“we don't need ops”
Shells:
→ login
→ non-login
→ interactive
→ non – interactive
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
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
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
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
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
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
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
if 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)
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:
#Debian
if 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)
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
if 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)
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:
#Debian
if 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)
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
if 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)
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)
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
if 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)
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
if 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 madness
sudo("dpkg -i %s" % store_file_path)
Imperativeness vs declarativeness
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
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
4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
→ flat learning curve
→ flat learning curve
→ doesn't required additional resources
→ flat learning curve
→ doesn't required additional resources
→ fit for maintenance jobs / procedures
→ flat learning curve
→ doesn't required additional resources
→ fit for maintenance jobs / procedures
→ great for any containers as non-daemon
→ flat learning curve
→ doesn't required additional resources
→ fit for maintenance jobs / procedures
→ great for any containers as non-daemon
→ deals with “deployment specs”
→ 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
4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
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 ?
4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
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)
C for Culture
A for Automation
M for Monitoring
S for Sharing
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)
→ make developers create monitoring
→ find yourself between RRD and InfluxDB
→ will product team be able to query your monitoring DB?
→ Etsy case (Ganglia / Graphite)
→ make developers create monitoring
→ find yourself between RRD and InfluxDB
→ will product team be able to query your monitoring DB?
→ Etsy case (Ganglia / Graphite)
→ make developers create monitoring
→ find yourself between RRD and InfluxDB
→ will product team be able to query your monitoring DB?
→ Etsy case (Ganglia / Graphite)
C for Culture
A for Automation
M for Monitoring
S for Sharing
→ learn on OPS mistakes
→ Major Incident Reports – source of improvement
→ Learn developers about change management
→ Make CM an easy process. Use simple tools.
→ learn on OPS mistakes
→ Major Incident Reports – source of improvement
→ Learn developers about change management
→ Make CM an easy process. Use simple tools.
→ learn on OPS mistakes
→ Major Incident Reports – source of improvement
→ Learn developers about change management
→ Make CM an easy process. Use simple tools.
→ learn on OPS mistakes
→ Major Incident Reports – source of improvement
→ Learn developers about change management
→ Make CM an easy process. Use simple tools.
Let's arch the infrastructure
Addressing the space
→ VLSM
→ DHCP & DDNS
→ KISS: flat networks!
→ stop /24!
Addressing the space
→ VLSM
→ DHCP & DDNS
→ KISS: flat networks!
→ stop /24!
Addressing the space
→ VLSM
→ DHCP & DDNS
→ KISS: flat networks!
→ stop /24!
Addressing the space
→ VLSM
→ DHCP & DDNS
→ KISS: flat networks!
→ stop /24!
4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
What about DNS?
→ BIND roxx (views etc)
→ KISS: maybe decentralized w/Ansible?
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; };
};
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; };
};
4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
Linux Containers = namespaces + cgroups + storage
Linux containers equation
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)
→grouping processes
→allocating resources to particular groups
→memory
→network
→CPU
→storage bandwidth (I/O throttling)
→device whitelisting
control groups (cgroups)
→grouping processes
→allocating resources to particular groups
→memory
→network
→CPU
→storage bandwidth (I/O throttling)
→device whitelisting
control groups (cgroups)
→grouping processes
→allocating resources to particular groups
→memory
→network
→CPU
→storage bandwidth (I/O throttling)
→device whitelisting
control groups (cgroups)
→grouping processes
→allocating resources to particular groups
→memory
→network
→CPU
→storage bandwidth (I/O throttling)
→device whitelisting
control groups (cgroups)
→grouping processes
→allocating resources to particular groups
→memory
→network
→CPU
→storage bandwidth (I/O throttling)
→device whitelisting
control groups (cgroups)
→grouping processes
→allocating resources to particular groups
→memory
→network
→CPU
→storage bandwidth (I/O throttling)
→device whitelisting
control groups (cgroups)
→grouping processes
→allocating resources to particular groups
→memory
→network
→CPU
→storage bandwidth (I/O throttling)
→device whitelisting
control groups (cgroups)
little demo?
control groups (cgroups)
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
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
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
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
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
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
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
little demo?
Kernel Namespaces
→ 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
→ 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
→ 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
→ 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
→ 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
http://developerblog.redhat.com/2014/09/30/overview-storage-scalability-docker/
OverlayFS
http://developerblog.redhat.com/2014/09/30/overview-storage-scalability-docker/
OverlayFS
http://developerblog.redhat.com/2014/09/30/overview-storage-scalability-docker/
OverlayFS
Developers' envs?
→ use containers!
→ configure cgroups
→ use LXC / LXC Web Panel
→ use Ansible for spinning up anything!
Developers' envs?
→ use containers!
→ configure cgroups
→ use LXC / LXC Web Panel
→ use Ansible for spinning up anything!
Developers' envs?
→ use containers!
→ configure cgroups
→ use LXC / LXC Web Panel
→ use Ansible for spinning up anything!
Developers' envs?
→ use containers!
→ configure cgroups
→ use LXC / LXC Web Panel
→ use Ansible for spinning up anything!
4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
Containers embraces granularity → microservices!
Containers embraces granularity → microservices!
Watch out for microservices architecture, or...
Containers embraces granularity → microservices!
Watch out for microservices architecture, or...
4Developers 2015: Under the dome (of failure driven pipeline) - Maciej Lasyk
Who knows FHS?
Who knows FHS?
→ 'temp' – what it consist?
Who knows FHS?
→ 'temp' – what it consist?
→ actually: “This Entity Must Persist” ;)
Who knows FHS?
→ 'temp' – what it consist?
→ actually: “This Entity Must Persist” ;)
→ Define your FHS!
Mikado Method for the win!
→ set a goal
→ experiment
→ visualize
→ rollback
Mikado Method for the win!
→ set a goal
→ experiment
→ visualize
→ rollback
Mikado Method for the win!
→ set a goal
→ experiment
→ visualize
→ rollback
Mikado Method for the win!
→ set a goal
→ experiment
→ visualize
→ rollback
Mikado Method for the win!
→ before any work and rollbacks..
→ remember: monitoring & tests are your friends!
→ think about testing strategy – think heatmaps!
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)!
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: VM
Networking
Container's engine & provisioning
repo2
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: VM
Networking
Container's engine & provisioning
repo2
Network interfaces
Storage mounts
repo2
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: VM
Networking
Container's engine & provisioning
repo2
Network interfaces
Storage mounts
repo2
Layer 3: container
Application build
Application env
repo3
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: VM
Networking
Container's engine & provisioning
repo2
Network interfaces
Storage mounts
repo2
Layer 3: container
Application build
Application env
repo3
Resources allocation
repo3
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)!
→ automated service discovery and registration framework
→ ideal for SOA architectures
→ ideal for continuous integration & delivery
→ solves “works on my machine” problem
SmartStack
→ 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
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
SmartStack
Nerve
→ health checks (pluggable)
→ register service info to zookeper (or etcd)
→ https://github.com/airbnb/synapse
SmartStack
SmartStack
SmartStack
Smartstack + Docker = <3
Smartstack + Docker = <3
but also remember about Consul
(come to #dockerkrk 2 meetup!)
questions?
Archaeological workshop
Archaeological workshop
→ nmap, tcpdump, lsof, strace, sysdig, sar
→ cgroups throttling on-the-fly
Do we have time for demo?
Hardware: disks?
→ RAID5 vs RAID10
→ Howto RAID over 1 disk ;)
→ Cheap SSD drives?
Hardware: disks?
→ RAID5 vs RAID10
→ Howto RAID over 1 disk ;)
→ Cheap SSD drives?
Hardware: disks?
→ RAID5 vs RAID10
→ Howto RAID over 1 disk ;)
→ Cheap SSD drives?
http://techreport.com/review/27909/the-ssd-endurance-experiment-theyre-all-dead
Why use LVM?
→ indexation (capacity, inodes check)
→ capacity planning / iops per mount
Under the dome
(of failure driven pipeline)
Maciej Lasyk
4developers – Warsaw
2015-04-20

More Related Content

PPT
Ant Build Tool
Rafael Mumme
 
PDF
"BaseSpace Apps- Is One Enough?' Biomatters' CTO D.Matt Landry on Bioinformat...
Biomatters
 
PDF
Return of the Command Line: New Text Interfaces
David Noble
 
PDF
Riding on rails3 with full stack of gems
Andy Wang
 
PPT
Ferramentas de apoio ao desenvolvedor
Luciano Filho
 
POTX
Atmosphere Conference 2015: DevOps sum is greater than its parts
PROIDEA
 
PPTX
PLNOG15: Simplifying network deployment using Autonomic networking and Plug-a...
PROIDEA
 
PDF
4Developers 2015: Zapomniana obietnica świata agile - Jacek Wieczorek
PROIDEA
 
Ant Build Tool
Rafael Mumme
 
"BaseSpace Apps- Is One Enough?' Biomatters' CTO D.Matt Landry on Bioinformat...
Biomatters
 
Return of the Command Line: New Text Interfaces
David Noble
 
Riding on rails3 with full stack of gems
Andy Wang
 
Ferramentas de apoio ao desenvolvedor
Luciano Filho
 
Atmosphere Conference 2015: DevOps sum is greater than its parts
PROIDEA
 
PLNOG15: Simplifying network deployment using Autonomic networking and Plug-a...
PROIDEA
 
4Developers 2015: Zapomniana obietnica świata agile - Jacek Wieczorek
PROIDEA
 

Viewers also liked (14)

PDF
4Developers 2015: Talking and listening to web pages - Aurelio De Rosa
PROIDEA
 
PDF
PLNOG15 - IRR Lockdown - Job Snijders
PROIDEA
 
PDF
PLNOG15: VidMon - monitoring video signal quality in Service Provider IP netw...
PROIDEA
 
PDF
PLNOG15: Data Center Ecosystem - yesterday, today, tomorrow - Sylwester Biern...
PROIDEA
 
PDF
PLNOG15: Network Monitoring&Data Analytics at 10/40/100GE speeds. Why spend a...
PROIDEA
 
PDF
Atmosphere Conference 2015: Service Operations Evolution at Spotify
PROIDEA
 
PPTX
4Developers 2015: "Eksperckość" pułapka na UX Designera - Arkadiusz Smółko...
PROIDEA
 
PDF
4Developers 2015: Lessons for Erlang VM - Michał Ślaski
PROIDEA
 
PPTX
PLNOG15: Evolution of DWDM optical network architecture - Dariusz Fedorowski,...
PROIDEA
 
PDF
4Developers 2015: Inżynier po drugiej stronie lustra - Jakub Marchwicki
PROIDEA
 
PPTX
PLNOG15: Things in network with no wires - Piotr Chomczyk
PROIDEA
 
PDF
PLNOG15: Dell Open Networking – revolution in networking we deserve! - Andrze...
PROIDEA
 
PDF
Atmosphere Conference 2015: DevOps in mBank - lesson learned
PROIDEA
 
PPT
CONFidence 2015: National Guard of Latvia, Cyber Defence Unit - Gatis GRAUDIŅŠ
PROIDEA
 
4Developers 2015: Talking and listening to web pages - Aurelio De Rosa
PROIDEA
 
PLNOG15 - IRR Lockdown - Job Snijders
PROIDEA
 
PLNOG15: VidMon - monitoring video signal quality in Service Provider IP netw...
PROIDEA
 
PLNOG15: Data Center Ecosystem - yesterday, today, tomorrow - Sylwester Biern...
PROIDEA
 
PLNOG15: Network Monitoring&Data Analytics at 10/40/100GE speeds. Why spend a...
PROIDEA
 
Atmosphere Conference 2015: Service Operations Evolution at Spotify
PROIDEA
 
4Developers 2015: "Eksperckość" pułapka na UX Designera - Arkadiusz Smółko...
PROIDEA
 
4Developers 2015: Lessons for Erlang VM - Michał Ślaski
PROIDEA
 
PLNOG15: Evolution of DWDM optical network architecture - Dariusz Fedorowski,...
PROIDEA
 
4Developers 2015: Inżynier po drugiej stronie lustra - Jakub Marchwicki
PROIDEA
 
PLNOG15: Things in network with no wires - Piotr Chomczyk
PROIDEA
 
PLNOG15: Dell Open Networking – revolution in networking we deserve! - Andrze...
PROIDEA
 
Atmosphere Conference 2015: DevOps in mBank - lesson learned
PROIDEA
 
CONFidence 2015: National Guard of Latvia, Cyber Defence Unit - Gatis GRAUDIŅŠ
PROIDEA
 
Ad

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

PDF
Linux Getting Started
Angus Li
 
PPTX
linux_admin_course_full_for beginers.pptx
tejas2429
 
PDF
Get Started with Linux Management Command line Basic Knowledge
David Clark
 
PPT
Linux Troubleshooting
Keith Wright
 
PPT
Tutorial 2
tech2click
 
PPTX
Fundamentals of Linux Privilege Escalation
nullthreat
 
PDF
Linux advanced privilege escalation
Jameel Nabbo
 
DOCX
List command linux a z
Jinyuan Loh
 
PDF
Ubuntu Server CLI cheat sheet 2024 v6.pdf
TechOnDemandSolution
 
PDF
Ubuntu Server CLI cheat sheet 2024 v6 PDF
ssuser0e66eb
 
PDF
Jana treek 4
Jana Treek
 
PDF
KCC_Final.pdf
Oleg Sehelin
 
DOCX
lec1.docx
ismailaboshatra
 
PDF
Commands
damlepramod
 
PDF
Systems building-systems-a-puppet-story-19133
guestd90cb0
 
PDF
Aide 2014 - Fundamentals of Linux Privilege Escalation
nullthreat
 
PDF
Comenzi unix
Valentin Valentin
 
PDF
Introduction to linux
QIANG XU
 
PDF
The Ultimate IBM and Lotus on Linux Workshop for Windows Admins
Bill Malchisky Jr.
 
PDF
Linux commands cheat sheet by linoxide.com
Stavros Skamagkis
 
Linux Getting Started
Angus Li
 
linux_admin_course_full_for beginers.pptx
tejas2429
 
Get Started with Linux Management Command line Basic Knowledge
David Clark
 
Linux Troubleshooting
Keith Wright
 
Tutorial 2
tech2click
 
Fundamentals of Linux Privilege Escalation
nullthreat
 
Linux advanced privilege escalation
Jameel Nabbo
 
List command linux a z
Jinyuan Loh
 
Ubuntu Server CLI cheat sheet 2024 v6.pdf
TechOnDemandSolution
 
Ubuntu Server CLI cheat sheet 2024 v6 PDF
ssuser0e66eb
 
Jana treek 4
Jana Treek
 
KCC_Final.pdf
Oleg Sehelin
 
lec1.docx
ismailaboshatra
 
Commands
damlepramod
 
Systems building-systems-a-puppet-story-19133
guestd90cb0
 
Aide 2014 - Fundamentals of Linux Privilege Escalation
nullthreat
 
Comenzi unix
Valentin Valentin
 
Introduction to linux
QIANG XU
 
The Ultimate IBM and Lotus on Linux Workshop for Windows Admins
Bill Malchisky Jr.
 
Linux commands cheat sheet by linoxide.com
Stavros Skamagkis
 
Ad

Recently uploaded (20)

PDF
advancepresentationskillshdhdhhdhdhdhhfhf
jasmenrojas249
 
PDF
Balancing Resource Capacity and Workloads with OnePlan – Avoid Overloading Te...
OnePlan Solutions
 
PDF
Protecting the Digital World Cyber Securit
dnthakkar16
 
PPTX
The-Dawn-of-AI-Reshaping-Our-World.pptxx
parthbhanushali307
 
PDF
New Download MiniTool Partition Wizard Crack Latest Version 2025
imang66g
 
PDF
Adobe Illustrator Crack Full Download (Latest Version 2025) Pre-Activated
imang66g
 
PDF
An Experience-Based Look at AI Lead Generation Pricing, Features & B2B Results
Thomas albart
 
PPTX
GALILEO CRS SYSTEM | GALILEO TRAVEL SOFTWARE
philipnathen82
 
PDF
49785682629390197565_LRN3014_Migrating_the_Beast.pdf
Abilash868456
 
DOCX
Can You Build Dashboards Using Open Source Visualization Tool.docx
Varsha Nayak
 
PPTX
Visualising Data with Scatterplots in IBM SPSS Statistics.pptx
Version 1 Analytics
 
PPTX
Can You Build Dashboards Using Open Source Visualization Tool.pptx
Varsha Nayak
 
PPTX
oapresentation.pptx
mehatdhavalrajubhai
 
PPTX
Odoo Integration Services by Candidroot Solutions
CandidRoot Solutions Private Limited
 
PPTX
ASSIGNMENT_1[1][1][1][1][1] (1) variables.pptx
kr2589474
 
PDF
Download iTop VPN Free 6.1.0.5882 Crack Full Activated Pre Latest 2025
imang66g
 
PDF
Enhancing Healthcare RPM Platforms with Contextual AI Integration
Cadabra Studio
 
PDF
Teaching Reproducibility and Embracing Variability: From Floating-Point Exper...
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
PDF
Jenkins: An open-source automation server powering CI/CD Automation
SaikatBasu37
 
PPTX
Contractor Management Platform and Software Solution for Compliance
SHEQ Network Limited
 
advancepresentationskillshdhdhhdhdhdhhfhf
jasmenrojas249
 
Balancing Resource Capacity and Workloads with OnePlan – Avoid Overloading Te...
OnePlan Solutions
 
Protecting the Digital World Cyber Securit
dnthakkar16
 
The-Dawn-of-AI-Reshaping-Our-World.pptxx
parthbhanushali307
 
New Download MiniTool Partition Wizard Crack Latest Version 2025
imang66g
 
Adobe Illustrator Crack Full Download (Latest Version 2025) Pre-Activated
imang66g
 
An Experience-Based Look at AI Lead Generation Pricing, Features & B2B Results
Thomas albart
 
GALILEO CRS SYSTEM | GALILEO TRAVEL SOFTWARE
philipnathen82
 
49785682629390197565_LRN3014_Migrating_the_Beast.pdf
Abilash868456
 
Can You Build Dashboards Using Open Source Visualization Tool.docx
Varsha Nayak
 
Visualising Data with Scatterplots in IBM SPSS Statistics.pptx
Version 1 Analytics
 
Can You Build Dashboards Using Open Source Visualization Tool.pptx
Varsha Nayak
 
oapresentation.pptx
mehatdhavalrajubhai
 
Odoo Integration Services by Candidroot Solutions
CandidRoot Solutions Private Limited
 
ASSIGNMENT_1[1][1][1][1][1] (1) variables.pptx
kr2589474
 
Download iTop VPN Free 6.1.0.5882 Crack Full Activated Pre Latest 2025
imang66g
 
Enhancing Healthcare RPM Platforms with Contextual AI Integration
Cadabra Studio
 
Teaching Reproducibility and Embracing Variability: From Floating-Point Exper...
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
Jenkins: An open-source automation server powering CI/CD Automation
SaikatBasu37
 
Contractor Management Platform and Software Solution for Compliance
SHEQ Network Limited
 

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

  • 1. Under the dome (of failure driven pipeline) Maciej Lasyk 4developers – Warsaw 2015-04-20
  • 2. Join Fedora Infrastructure! - learn Ansible - learn Docker with Fedora Dockerfiles http://fedoraproject.org/en/join-fedora
  • 4. […] 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
  • 8. 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
  • 9. 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/
  • 10. Yup, you're gut is telling truth...
  • 11. Yup, you're gut is telling truth... This will be another devops indoctrination
  • 12. Yup, you're gut is telling truth... This will be another devops indoctrination What did you expect? ;)
  • 13. Yup, you're gut is telling truth... This will be another devops indoctrination What did you expect? ;) This presentation includes gentle product placement
  • 14. Yup, you're gut is telling truth... This will be another devops indoctrination What did you expect? ;) This presentation includes gentle product placement
  • 15. DevOps Anti-Types & patterns This is a copy/paste from http://blog.matthewskelton.net/ w/my comments included Great job Matthew! Thanks!
  • 25. DevOPS ?== CAMS (culture, automation, measurement, sharing)
  • 26. DevOPS !== CAMS DevOPS === people!
  • 28. C for Culture A for Automation M for Monitoring S for Sharing
  • 31. Is there a need for change? “agile” and “cloud”: → focus on delivery → close collaboration → lightweight environment and components
  • 32. cultural change modification of a society through innovation, invention, discovery, or contact with other societies
  • 33. 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/
  • 34. → 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
  • 36. GTD? (getting things done) JFDI? (just fuckin' do it)
  • 37. GTD? (getting things done) JFDI? (just fuckin' do it) MFBT? (move fast, break things)
  • 38. GTD + JFDI + MFBT = FCH
  • 39. GTD + JFDI + MFBT = FCH (Fuckin' Customer Happy)
  • 41. C for Culture A for Automation M for Monitoring S for Sharing
  • 42. 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/
  • 43. → it has to be simple → don't reinvent the wheel. don't fabric → automate from very beginning
  • 44. → repeatable tasks leads to automation
  • 45. → repeatable tasks leads to automation → automation leads to consistency
  • 46. → repeatable tasks leads to automation → automation leads to consistency → consistency reduces errors
  • 47. → repeatable tasks leads to automation → automation leads to consistency → consistency reduces errors → reducing errors leads to stable environment
  • 48. → 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
  • 49. → 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
  • 51. 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
  • 52. 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
  • 53. Short story of Anti-Type C “we don't need ops” Shells: → login → non-login → interactive → non – interactive
  • 54. 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
  • 55. 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
  • 56. 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
  • 57. 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
  • 58. 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
  • 59. 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
  • 60. 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 if 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)
  • 61. 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: #Debian if 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)
  • 62. 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 if 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)
  • 63. 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: #Debian if 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)
  • 64. 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 if 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)
  • 65. 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)
  • 66. 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 if 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)
  • 67. 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 if 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 madness sudo("dpkg -i %s" % store_file_path)
  • 69. 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
  • 70. 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
  • 73. → flat learning curve → doesn't required additional resources
  • 74. → flat learning curve → doesn't required additional resources → fit for maintenance jobs / procedures
  • 75. → flat learning curve → doesn't required additional resources → fit for maintenance jobs / procedures → great for any containers as non-daemon
  • 76. → flat learning curve → doesn't required additional resources → fit for maintenance jobs / procedures → great for any containers as non-daemon → deals with “deployment specs”
  • 77. → 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
  • 80. →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 ?
  • 84. 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)
  • 85. C for Culture A for Automation M for Monitoring S for Sharing
  • 87. → make developers create monitoring → find yourself between RRD and InfluxDB → will product team be able to query your monitoring DB? → Etsy case (Ganglia / Graphite)
  • 88. → make developers create monitoring → find yourself between RRD and InfluxDB → will product team be able to query your monitoring DB? → Etsy case (Ganglia / Graphite)
  • 89. → make developers create monitoring → find yourself between RRD and InfluxDB → will product team be able to query your monitoring DB? → Etsy case (Ganglia / Graphite)
  • 90. → make developers create monitoring → find yourself between RRD and InfluxDB → will product team be able to query your monitoring DB? → Etsy case (Ganglia / Graphite)
  • 91. C for Culture A for Automation M for Monitoring S for Sharing
  • 92. → learn on OPS mistakes → Major Incident Reports – source of improvement → Learn developers about change management → Make CM an easy process. Use simple tools.
  • 93. → learn on OPS mistakes → Major Incident Reports – source of improvement → Learn developers about change management → Make CM an easy process. Use simple tools.
  • 94. → learn on OPS mistakes → Major Incident Reports – source of improvement → Learn developers about change management → Make CM an easy process. Use simple tools.
  • 95. → learn on OPS mistakes → Major Incident Reports – source of improvement → Learn developers about change management → Make CM an easy process. Use simple tools.
  • 96. Let's arch the infrastructure
  • 97. Addressing the space → VLSM → DHCP & DDNS → KISS: flat networks! → stop /24!
  • 98. Addressing the space → VLSM → DHCP & DDNS → KISS: flat networks! → stop /24!
  • 99. Addressing the space → VLSM → DHCP & DDNS → KISS: flat networks! → stop /24!
  • 100. Addressing the space → VLSM → DHCP & DDNS → KISS: flat networks! → stop /24!
  • 102. What about DNS? → BIND roxx (views etc) → KISS: maybe decentralized w/Ansible?
  • 103. 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; }; };
  • 104. 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; }; };
  • 106. Linux Containers = namespaces + cgroups + storage Linux containers equation
  • 107. 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)
  • 108. →grouping processes →allocating resources to particular groups →memory →network →CPU →storage bandwidth (I/O throttling) →device whitelisting control groups (cgroups)
  • 109. →grouping processes →allocating resources to particular groups →memory →network →CPU →storage bandwidth (I/O throttling) →device whitelisting control groups (cgroups)
  • 110. →grouping processes →allocating resources to particular groups →memory →network →CPU →storage bandwidth (I/O throttling) →device whitelisting control groups (cgroups)
  • 111. →grouping processes →allocating resources to particular groups →memory →network →CPU →storage bandwidth (I/O throttling) →device whitelisting control groups (cgroups)
  • 112. →grouping processes →allocating resources to particular groups →memory →network →CPU →storage bandwidth (I/O throttling) →device whitelisting control groups (cgroups)
  • 113. →grouping processes →allocating resources to particular groups →memory →network →CPU →storage bandwidth (I/O throttling) →device whitelisting control groups (cgroups)
  • 114. →grouping processes →allocating resources to particular groups →memory →network →CPU →storage bandwidth (I/O throttling) →device whitelisting control groups (cgroups)
  • 116. 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
  • 117. 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
  • 118. 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
  • 119. 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
  • 120. 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
  • 121. 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
  • 122. 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
  • 124. → 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
  • 125. → 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
  • 126. → 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
  • 127. → 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
  • 128. → 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
  • 132. Developers' envs? → use containers! → configure cgroups → use LXC / LXC Web Panel → use Ansible for spinning up anything!
  • 133. Developers' envs? → use containers! → configure cgroups → use LXC / LXC Web Panel → use Ansible for spinning up anything!
  • 134. Developers' envs? → use containers! → configure cgroups → use LXC / LXC Web Panel → use Ansible for spinning up anything!
  • 135. Developers' envs? → use containers! → configure cgroups → use LXC / LXC Web Panel → use Ansible for spinning up anything!
  • 137. Containers embraces granularity → microservices!
  • 138. Containers embraces granularity → microservices! Watch out for microservices architecture, or...
  • 139. Containers embraces granularity → microservices! Watch out for microservices architecture, or...
  • 142. Who knows FHS? → 'temp' – what it consist?
  • 143. Who knows FHS? → 'temp' – what it consist? → actually: “This Entity Must Persist” ;)
  • 144. Who knows FHS? → 'temp' – what it consist? → actually: “This Entity Must Persist” ;) → Define your FHS!
  • 145. Mikado Method for the win! → set a goal → experiment → visualize → rollback
  • 146. Mikado Method for the win! → set a goal → experiment → visualize → rollback
  • 147. Mikado Method for the win! → set a goal → experiment → visualize → rollback
  • 148. Mikado Method for the win! → set a goal → experiment → visualize → rollback
  • 149. Mikado Method for the win! → before any work and rollbacks.. → remember: monitoring & tests are your friends! → think about testing strategy – think heatmaps!
  • 150. 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)!
  • 151. 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: VM Networking Container's engine & provisioning repo2
  • 152. 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: VM Networking Container's engine & provisioning repo2 Network interfaces Storage mounts repo2
  • 153. 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: VM Networking Container's engine & provisioning repo2 Network interfaces Storage mounts repo2 Layer 3: container Application build Application env repo3
  • 154. 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: VM Networking Container's engine & provisioning repo2 Network interfaces Storage mounts repo2 Layer 3: container Application build Application env repo3 Resources allocation repo3
  • 155. 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)!
  • 156. → automated service discovery and registration framework → ideal for SOA architectures → ideal for continuous integration & delivery → solves “works on my machine” problem SmartStack
  • 157. → 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
  • 158. 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
  • 160. Nerve → health checks (pluggable) → register service info to zookeper (or etcd) → https://github.com/airbnb/synapse SmartStack
  • 164. Smartstack + Docker = <3 but also remember about Consul (come to #dockerkrk 2 meetup!)
  • 167. Archaeological workshop → nmap, tcpdump, lsof, strace, sysdig, sar → cgroups throttling on-the-fly Do we have time for demo?
  • 168. Hardware: disks? → RAID5 vs RAID10 → Howto RAID over 1 disk ;) → Cheap SSD drives?
  • 169. Hardware: disks? → RAID5 vs RAID10 → Howto RAID over 1 disk ;) → Cheap SSD drives?
  • 170. Hardware: disks? → RAID5 vs RAID10 → Howto RAID over 1 disk ;) → Cheap SSD drives?
  • 172. Why use LVM? → indexation (capacity, inodes check) → capacity planning / iops per mount
  • 173. Under the dome (of failure driven pipeline) Maciej Lasyk 4developers – Warsaw 2015-04-20